top | item 154692

New Languages Considered Harmful: "Learning new languages is a waste of time."

53 points| tb | 18 years ago |duartes.org | reply

78 comments

order
[+] scott_s|18 years ago|reply
I think he's operating with the assumption that all languages have the same concepts, just with different "lexical and syntactical bureaucracy." But I think the point of the advice to learn more programming languages is to expose yourself to different programming paradigms. And in order to do this, I don't think you need to become an expert in the nuances of that language, but you need to become comfortable in thinking in new ways.

If your language of choice is C, and you learn Pascal, then you haven't gained any new concepts. But if your language of choice is C, and you learn Prolog, then you will be exposed to a whole new way of thinking.

My native state of coding is procedural with a sprinkling of OO, mainly to represent families of concrete data types. I find functional programming appealing on an emotional level, and my attempts to learn how to think functionally have changed my native coding habits, even in non-functional languages.

My pragmatic advice is learn enough of a language from a different programming paradigm so you can apply that new way of thinking to your native language.

[+] mhartl|18 years ago|reply
I didn't read it that way. He's seems to be claiming that getting good at a new language involves a lot of non-mind-expanding overhead---which, in the author's estimation, isn't worth the opportunity cost past one or two additional (sufficiently different) languages. I think this passage sums it up:

Aside from the immediate reasons, there's some merit to the mind expansion argument. I think being proficient in at least two languages is indeed important for boosting your ability as a developer. This resembles human language: learning a second one changes the way you think and your perception of the world. The third or fourth, not as much. But it can't be any two languages. If you know Portuguese and Spanish, your mind didn't have to expand much. Likewise, learning VB.net and C# doesn't count.

[+] sah|18 years ago|reply
My pragmatic advice is learn enough of a language from a different programming paradigm so you can apply that new way of thinking to your native language.

I think "enough" is a crucial point here. The author almost seemed to be arguing against switching to a new language every year, which I agree is ridiculous. The idea is to learn some new concepts, not to write significant programs in a new language every year. I only adopt new languages for regular work if they're the pragmatic choice.

[+] paul_reiners|18 years ago|reply
That's exactly it. Saying that learning a new language is just a matter of learning a new syntax is like saying that an English-speaking, non-German speaker could translate a German text to English by taking a German-English dictionary and going through and translating the words one-by-one. It's not quite as simple as that.
[+] tptacek|18 years ago|reply
A real phenomenon: there are people who never get anything done because they are constantly dabbling in the language flavor of the moment.

Another real phenomenon: some of the best programmers in the world still rely entirely on C. [Late edit: "and outperform developers in modern languages"].

[+] mechanical_fish|18 years ago|reply
I agree, absolutely. But I wouldn't go so far as to say that "dabbling in languages is counterproductive". That's like concluding that martinis are fundamentally wrong because some people are alcoholics.

I'd also suggest that of the two pathological conditions -- Overdabbling and Underdabbling -- the Underdabblers outnumber the Overdabblers by a huge margin. We just see a lot more of the latter on the Internet, because for many obsessive dabblers the whole point is to brag about it.

You need to find a balance. In the end, I think this essay is much more about that balance than its title suggests.

[+] plinkplonk|18 years ago|reply
A different view point.

From Peter Norvig's "teach Yourself Programming in 10 years"

"Learn at least a half dozen programming languages. Include one language that supports class abstractions (like Java or C++), one that supports functional abstraction (like Lisp or ML), one that supports syntactic abstraction (like Lisp), one that supports declarative specifications (like Prolog or C++ templates), one that supports coroutines (like Icon or Scheme), and one that supports parallelism (like Sisal)."

[+] anirbas|18 years ago|reply
That's actually very similar to the point this writer makes: that learning different languages does have benefits, but that they should be significantly different. The two just differ on whether you should learn many different languages, or a few.
[+] Tichy|18 years ago|reply
These days, I don't know if I can trust advice on the internet anymore. Could be they just want to send the competition down the wrong path (Norvig is commercial now, working for Google). Follow their advice, and you waste a lot of time, while they are busy making progress.
[+] motoko|18 years ago|reply
His thesis: that learning the basics of most new languages is an exercise in tedium and trivia with little or negative benefit. He instead recommends reading high-quality code, learning computer science theory, and mastering a few quality tools (not Java).

