Hacker News new | ask | show | jobs
by sophacles 5631 days ago
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.

2 comments

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?