When I hear the words 'geek culture', I reach for my +6 Dagger of Slay Orc.

What Programming Language Should You Learn?

Date/Time Permalink: 01/06/10 11:04:51 am
Category: HOWTOs and Guides

I'm going to attempt to answer the number-one most common technology question on the web, and hopefully do it so I can just link people here. Wish me luck, I'll need it!

The answer is different for everyone!

For me, I learn for learning's sake. Literally, I have never encountered a language or computing technology that I did not want to learn. I just started with my first computer, a Commodore VIC-20 in my teens, and was thrilled to find that it had BASIC and a BASIC manual. That was day one. Since then I've just snarfed up whatever I could find. So far that's: C, C++, assembly, Lisp, Tcl/Tk, Bash, Awk, Python, Javascript, Actionscript, PHP, SQL, POVRay (used for rendering 3D graphics), and I'm losing track from there.

Being pro-learning is the only skill you really need!

That's the most important thing. Knowing one language just isn't any good. Knowing five is a little better. They get easier as you go along; I'm at a point where I can go from a cold start to coding a simple application in just one week on virtually any language. I just have a passion for technology and soak up everything I can get my hands on, and worry how to turn it into money later!

There's no such thing as "bad learning."

In 20 years watching the field, I've become convinced that every skill eventually becomes marketable. I never thought that somebody could make money being a Wordpress theme designer, a Twitter background theme artist, making ringtones for mobile phones, or setting up eBay storefronts, but there are all thriving cottage industries right now. Who knows what five years from now will bring? Professional Digg commenters? RSS publishing services? Mobile phone address book organizers? I've learned to never say never.

OK, but what do I learn for a job?

Well, I'll take a stab at it; here's the languages that currently seem to be going somewhere jobwise:

Javascript and AJAX: Big, big, big right now. I don't know if there's a new Web 2.0 bubble lurking or not, but it seems like there's jobs flying around for anybody who can build an AJAX site. It's made out of Javascript and XML, with a side helping of HTML and CSS. All you need is a text editor and a web browser.

PHP: Especially on the OS-Commerce backend. Shopping cart apps, game sites (the kind with subscribers), all kinds of web-based commerce. PHP is one cruddy language - it's ugly and clunky - and it's a smash hit. On Linux, I install PHP and run scripts right from the command line, saving the output as HTML. Or you can get a cheap web host and test server apps live. Job search keyword is LAMP, for "Linux Apache MySQL PHP"

C/C++: Still the application standard. It is simply never going away. On Linux, gcc comes with the distro, and on Windows there's a nice free IDE called Bloodshed Software Dev C++, if my memory serves.

Flash: Still big. Get a good Flash game online, and the world will drown you in ad revenue. Webmasters are always out to hire a Flash webmonkey. Requires some understanding of graphic design work as well. On my site, I stump a lot for SWFTools and the swfc compiler, with a lot of demos in the Flash category. I also hear good things about HaXe, but haven't tried it.

Python/ Ruby/ Lisp: Not much on the job front, but it's so fun to learn and use for yourself, that any work you get out of it is a bonus. The high-end Silicon Valley start-up type places will be more likely to hire in this category.

What about specific jobs?

Video games on the computer usually revolve around C, C++, and the whole C family. If not C, then assembly. Web server-side development is mostly PHP, some Perl. Web browser-side development is Javascript, AJAX, and Flash, with a lot of markup languages (HTML, XHTML, CSS, XML). Desktop applications are a crap-shoot; maybe Python, maybe Ruby, maybe Java, who knows? System administrators need shell scripting skills, in Bash and Perl. Big business mainframes are still crunching along with COBOL, God help us all.

Why should you learn multiple languages?

Here's what I mean about all learning is good learning: Flash's Actionscript is basically Ecmascript, which is also what Javascript comes from. Once you learn Javascript, you already know most of Actionscript. Javascript is related to Java, which is derived from C, so there's a link there. PHP has a very C-like syntax, so once you learn C or C++, PHP will be almost subconsciously easy to learn. Python and Ruby both are related, in a round-about way, to Lisp. When you come to Lisp from the C-side of programming, your mind will be blown. Get a free Emacs install and a manual and lose your head for a couple of weeks on the built-in ELisp interpreter inside Emacs. Now when you come to Python, Ruby, and other languages related to them, they'll make more sense.

A language can help you even if you don't get hired to program in it.

