Your brain is your body's most neglected organ...nurture it here.

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

Follow me on Twitter for an update every time this blog gets a post.
Stumble it Reddit this share on Facebook

suddenly the moon