I thought this was going to be a "let's make fun of this idiot" Reddit-type post, but I was wrong.

[+] edw519|18 years ago|reply
I promised myself long ago that I would never engage a "language war" thread. Not sure if I'm actually breaking my promise, but this article was too compelling to ignore. The author states what I've intuitively known all along, but was never really able to explain.

I am proficient in about a dozen languages, but only use 3. I go back to the SPS, PL1, Fortran, and COBOL days, and would rather chew razor blades than ever use them again. Today, I use javascript on the client and php on the server; I have yet to find a problem I couldn't solve with them.

In the years in between I discovered BASIC and have found it to be the Swiss army knife of apps. Not the old Dartmouth Basic, and certainly not anything Microsoft bastardized, but there are many other versions that seamlessly integrate with relational data bases that I think are a dream. <laughter dies down>

It's actually reached the point where I "think" in BASIC, design my app, and then sometimes write in in javascript or php.

I certainly wouldn't recommend my approach to someone else, but I think that's the whole point. Use the right tool for the job and get good at it. I see no need to learn new languages just for the purpose of learning something new. If I get "curious" or want to expand my mind, I can think of several hundred app problems waiting to be solved in any language, take your pick.

Thanks, Gustavo Duarte, for the chance to put a little thought into this. Time to xfer control back to work (GO TOs not allowed).

[+] gordianknot|18 years ago|reply
You should write What Made Basic Different.
[+] jgrahamc|18 years ago|reply
I think he misses the important benefit of being more marketable as a programmer. I have a major problem when I interview people and they are totally focussed on one language (e.g. Java). It's not the language that ends up worrying me, it's the lack of curiosity.

For that reason I often ask people in interviews to tell me about the computer they have at home: what OS does it run and why? And I ask them what they hack in their spare time. That tends to be very revealing.

[+] tptacek|18 years ago|reply
The unfortunate fact is that if you're optimizing for marketability, you're going to learn PHP, Java, and C++.
[+] ojbyrne|18 years ago|reply
Ah, one interview question I know the right answer to.

Q: What computer do you have at home

A: I have five.

Q: What OS do they run?

A: All of them. ;-)

[+] mosburger|18 years ago|reply
I think the article would be received more warmly if it were put into the perspective of a company project. I.e., don't implement this new product in XYZ just because I want to know/learn XYZ and it's all the rage right now. That would be a waste of time.

I'm a full-time Java programmer now because it pays the bills. But you'd better believe I'm learning other lanaguages on the side, because it's pretty clear that Java 1.) has some serious limitations that other languages don't have, and 2.) is falling out-of-favor as a web development tool to more flexible, less statically-typed, more functional languages.

It's not so much to "open my mind" as it is to keep myself marketable after Java's impending demise.

[+] wallflower|18 years ago|reply
> It's not so much to "open my mind" as it is to keep myself marketable after Java's impending demise.

As someone who is starting to step out of the comfort zone of Java, I agree about marketability. However, Java is not going to disappear, it's firmly entrenched. It's like COBOL. I'm not sure how Sun pulled it off exactly but Java in it's 13 years has spread itself in a lot of corporate systems/applications/backends (some of which may be COBOL). Ruby on Rails and other minority languages are the minority in some companies precisely because the majority don't like the minority ("RoR? We don't use that"). However, there are some rogues in companies who are trying to bring RoR in discretely (I'm trying to be one - developing business cases for RoR adoption on small projects)

[+] pmorici|18 years ago|reply
Completely agree you shouldn't choose a language just because you feel like learning a new one but the article ignores the design implications of choosing one language over another. I just don't think it is a particularly complete or well reasoned argument and is a border line rant.
[+] Jesin|18 years ago|reply
Waste of time? Quite a lot of fun things could be considered a waste of time. Learning new languages can be fun. People learning one language and sticking with it for life is why COBOL stuck around for so long, and Java seems to be going the same way.

