This reminds me of the old adage: "A jack of all trades is a master of none".
I totally agree that learning new programming languages is great, and can help someone get a lot of new concepts. It certainly is fantastic for learning to separate syntax from algorithms from styles of thought. However I have found that there is a point of diminishing returns.
There is only so much you can get from learning e.g. 5 different object models, at some point it is no longer new, just annoying and different.
This is doubly true and noticeable if your previous languages were all over the map -- say js, python, haskell, c, prolog and so on.
At some point, it becomes more useful to dive deep into other things. Are you a systems guy? Attack a kernel bug. Are you a network guy? Make a traffic classifier. (or want to learn them well...) Trying to learn a new language and a new problem is prohibitively expensive sometimes.
My general rule of thumb is: if there is nothing about the new language that excites me, find a different problem that does. If I have to learn that language I will, but I don't need to force it.
A few years back I had a job where I spent 50% of my time on a glamorous project and the other 50% doing "internal consulting", which means doing various projects for various people using various toolsets. After that I spent about a year working at job shops, where it was the same story.
In this environment I was forced to use a new language every few weeks... Not usually glamorous languages (say Haskell) but more commercially common (and not so common) languages.
I found that my productivity was definitely hurt by the constant need to re-learn the details of how to accomplish simple tasks, like opening a file or figuring out where they hide the urlencode function.
That can get you into maintenance programming hell pretty quick. Your manager always thinks you're too slow (although other people doing the same job are even less productive) and you don't get respect, don't get a raise, and ultimately the walls squeeze in until you need to move on.
Personally I think the things you can ~do~ with software are more interesting. I think it makes more sense to pick a language that's "good enough" and focus on getting highly proficient.
At some point in your programming career, you should learn an ALGOL-descendant (C, C++, C#, Java, etc), a Lisp-descendant (CL, Scheme, etc), A Prolog-descendant (Prolog itself, maybe SQL as a programming language), A Forth (better yet, read Starting Forth by Leo Brodie and write your own), an ML-descendant (like Haskell) and an APL-descendant like J. Nearly every language leans heavily upon one of these foundations.
Most of us are exposed to SQL during our careers, but I expect that few think of it as a programming language. Can you recommend any good resources in this area?
BTW where would you say that Erlang belongs in this picture?
The author proves his own point by using C# as an example for a "boring and similar" language; he clearly doesn't know the language well enough if he truly believes that.
That being said, there are two reasons you would want to learn a programming language: to add it to your tool set or to learn the concepts behind it, either for personal gain or to apply those concepts in other languages. I really don't think I will ever use Common Lisp in a production environment, however learning the concepts in Common Lisp really influenced the way I code in, say for instance, JavaScript or C. There is no need for me to learn all the intricacies of Common Lisp in depth because I will never need that knowledge. However, you need to have a very good understanding of the tools you actually use every day.
In short, my advice is to keep learning new languages to discover new concepts but also keep learning more about the tools you use every day; they're equally important.
Well, the term "boring" is of course very subjective. I'm certainly not claiming that I have nothing left to learn from C#, I'm just not very interested in it right now, for various reasons.
Other than that, I completely agree with your thoughts on this.
My compulsive frequent jumps to new programming languages have also settled down after learning Clojure, for pretty much the same reasons. I never really felt comfortable with any languages I've messed with, even as a novice programmer. I just feel so at home with Clojure and yet there is so much to learn and improve on that I should be busy with it for awhile. It really is a masterful blend of beauty and practicality.
I've had the same frequent jumps between programming languages, most have never really felt right. I always loved C, but C is very handicapped for a lot of things I have to do. Erlang was close, communication processes really felt right. I once come across a language called 'Alef' which I feel in love with. But sadly it was no longer in development.
Lucky for me 'Alef' closest cousin 'Go' was released in late 2009 and I've been focusing on that ever since.
A nice thing about Go is that is a relatively small language, and you can grasp the whole language and have a chance of holding the whole thing in your head without going insane in the process.
And despite that, it has plenty of interesting and fun parts like the implicit-interfaces type system, etc.
I wrote all these in the last two years or so, and just keep changing languages for no legitimate reason. I am sure things might improve if I focused on creating them all under one language, no matter what it may be.
I think part of the drive for many of us is, we don't want to be caught not knowing technology X. So we strive to learn, but that puts us into the jack of all category.
I have worked with PHP, Javascript, Python and Java professionally while using Lua to mod my editor (first SciTe, now TextAdept)over the last four years.
I'm making a conscious effort focus on other aspects of programming now - algorithms, data structures, ai, etc... I think that studying these in addition to learning Python && Javascript && Lua indepth will be a better learning experience.
I totally agree that learning new programming languages is great, and can help someone get a lot of new concepts. It certainly is fantastic for learning to separate syntax from algorithms from styles of thought. However I have found that there is a point of diminishing returns.
There is only so much you can get from learning e.g. 5 different object models, at some point it is no longer new, just annoying and different.
This is doubly true and noticeable if your previous languages were all over the map -- say js, python, haskell, c, prolog and so on.
At some point, it becomes more useful to dive deep into other things. Are you a systems guy? Attack a kernel bug. Are you a network guy? Make a traffic classifier. (or want to learn them well...) Trying to learn a new language and a new problem is prohibitively expensive sometimes.
My general rule of thumb is: if there is nothing about the new language that excites me, find a different problem that does. If I have to learn that language I will, but I don't need to force it.