Now I, myself, make most of my freelance living from writing and graphics, so I'm really not the one to ask about making a living purely from writing code. The best work I've gotten in code is Flash stuff. If you're familiar with my Flash category on this blog, you know that I have a whole Flash toolchain built out of open source, with POVRay for 3D graphics, Bash scripting (Linux command line) to assemble animations, and SWFTools to compile the Flash. And now I'm writing my own POVRay frontend in Python out of frustration with the other POVRay frontends out there - this is an example of how knowing a language helps me.

I have yet to this day get paid one penny for Python code - directly! But my own tools tend to be either Bash or Python, which helps me do the other things I get paid money for. For another example, I have a lot of Bash scripts I've written over the years to convert or handle different document formats, so that saves me time on my writing work.

What is the easiest to learn?

This question is wrong. If you're asking it, I'm sorry, but my advice is to forget about programming. There is no "easy." You learn or you do not learn.

Well, which one is the most fun?

That's pretty subjective. Answers will vary, but if you just want a toy to play with for your own uses, Python and Ruby are both widely considered "fun". BASIC used to be, but it's outdated now.

You seem to lean heavy towards open source systems. What about Windows and Mac?

Sorry, check the site - it's "Penguin Pete's" as in "Tux, the Linux penguin, the mascot of Linux!" Call me biased, but for learning programming you can't beat Linux. The system's free, the tutorials are free, the documentation is free. Linux is built for learning.

I don't like your answer!

Remember, I said this is the number-one most common technology question on the web! Really, I swear on my grandmother's grave, you are not the very first person to have asked! Here are some search links for the other 348 million answers:

Keep the change

12 feedbacks Follow me on Twitter for an update every time this blog gets a post.
Stumble it Digg this Reddit this add to Delicious share on Facebook

Comments:

Comment from: Albert Nonymouse [Visitor]
Python alone may be too low in the stack. It's like getting paid simply for knowing english rather than the ability to write scientific papers, novels or interesting blog posts with all that it entails. I personally do get paid for writing Python, but in the context of Django. That means I need to know a lot more than just "Python", but since Django development involves using "plain old python" for the most part, I still get to write python code. Interestingly, and to support your main point, Java/Ecma-script and AJAX knowledge come in handy too, in this context.

The biggest lesson which you maybe didn't emphasize enough, is that the ability to *combine* knowledge of multiple languages or technologies is perhaps more important than knowing any one of them deeply.
Comment from: Vishesh Handa [Visitor] · http://aorotos.wordpress.com/
Nice post. I agree with Albert. The biggest lesson is to combine knowledge of different language, and to know when to use which language.

Btw, I may be wrong, but hasn't the Tasmanian devil replaced the Penguin as the official Linux mascot?
Comment from: Penguin Pete [Member] · http://www.penguinpetes.com/
@Vishesh Handa

"hasn't the Tasmanian devil replaced the Penguin as the official Linux mascot?"

Only for version 2.6.29. Tux is still the main mascot. To my relief, because "Tasmanian Devil Pete's" just wouldn't have the same ring to it. :)
Comment from: Albert Nonymouse [Visitor]
You just have to tweak it a bit, then it works.

"Diabolical Pete's". Yeah, that works. :-)
Comment from: Andreas W [Visitor]
My brother sent me an URL to this blog, it's a great post!
I think he meant to "steer" me up on the programmer road, he thinks
I'm too indecisive I guess.
I started learning one language but got interested in another so I
started learning that language primarily instead, that went on for
about 5 years.
(A bunch of examples: C/C++ Python Java Object-Pascal PHP Assembly)
My problem is that I always really have a hard
time starting and structuring up a new "from scratch" project, making it hard for me to gain programming experience.
Comment from: Andreas W [Visitor]
This is what my brother is mistaken
about, I guess he might be correct at the point that me being indecisive makes it harder to structure up problems, but in what way would this blog help me then, making me choose a language so that it fits my interest?
My end destination is Common Lisp, this does not mean I won't continue
to learn even other languages later on since it has it's uses (and besides, the lisp
interpreter was written in C).
Ah, the beauty of treating code like data.
Oh, and I almost forgot to say what I wanted,
since I started using lisp as my programming tool, I've had an easier
time to structure up everything, simple projects, school and even my
daily life.
To be able to treat code like data, to give the compiler instructions how it should interpret the data, that's lisp.

