
New Languages Considered Harmful: "Learning new languages is a waste of time." - tb
http://duartes.org/gustavo/blog/post/2008/04/02/New-Languages-Considered-Harmful.aspx
======
scott_s
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.

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

~~~
Darmani
Actually, I'd compare that to saying that two languages are the exact same
except for some of the words -- that JavaScript is exactly like Java except
System.out.print is renamed to document.write. Saying that learning a new
language is just the syntax is more like saying that translation between
English and German can be done with just a German-English dictionary and a
full knowledge of the grammar.

However, just as lambdas cannot be directly translated into languages without
lambdas, some languages have unique concepts. For example, the German language
has a part of speech called the particle that conveys a general feeling into
sentences. While the statement "Er wisst das." could be easily translated with
a dictionary and knowledge of conjugation rules into "He knows that," adding a
particle to make "Er wisst ja das" could be variously translated as "Of course
he knows that," "He obviously knows that," "He most definitely knows that,"
etc.

~~~
noonespecial
Ja, genau.

<http://www.toytowngermany.com/lofi/index.php/t971.html>

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

~~~
tptacek
I agree, let's not jump to conclusions.

I'd like to see you defend your argument, that "underdabblers outnumber the
overdabblers". Control for talent, please. Clearly there are thousands of VB
forms developers out there; let's stick with the people working on interesting
problems.

~~~
mechanical_fish
Well, if I'm not allowed to casually wave my hand and invoke my legendary army
of VB forms developers, my "argument" will evaporate, as you no doubt
suspected. :)

Because, alas, I can't name any talented folks, working on interesting
problems, who are obvious under-dabblers. This may be because I have led a
sheltered life: Too many of the programmers I know are from MIT, where until
recently they inoculated everyone against underdabbling by making them take an
entire course on Scheme. I tend to work on open-source stuff that's hosted on
Linux, another community where underdabbling is rare and overdabbling is the
danger. I read news.yc, which incorporates plenty of dabbling -- much more
than I have time for, really, and perhaps more than you have patience for. ;)
Finally, I myself am only a programmer because I kept dabbling in software
while I was supposed to be working on physics. If I had the personality that
found it easy to focus strictly on one thing, I'd be a semiconductor process
engineer right now.

Of course, the statements that the original article took such exception to --
the ones like "you should learn a programming language every year" -- are
largely _intended_ for the less-talented people that have just been defined
out of the discussion. And, again, that's kind of where the original author
ends up: "Once you learn one language... oops, make it two languages... no,
five! Once you learn five languages, you should definitely stop dabbling!"

------
plinkplonk
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)."

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

~~~
wanorris
If you're trying to compete with Norvig _right now_ , for god's sake don't
waste time learning more languages. You have a business to build.

If you're willing to bide your time and you hope to develop jedi-level
expertise _eventually_ , then I think it's still good advice. But again, it
will pay off only in the long term.

Likewise, if someone is beating you up after school every day, don't start
studying a martial art that will take you 5 years to learn properly. Learn
something quick and dirty. But if you want to learn to be a true master of
martial arts, it will be a lifelong study and you will likely need to learn at
least several styles.

~~~
apathy
_Learn something quick and dirty._

But, as noted, brass knuckles (or a gun) will not cause you to grow up as a
person. The martial arts teach patience and poise, which is almost exactly the
opposite of a quick fix.

More concretely, Sig Kufferath (who basically carried the Danzan-Ryu torch to
mainland USA) apparently beat the hell out of a couple guys who tried to mug
him, then got them medical help and sent them flowers in the hospital. (The
story may be apocryphal, but I would not have put it past him) Norvig's
motives appear similar -- he is an acknowledged Jedi and has little to fear,
in general, from helping others to raise their game. Having crossed paths with
both guys, I feel reasonably justified in my perception.

------
motoko
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
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
You should write What Made Basic Different.

------
jgrahamc
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
The unfortunate fact is that if you're optimizing for marketability, you're
going to learn PHP, Java, and C++.

~~~
ericb
Purely anecdotal, but I went to a Boston Ruby group meeting a couple weeks
ago. I didn't hang out for long, but both of the 2 people I talked to were
there to hit on developers! One offered me a job in the elevator. Last week, a
funded startup called me with a job offer out of the blue--they new a friend
of a friend.

I think it depends on the job you're optimizing for--ruby and python are good
choices when optimizing for startup jobs.

~~~
wallflower
> I didn't hang out for long, but both of the 2 people I talked to were there
> to hit on developers!

+1 for using the dating metaphor for recruiting/finding a job. How often do
developers get hit on in the dating world? On dates or even just talking to a
girl, I find I quickly steer the topic 'what do you do' to something like
'Heard of Facebook? I want to build stuff like that'

~~~
ericb
For a brief moment, I experienced the revulsion an attractive woman might feel
when leered at like a juicy steak. It was enlightening.

~~~
wallflower
> It was enlightening.

I assume you didn't give them your digits/contact info.

Wow. Can you expand on this? Is it really like that for women when we go ga-
ga?

~~~
ericb
It happened when a b-school grad tried to talk me into joining his startup. I
contract sometimes, so if he was funded, I'd have "given him my email." It was
the sense of having something someone really wants when what they are offering
isn't something you're interested in. The predatory leer also triggers some
part of the "flight" instinct.

