When you start out as a software developer it's easy to get fixated on one particular language. It might be the first language you learned, or the first you used professionally, but you'll probably form a serious attachment to it. You might view this language as perfect, or at least much better than any other, and you'll tend to use it for pretty much everything you need to do.
After a while though, you'll start looking around at other languages and seeing why other people think they're good. Initially you may think they're nowhere near as good as your favourite language, and stick purely with your own. This is really the wrong approach.
As an example my first favourite language was C++. It was, and still is, amazing if you're trying to wring every last clock cycle out of the CPU. It's complex, but if you stick at it it's possible to learn it to a high standard. In that respect it's always struck me as being like Latin - once you understand it, you can use that knowledge to understand many other languages. What soon became evident to me, especially with the Microsoft version of C++, was that when it came to UI development, C++ is less than ideal! Macros handling Windows messaging, never quite knowing where Windows messages will go, all thanks to the unholy mess that is the MFC, and to top it all off the abomination that was Hungarian Notation that so many tried to use to "standardize" naming. I realize Hungarian Notation wasn't strictly a C++ feature, but it became closely associated with it and ruined it for many.
I'd used many other languages before I became a professional developer - Fortran (I was forced to at university!), Pascal, Assembler and even though I hate to admit it, BASIC. Once I became a developer I looked around at other languages too, and found it hard to find one that was better than C++. It was flexible, fast and, even more importantly, there were plenty of jobs advertised for people who could develop in it. I learned a reasonable amount of SQL when the chance arose, mostly so I could write my own database layers without depending on anyone else, but databases always seemed rather separate from the C++ parts of the system. Eventually my employer of the time decided to try C#, which was then at version 2.0. This was interesting. because version 2.0 introduced generics, which seemed to be a sort of lightweight version of C++ templates, and so got rid of the need to cast to and from Object
in collections. Why they didn't do that to start with I don't know - it's as bad as when many people wrote C++ collections as collections of void**
. The thing that struck me with C# was that, although it ran much slower than C++, it was so much quicker to produce anything with a UI. The event-based interaction between controls and windows was so much easier to predict, and Visual Studio actually allowed you to create a skeleton method from the UI. Gradually, as MS improved the compiler and run-time performance, and added new language features, this became my new favourite language.
Once this happens to you you’ll probably get a thought running around in your mind - maybe you were a little too attached to your favourite language. You may try to dismiss it, because you’ve spent a lot of time learning this first language, and now you’re looking at another. Is this new favourite destined to blossom and fade away like the first? Will your list of favourite languages end up as long, varied and regrettable as the spouses of a troubled country singer?
Probably.
The thing to remember is that languages are just tools, designed for a specific range of applications. New languages appear all of the time, all aimed at solving different problems. There's no point in getting overly attached to any one in particular. I’m certainly not saying to not learn to be very good at the ones you use, but if you're a C++ expert and you move to a field where C# is the language of choice, you'd better start learning to be a C# expert too.
Personally I spent years using C++ and then C#, again fooling around with other languages on the side (there's that troubled country singer analogy again!) and eventually moved to a company who decided they would start using Java instead. Mercifully they changed their minds and decided they'd add Python on Linux to their repertoire, which I duly learned.
So, you might be wondering what you should do now. What languages should you learn?
I really don't know.
However not really knowing for certain doesn't mean I won't give you my opinion: I'm a software developer after all! You need a language for each area of the systems you work in. So if you work with User Interfaces you'll need something like JavaScript / ECMAScript, maybe C# for ASP.NET or maybe PHP. Server-side is usually something compiled and fast: C++, C#, or maybe something scripted like Python. If you go near databases then whatever you do take the time to learn some SQL. It's a little strange to start with, you'll make plenty of mistakes, but with the help of a decent DBA you'll be able to move away from the inefficiencies of ORMs and write your own database access layers.
Of course, you might be looking at this list and thinking that I haven't mentioned your personal favourite language, and that's quite likely. It's also alright - there are so many languages that there's a very good chance I've never used yours. I've probably never worked in the industry you're in or in the country you're in. I've worked in areas where languages and databases correlate closely to industries, but also in industries where the languages and databases they use correlates to their location within the country.
The most important thing to remember is that whatever programming language you start with, it won't be the only one you ever use. You need to keep learning new languages in the same way you need to keep learning new development techniques, and remember that languages are just tools, ways to express your solutions to the problems you’re presented with during your work.