EDIT: I just read the article. Maybe it's just that many of the languages I've been learning have had little syntax and no operator precedence quirks (or any operator precedence whatsoever). I also noticed the article made the same comment about COBOL and Java that I did. I really should read these things first. Anyway, I guess as a high school freshman I'm still at the point where learning new languages is really the best I can do.

[+] jrockway|18 years ago|reply
> Maybe it's just that many of the languages I've been learning have had little syntax and no operator precedence quirks

This is a good point. It is probably not a good use of your time to learn Java and then C# (or similar), or Perl and then Python and Ruby. Sure, there are differences, but basically the languages in the same groups are the same.

If you go for the more "academic" languages, you'll get more return on your learning investment. Recently, I've learned Lisp (this is what started me down the "wait, learning new languages isn't a waste of time!" path), Smalltalk, and OCaml, and I've picked up a lot of good ideas to port to my primary language. (Otherwise, my background before that was C, Perl, and Haskell. All good languages to know :)

[+] gustavo_duarte|18 years ago|reply
By all means, play around with different languages when you're getting started. I think it's really important to be exposed to different languages as part of your education, be it undergrad or (for you as it was for me) junior/high school.

But even in your situation, I'd say balance languages with other knowledge that is important. It's easy to play with languages because it's fun, but there's a lot of other important stuff to learn, some of which might make more practical difference to you.

But by all means, learn and have fun. If you're getting a kick out of languages, have at it, especially if you've got plenty of time.

[+] wallflower|18 years ago|reply
It's just his opinion.

Learning new languages teaches you what you know and most importantly don't know. Coming from a Java working background, I find Ruby on Rails pleasantly abstruse and remarkably concise (which makes it hard to learn, coming from the land of boilerplateness).

I have a long commute on the train and I find that when I am trying to debug/learn - (learning Ruby on Rails) - the time flies by like that. If that isn't a benefit (making time fly by when you're having fun learning), I don't know what is.

[+] ChrisRicca|18 years ago|reply
Here here. Learning a new language can be fun - opportunity cost be damned.
[+] rapind|18 years ago|reply
The article's not bad. His main focus, and he states it, is not to constantly learn new languages for the sake of profit. As a hobby cool, but not for profit. I can agree with that. There are all sorts of topics you could learn for fun and profit, and investing in a new language is not necessarily the silver bullet to mad coin.

Who cares though? I think as long as we're constantly learning, whether it's new programming languages, economics, or snowbaording, it makes life interesting. New skills always seem to come in useful at some point. Make the investment in learning things that interest you and it'll always pay off. Don't let someone else tell you what NOT to learn. That's jut silly. Heck even learning COBOL or FORTRAN would benefit you with a little insight, and might be fun in a retro sort of way.

[+] edw519|18 years ago|reply
"Heck even learning COBOL or FORTRAN would benefit you with a little insight, and might be fun in a retro sort of way."

<sarcasm>

So would gargling Drano.

</sarcasm>