It was also enlightening in the sense that the rejection wasn't about him (he
was a Sloan grad, and a nice enough guy), or his idea--it just wasn't a match.
I work on unfunded startups, I'm just busy now and didn't care for his idea.

When I had to politely repeat how busy I am, I could suddenly see how being an
attractive woman who had to fend off advances could be exhausting, and how
easy it would be to stop being polite if you had to do it all the time.

~~~
attack
People who become total jerks because others show interest in them deserve no
pity.

Regardless, the analogy is broken because one case is about what you are and
the other is about what someone wants to take from you.

------
mosburger
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
> 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)

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

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

~~~
pg
_I think it's really important to be exposed to different languages as part of
your education_

And is one's education supposed to stop?

~~~
gustavo_duarte
No, it's supposed to evolve. And what makes sense when you're getting started
may not be the best use of your time later on.

------
wallflower
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
Here here. Learning a new language can be fun - opportunity cost be damned.

~~~
wallflower
Learning RoR is fun because I like personal challenges. If it were easy, it
would be boring. It's like a new way of thinking, not just programming. And
like jjburka said, it's like taking a vacation from the land of Java.

I don't want to pretend that I am not learning RoR to be more marketable, and
it's a joy to learn RoR, to build little RoR apps that I can use from my
iPhone that make my life less stressful/easier.

Because I don't have 2-3 years of experience, I realize that I won't be able
to pass a rigorous RoR interview. Especially those at interesting startups. My
workaround to this might be by developing one or two Ruby GEMS that add value
to the ecosystem (going to RailsConf '08 will help me get my bearings)

------
rapind
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
"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.)

~~~
giardini
Yet you profess to think in BASIC, and FORTRAN is very, very similar to BASIC.

I don't follow the metaphor about COBOL. Although it's syntax can be
burdensome, the language is very efficient for the same reasons FORTRAN is:
static typing, no dynamic memory allocation, efficient file I/O and the best
compilers available. COBOL programs are not necessarily flexible, but the are
fast and efficient.

Also COBOL has correct "accounting math", something that almost no other
language has as part of the core. In fact I can't think of another language
specification that implements fixed-point math as part of the core: usually
it's part of an external library and is cumbersome to use.

~~~
edw519
I guess this is why I never post in language threads, we can go on and on all
day. No one is right or wrong. Anyway, I'll try to address your comments.

There are so many different versions of BASIC; it's possible we are
visualizing very different versions. I am accustomed to using INFOBASIC
dialects as in JBase or IBM'S U2 line. Everything numeric is represented as
strings (integers) including dates, times, and decimals, so there is no
"typing".

As for efficiency, I used to benchmark like crazy, looking for the slickest
algorithms and the best implementations of compilers and I/O routines. Not any
more. Hardware has gotten so fast that I am more concerned with human time,
not machine time. (Naturally, anything that runs 8 million times per second
BETTER be fast.)

These days, I generate most of my code, so the verbosity of COBOL (if I used
it) shouldn't be an issue. But it is. I have to drop down to the source so
often and I work on the code of others often enough, that I am most concerned
with getting the whole job done with the LEAST code. This is where "juniors"
fall down the fastest (IMO); there's too many places for things to go wrong.

I know what you're thinking, if this is the case, why not learn even more
advanced languages and frameworks with even less code. I dunno.

I guess I've "settled into" what works best for me (as everyone should). Is it
the best? Probably not. Am I open to better ways? Probably. But not today. Too
busy.

------
alfredp
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
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
Relax, people - he still recommends learning something else than Java.

------
pmorici
I disagree with this completely. Refusing to learn new things in favor of what
you already know is the domain of fools.

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

~~~
pmorici
True he does qualify his initial assertion near the end of the post by saying
that to be marketable you need to know multiple languages. I guess what
bothers me about this piece is the sense I get that the author is writing from
the perspective of optimizing ones personal profit. He is basically saying the
only reason to learn multiple languages is for competitiveness in the job
market and even then you should learn as few as you can get away with as well
as possible.

That sounds like the argument of a technology major to me rather than a comp.
sci or engineer. He totally ignores the fact that many languages are based
around the same core principles and if you know those well learning a language
is like learning a new word from the dictionary it just happens naturally when
it needs to be done.

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

~~~
jjburka
I think really what he is arguing is the marginal benefit of learning a new
language diminishes with each new language. Which is probably true if you only
learn the syntax and then move on. But thats not what software development is
,the language is a tool that a culture uses. Using your example with Rails ,
alot of its culture (MVC , TDD , etc) seem to be being adopted in other
communities. I would argue that the reason is someone had a extended vacation
in Hotel Rails liked what they saw and then brought it home. Finding out how
different people do different things and adapting them to your needs is
valuable in all contexts.

~~~
jrockway
Rails isn't really MVC, though.

~~~
jjburka
how so? I'm rather new to rails and from my understanding of rails and mvc it
seems to follow that pattern. Good Practice wise atleast

~~~
jrockway
In real MVC, you want to put everything related to your business rules,
storage access, etc. in your model. Then you wrap the View and Controller
around that as a very thin web <-> model glue. That's all a web framework
should do, web-enable your model classes. Things that should not happen in the
Controller include touching the ORM (or SQL queries), validating input, any
business logic, etc. Just pass the request to the right model, see if the
model did what you asked, and display the success page or the error page.

Here's a short talk I wrote on the subject:

<http://www.jrock.us/fp2008/catalyst/start.html>

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