I might have said something wrong and such, and I'm sorry. This post took me a while to write and I don't have an REPL to give me any feed back here ;-)
Comment from: Penguin Pete [Member] · http://www.penguinpetes.com/
@Andreas W

Well, actually, this post was only intended to answer the "which programming language" question. You seem to be asking how to get from novice to expert, once a language has been decided on. Don't worry, structuring up problems is something every aspiring programmer faces!

For starting "from scratch", try writing lots of little programs. For instance, some dull task like adding up your year's income from paystubs or setting an alarm to let you know when a file partition is full - automate these kinds of tasks with little programs to write, and then that will get you going from a blank file to a program in a shorter time.

Also try writing tutorial-type programs. Things like computing lottery odds, simulating a random dice roll, solving buzz-fizz and other simple little toys. Again, this will teach you simple pieces of the design puzzle, without overwhelming you with too much to do at first.

Now apply that method to writing bigger programs. For instance, for my poker game, I didn't set out to do the whole thing at once. I broke it down into (a) displaying the cards, (b) shuffling the deck, (c) dealing the deck, (d) handling the game's cycle of deal-hold-draw-result, (e) rewarding winnings. In this way, I took a big problem and broke it down into little problems and solved them one at a time.

For Lisp, I've got to recommend Lisp Quickstart and The Common Lisp Cookbook. Just in case you haven't seen these before.

Now, Lisp itself is kind of a cultish language! :) There's Paul Graham and Eric S Raymond out there raving about how magical it is, and then there's the fractured nature of the Lisp community - big handicap, because we have SBCL, Common Lisp, Emacs Lisp, and Scheme, with proponents for each saying their brew is the best...

So there's that extra bit to deal with. It's likely to always have a niche life on the fringe at best. But that shouldn't concern you, if you find it easier to work in Lisp, whther for work or play, then maybe you'll be the one who brings it back into the mainstream!
Comment from: Michael Johnson [Visitor]
I agree with you on everything you said. I'd just like to add that C# seems to be taking up as the go-to language for desktop development, at least in the Windows world. And Gnome. And since we have Mono (like it or not...it's still FOSS), it's safe to point out.
Comment from: Andreas W [Visitor]
I would like to thank you for the links you posted in the comment section.
Pete ! Your technorati rating says I quote " Your blog is worth a Pile of Dirt and a Dead fly"

... it would have to be a Pile of Dirt made up of gold nuggets and flies that are of uranium.

You are so radioactive that people must be dumping GoLD in your backyard to keep it safe!

I am a fan! Please keep it real and keep on forever :-)
Comment from: guest [Visitor]
Tis is a superficial survey about a problem that essentially admits no general solution.

Frst, devcpp hasn't been maintained for a long time, that is, the past five years. I the C++ community, it wouldn't really be recommend. Code::Blocks and eclipse are popular these days, not to mention vim/emacs.

I agree with a previous comment that Python alone is not enough. And it is much the same with other dynamic languages. Lnguage per se doesn't really matter that much, especially for similar languages. Oe can get familiar with the syntax in a few days. You're really choosing between technology available on the language, or across the langueges, rather than the langueges themselves. The typical question is like `Django or RoR', not `Python or Ruby'.

Last but not least, ``A language that doesn't affect the way you think about programming, is not worth knowing.'' Being able to write `Hello World' in two dozen of langueges won't help, and isn't worthy the time.
Comment from: Patrick [Visitor] · http://rapidok.com
Thanks a lot for the nice post. From my point of view (and how you also mentioned in the article) Ajax and js are crucial now since they allow LOT of flexibility in the coding process.

Regards.


Your URL will be displayed.
Allowed XHTML tags:
p, ul, ol, li, dl, dt, dd, address, blockquote, ins, del, a,
span, bdo, br, em, strong, dfn, code, samp, kdb, var, cite,
abbr, acronym, q, sub, sup, tt, i, b, big, small, pre
Options:
 
(Line breaks become <br />)
(Set cookies for name & url)
images required for CAPTCHA viewing

Alphabet letters and digits 2,3,4,6,7,8,9. The digits 0,1, and 5 are NOT used.

Enter the letters/numbers in the CAPTCHA picture above:
My apology to readers for the hassle. I don't like CAPTCHAs any more
than you do. But we all hate spam even more, and this seems to be an
effective way to stop it.
suddenly the moon