

Goal for 2011: Do not learn another programming language - chopmo
http://chopmode.wordpress.com/2011/01/14/goal-for-2011-do-not-learn-another-programming-language/

======
sophacles
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.

~~~
RodgerTheGreat
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.

~~~
chopmo
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?

------
DrJokepu
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.

~~~
chopmo
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.

------
CurrentB
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.

~~~
jesstaa
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.

~~~
uriel
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.

------
sharms
I have been struggling with this myself lately. For instance, at work, I have:

(1) Flask App (2) Django Apps (1) Ruby on rails app (1) Symfony / PHP app (1)
Play framework java app (1) Perl Catalyst app

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.

------
kapilkaisare
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.

------
vidar
<http://en.wikipedia.org/wiki/Diminishing_returns>

