Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

Why do beginning programmers (like me) always ask about the next language they should learn instead of asking about the next project to tackle?

Why did Eric Raymond, in the "Learn How To Program" section of his "How To Become A Hacker" essay, talk about the order in which you should learn languages (vs. the order in which you should tackle projects).

Do beginning carpenters ask "I know how to use a hammer ... should I learn how to use a saw or a level next?"

I ask because I'm finding that almost any meaningful project I'm interested in tackling (e.g. a web app, a set of poker analysis tools) requires that I learn just enough of a multitude of languages (Python, C, HTML, CSS, Javascript, SQL) and frameworks/libraries (wxPython, tkinter, Django) to implement them.

Thanks,

Mike

share|improve this question
5  
This seems a bit ... ranty, to be honest. Perhaps you could remove the insinuations and leave just your question? –  Anon. Feb 9 '11 at 21:04
4  
I think you're mismatching steps chronologically. Odds are the carpenter already knows how to use those tools, if he knows how to frame a door. But earlier in his life, he too followed the path of which tool should I investigate next. –  MYou Feb 9 '11 at 21:06
    
Fair comment re: ranty ... was going for entertaining. Apologies if it came across as ranty. –  MikeRand Feb 9 '11 at 21:16
4  
The programming language to hand tool comparison isn't a very good comparison. It seems to make sense superficially, but falls apart quickly and ends up being more harmful than helpful. Also way too many people treat it like it is an unquestioned truth. This guy does a decent job outlining some reasons why it doesn't work. journal.dedasys.com/2007/12/12/… –  Nick Knowlson Feb 9 '11 at 21:19
    
I like this question...! –  Michael K Feb 9 '11 at 21:34
show 3 more comments

6 Answers

up vote 5 down vote accepted

I think that when most people set out to learn a language, they do so because they want to tackle a project written in that language, either now or in the future. To do so, they must learn that language, which takes time. Programming languages are like tools, but whereas you can learn to use a hammer in about sixty seconds, languages take a bit longer to learn to use; thus many people focus on learning a language before they focus on working on a project written in that language.

On another note, I think when most people ask what language to learn next, they really are thinking of what project to learn next, but they focus on learning the language first.

Finally, learning languages can be fun, even though you don't have a specific project or goal in mind.

share|improve this answer
add comment
  • The motive of many full-time developers is to be more employable.

  • Being more employable usually means passing the hurdle of the HR screener (and later passing the hurdle of the actual interview).

  • The typical HR screener usually has a checklist of languages it can match against a resume, but has no way of evaluating skills or projects.

  • Success in an actual interview depends usually more on luck and minimal skills in a language than on experience and a deep understanding of a language.

Hence, being mediocre in many languages is better for employability than being an expert in a few, unless one is applying for senior positions.

share|improve this answer
    
Sadly to get past the HR screen you must provide the list of buzz words of the day. The HR screening process is a rather course filter that will leave many qualified candidates behind. –  Jeff Feb 9 '11 at 21:24
1  
@Jeff, from what I've heard of HR screening, all they want is to cut down the number of resumes to a manageable level and they apply lots of arbitrary filters, like "bin if more than 2 pages". –  DominicMcDonnell Feb 9 '11 at 22:34
add comment

The analogous programming choices to the carpenter there would be "What application should I build next?" or "What system should I build next?" which are rather valid and separate from a project which can really be applied almost universally. I could have a project to change my diet or lose 20 lbs just as easily as I could have something that requires some new software to be written to tie things together.

To answer the question though, I'd believe the idea is that a language represents a tool in that person's toolbox that can be useful on a resume. Some people may choose to become a programmer to pay the bills and if so, then they may ask which next tool should they add which would often be a language but there are other possibilities like learning about deployment, source control, testing and development methodologies to name a few other areas. If a carpenter had to disclose which tools he had then he may have a similar perspective I'd argue. However, there is a general set of tools that most carpenters are assumed to either have or have access to obtain if requested pretty quickly. Have you ever seen how many different kinds of saws and hammers there are out there for people to use?

share|improve this answer
add comment

Maybe it's partly about hacker mentality, at least for some of the programmers. Hacker is defined in Jargon file as

"A person who enjoys exploring the details of programmable systems and how to stretch their capabilities, as opposed to most users, who prefer to learn only the minimum necessary. "

So, for a hacker soul, it's more about learning and "tinkering" with the process, concepts, tools and yes, languages of creating something, than the end product itself. More about the process itself.

It's a constant strive for next new thing and/or challenge. Finished project looses that appeal fast. Sometimes (most of time?) greatest creative or technical challenges are conquered before completion of the project. Many projects get abandoned, when a mind hungry for new mental challenges moves forward.

Especially hackers are interested in new points of views, concepts, abstractions and ways of thinking, kind of mental hacking:

"A language that doesn't affect the way you think about programming, is not worth knowing." -- Alan Perlis

share|improve this answer
add comment

There are a variety of crappy languages in common use today: C, C++, C#, Java, JavaScript, Python, Perl, Ruby, Visual Basic, etc. Programmers make up for the inherent suckiness of these languages by learning and mixing many of them together.

There is a small community know as the Lisp community that is free of the insanity that pervades modern computing.

Since Lisp is a programmable programming language you can express all of your ideas in it without ever having to stray away to other languages or other data formats such as XML. Lisp can be applied everywhere, even down to the hardware level as we saw with the Lisp machines.

share|improve this answer
    
You must know as many different languages as possible in order to code in Lisp efficiently. Otherwise you'll end up reinventing the wheel instead of simply stealing appropriate concepts and ideas from the other languages and implementing them on top of Lisp. –  SK-logic Feb 10 '11 at 11:55
    
Agree with your sentiment about the power of Lisp, but disagree that it's unhelpful to learn other languages: most of the tricks I use in Lisp actively exploit what I learned from other languages (whether as patterns or anti-patterns...) –  mikera Apr 22 '11 at 22:19
add comment

Because learning a new programming language is a huge investment, and no one likes to make a bad investment.
Learning a new programming language isn't about memorizing how to write loop constructs, declare classes, import another module ...
You have to know how to write an idiomatic code in that language and this process really takes a considerable amount of time and dedication.
Time is a limited resource, effort is a limited resource but distraction, daily stress, bills and Sundays sports games are always there and must live with.
Programmers want to invest wisely.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.