It's one thing being able to write simple programs for class assignments, but those are quite different from writing something as complex as the Linux kernel or a multi-threaded banking app.
Developing in-depth expertise in a language is a great idea, definitely you should follow through on that. However you can ratchet down your anxiety level a bit. Your first job will not be to write the Linux kernel or a multi-threaded banking app from scratch. If you are lucky and talented your first job will be to add some feature to the Linux kernel or an existing multi-threaded banking up. You'll be able to study other people's code, see how they did things, and follow their example. If you find sections of code you don't understand, you pull out the language and API references, or if you are really luck, go down the hall and get tutored by the person who originally wrote it. I mean even Linus didn't write the Linux kernel as it exists now from scratch. If you are not so lucky or talented you'll be writing a CRUD application that won't tax even your existing language skills, though it may tax your organizational skills.
There is a trade-off in picking which language to specialize in. The majority of jobs are probably in Java and .Net, but those languages also have the largest supply of programmers. There are fewer jobs for FORTRAN and C, but there are also fewer programmers qualified for those jobs. To some extent it will balance out, so you can suit yourself. One genuine limitation is that you may be limited to working in one of the major tech centers if you go with one of the non-commodity languages.