(I always thought about COBOL like this: Let's spend 3 hours getting dressed to go outside and pick up the mail.)

[+] alfredp|18 years ago|reply
I think that the writer is deliberately being controversial just to get a rise out of the readers. Having said that - he does make some valid points.

The bottom line is that you have to use the right tool for the job: it could mean using what you know, learning something new, or even inventing something totally new and original.

[+] astine|18 years ago|reply
I get the impression that the author didn't think through his argument before he wrote it. He starts off saying one thing and proceeds to contradict himself. Really there are advantages and disadvantages to everything. Spending too much time learning new languages and never master CS basics is clearly a waste. However, never learning a new language, or more importantly, never programming in a fashion or environment that is unfamiliar to you, can lead to an insular way of thinking. "If all you have is a hammer, all problems begin to look like nuts," or something like that. Its a matter of being a little bit selective and aggressive with your choices. If a new language is too easy, its probably not teaching you much.
[+] Tichy|18 years ago|reply
Relax, people - he still recommends learning something else than Java.
[+] pmorici|18 years ago|reply
I disagree with this completely. Refusing to learn new things in favor of what you already know is the domain of fools.
[+] andygeers|18 years ago|reply
Is this about a refusal to learn new things, though? He does, after all, point out towards the end that good programmers use multiple languages - so whilst a refusal to learn new things is a bad thing, isn't a bit of prudence in how to budget your time a good thing?
[+] tptacek|18 years ago|reply
You misread the article. He's not arguing against learning new things. He's arguing against learning the specific new things you want him to; he'd rather learn business or security.
[+] icey|18 years ago|reply
I've read this article three times over now, trying to find a way to agree with it. I'm sorry, but since this guy thinks learning Dvorak is a better use of his time, I'm afraid I'm going to have to write him, and this terrible article off.
[+] attack|18 years ago|reply
Or less inflammatory: After a certain point, the cost of learning another language can outweigh the benefit.

I don't know many people who learn languages without the intent of ever spending time to do something with them.

[+] cmars232|18 years ago|reply
Learning new languages can be mind-expanding, but taken to an excess, you might spending more time tinkering with languages than getting stuff done.
[+] utx00|18 years ago|reply
i just read up to here (2nd parapraph): "The theory is that by learning a new language you "expand your mind" and become "a better programmer". Right. By that kind of argument we should all be eating LSD (don't)."

this sounds very much like inexperience.

[+] mechanical_fish|18 years ago|reply
You should finish it. By the end of the essay, the guy has successfully argued himself out of half of his original thesis, and has laid the seeds for finishing off the other half. That's one of the good side effects of essay writing: You can start out arguing one thing and eventually find yourself having to argue something else.

One of the things the guy missed is there in plain sight in his essay:

You need to get to know the libraries, struggle with the environment, find or tune a text editor, look for tools, and so on. Most of the effort has to do with housekeeping chores, which are surely not mind-expanding by anyone's measure. If you hope to be productive in the new language, things are even bleaker: proficiency has less to do with the language itself than with the myriad technologies you must master to use it effectively.

Unfortunately, everyday productivity is a lot of housekeeping chores, one after another. While your higher mind is soaring with the architecture astronauts, the rest of your mind had better be editing text efficiently, and running top and netstat, and administering the version control system.

And more than half of the point of learning a new language is to force yourself to experiment with a different tool ecosystem. The point of learning Ruby isn't just to learn Ruby: You get to learn about Rails and Capistrano and the obsessive use of test-driven development and, in my case, git. (If I'd been a kernel hacker, I'd have known about git. I presume the Rails folks learned about git because some kernel hackers, seeking to learn a new language, wandered into the Rails community.) You want to be forced to experiment with different tools because sometimes they're better: git is just a much better tool than Subversion, and don't get me started on CVS. Even when the alternatives aren't better, you become a better technologist by playing with them. If I'd never played with a Java IDE I would have no chance of understanding how Java programmers think. If I'd never actually deployed both Rails and PHP I wouldn't understand why PHP deserved to live. (Yes, it's filled with stupidly broken parts, but it's so easy to deploy, and it's fast, and it's not that hard to comprehend.)

The other thing this guy doesn't seem to understand is that there's a difference between tourism and living in another country. When you "learn a new language every year" that doesn't mean you have to become a pro in your new language. You can visit, kick the tires, read a couple of introductory books, write some simple code, read some code to something more complicated, and then move on. Yes, that means you're a dilettante -- but it's better to be a dilettante than to blindly plug away at the same thing for a decade.

[+] rumblerob|18 years ago|reply
Right. It's strange how he has to back it up with (don't), too.

"Doing this is like doing a really bad thing, which by the way you shouldn't do."

[+] cvg|18 years ago|reply
totally agree with the article. I've stuck with APL for years. Can do anything I want efficiently.

BTW, building a web framework using APL. Anyone care to help?

[+] bayareaguy|18 years ago|reply
Just curious, what version of APL and what does your answer to the Arc challenge look like?

A web-style APL should let you do something like that as tersely as APL lets you compose operations like +.×/ for the inner product.