What should be the first programming language I learn?
August 13, 2004 7:52 AM   Subscribe

Programming languages: I'd like to take up programming as a hobby, with an eye towards evaluating it as a career choice. What language should I learn? [more inside].

Back during college, I learned the basics of Visual Basic, C++, and C. I also learned a little bit of Java. Now I've got a non-IT related career, and I miss it. Where should I begin? Specifically, what languages are in high demand; what languages are technically useful; and/or what languages make a good foundation for later programming? Any other suggestions would be appreciated. Thanks.
posted by gd779 to Computers & Internet (27 answers total) 4 users marked this as a favorite
People frequently mention Python in this context, and you know what? They're right.
posted by kenko at 8:01 AM on August 13, 2004

look in your local paper and see what's in the ads.
posted by andrew cooke at 8:03 AM on August 13, 2004

Learn PHP. The syntax is pretty good, although the object support is sort of crufty, and the big advantage is that you can build applications for the web.
posted by bshort at 8:14 AM on August 13, 2004

Response by poster: look in your local paper and see what's in the ads.

I'm not tied to a particular city or region. I'm interested in national trends, I guess. But thank you for the suggestion.
posted by gd779 at 8:36 AM on August 13, 2004

If you're already making web pages, PHP is a pretty fair place to get going.

If you have any background as a UNIX user, Perl will feel pretty comfortable, and frankly I'd go so far as to say it's not terribly hard to learn anyway.

Python is, yes indeed, mentioned often as a good place to start.

If you're after *jobs*, you probably want to learn the hell out of Java, because that's where a large portion of corporate "inside programming" is going. I somewhat dislike the language myself, though I use it in just that context.
posted by majick at 8:41 AM on August 13, 2004

Another vote for Python. And another still from someone that knows more about it than I do.

"If you don't know any computer languages, I recommend starting with Python. It is cleanly designed, well documented, and relatively kind to beginners. Despite being a good first language, it is not just a toy; it is very powerful and flexible and well suited for large projects."
posted by nthdegx at 8:42 AM on August 13, 2004

People mention Ruby as well as Python. Of course as a Java programmer (these days) I still feel that's a pretty good language to learn, but there will always be something new around the corner.
posted by Songdog at 8:49 AM on August 13, 2004

I'd not bother too much trying to guess what the most marketable language is. The fact is, once you're comfortable with one language, moving to another is really not that hard. After you've learned a couple, it gets even easier. It's the techniques that are tricky.

If you're looking into getting really into it, I'd say you'd want to then pretty quickly get into an object oriented language of some sort. PHP isn't really much of a good choice for this (I haven't checked out the newly released PHP 5 though), instead something like Python, Java, C#, etc.

It's worth noting that Python is NOT a very in demand skill. Which is not to say it won't be in demand someday. I mean, who would have thought some scandanavian guy's Personal Home Page* perl scripts would become one of the web's dominant application platforms. (*what PHP actually stood for, honest).

It really depends what kind of stuff your interested in doing with the programming -- application development? (in which case, C++ is probably the way to go), web stuff? (if so, you could also move to the front end and learn actionscript, which as of 2.0 is nearly a real OOP language). I'd let that determine the language, you're much more likely to stay at it if you're making something you like in the process.
posted by malphigian at 8:51 AM on August 13, 2004

for general/net (server side/services) programming jobs: visual basic, .net framework stuff (and indigo etc for longhorn), or java, j2ee, soap etc (you also need to understand the political separation between those different camps and where they overlap). also, sql, python.

for web sites: html, xml, jsp, asp, php, flash, javascript, cold fusion, etc etc.

for learning itself: python, perhaps plt scheme.

for sheer kicks: haskell, lisp, python fringe (stackless, etc).

for drivers, operating systems, macho stuff: C, C++, assembler.

for your own work, when you want something solid and reasonably fast, but don't care about 3rd party support: standard ml (esp. mlton compiler) (ok, i may be the only person in the world that thinks this).

for more information: lambda (but please, read a bit first and ask something rather less vague than "what language"?).

(personally, i would recommend avoiding perl and c++, and perhaps visual basic, but they're all popular...)
posted by andrew cooke at 8:56 AM on August 13, 2004

If you know C, Java, OR C++ you should be able to handle pretty much anything else anybody ever throws at you. Perhaps you should simply expand on your basic knowledge of one of those. If you want the latest thing, yes Python or Perl or PHP or .NET stuff like C#. And, at least where I am, Java is still in high demand. If you want to really geek out, try lisp. If you want fun, pick one that looks fun to you.

(I'm also pretty sure we've had a very similar question on AskMe a little while ago.)
posted by callmejay at 9:01 AM on August 13, 2004

I'm going to be the lone wacko that recommends Perl, because it's the most flexible and intuitive language for me. (And may be for you, coming from a C-ish background.) Python is okay, but if you really want a beautifully designed, no-fooling OO language of that order, I highly recommend looking into Ruby.
posted by majcher at 9:13 AM on August 13, 2004

I'll second what malphigian says. Learn a language, any language though I guess a "modern" language like Python will help with Object Oriented stuff. Once you learn a language well picking up other languages is trivial. More important than knowing a plethora of languages is knowing how to architect your code well.

I'm a bastard when I'm interviewing people. People graduate from university with a laundry list of languages or engineering tool skills. I'll tell them point blank that I couldn't care less about that, show me evidence of your engineering skills.

We had an intern this summer who did excellent work and to do that excellent work he had to learn MySQL (and SQL in general) and TCL on the fly.
posted by substrate at 9:13 AM on August 13, 2004

I used to like perl, but, with notable exceptions, the perl community was so insufferably arrogant (they compete with each other for the most condescending HTH answers in UseNet) that I drifted away. Besides, after they started CPAN -- though it was a wonderful resource for users -- it stopped being a great learning tool for neophytes (all the key code was hidden away in various modules). PHP annoys the bejabbers out of me because every time they update it it invariably breaks all my former code (particularly the prefered variable passing methods, which seem to change daily).

Frankly, I'd concentrate on straight C with an eye on rapidly adding C++ (malphigian is correct about the significance of OOP). There is a school of thought that thinks this is backwards -- that if you're starting fresh it should be with C++ (since it essentially includes the C subset). I'm not convinced this is wise. You really want to get a grasp of what's going on before branching out.
posted by RavinDave at 9:15 AM on August 13, 2004

An important aspect of learning to program, especially if you're thinking you might like to do it as a job one day, is getting to grips with data types. So for a first language, I'd look to something that is strongly typed. As others have said, it really isn't that important which one you choose beyond that. Good candidates might be Java, C# or Python. I don't think C++ would be so good as a first language. The more you learn the easier it becomes to learn new languages. I don't think I know any professional programmers who only know one language.

I'd suggest steering clear of scripting languages to begin with. They're generally weaker typed and you want to get a feel for the whole process of the creation of an application - compiling, building and all.
posted by normy at 9:33 AM on August 13, 2004

As I understand your question, you already know C++, but are interested in other candidates. C++ is a wonderful workhorse; learn the right API, and you can use C++ to do almost anything: develop desktop applications for any platform, write PDA software, cgi-bins, games... not surprisingly, most software sold today was written in C++, so most jobs are for C++ programmers. If you want to develop your marketable skills, spend time learning how to use C++ with various APIs--don't learn new languages.

If you want to study something totally different from C++, there are some dramatically un-market-demanded languages that might pique your intellectual curiousity. Look at Prolog, LISP, ML, and Forth.

There aren't enough developer-hobbyists in the world (everyone seems to do it for money these days), so welcome.
posted by profwhat at 9:56 AM on August 13, 2004

I'm completely with profwhat, brush up on your C++, learn GUI toolkits like wxWindows, and you'll be able to take it anywhere.

Just for kicks learning, though, perl is much nicer than python or PHP.
posted by cmonkey at 10:10 AM on August 13, 2004

As a hobbyist, you might want to consider buying Flash MX 2004 and learning Actionscript 2.0. You can do all sorts of fun, graphical things easily and get instantly-working applications or web-widgets. Actionscript 2.0 is an advanced version of Javascript (actually ECMAscript), and Javascript is a useful language to learn. It's embedded in all sorts of applications, inclucing web-browsers, Flash, Photoshop and Illustrator.

There's a website called bit-101, on which a guy posts a new Actionscript experiement almost every day (and gives you access to the source code).

Also, it's not one of the big players, like C++ or Java, but there ARE people who make a living programming Flash.
posted by grumblebee at 10:16 AM on August 13, 2004

It may not help with getting a job, but learning Haskell will give you more mind-blowing moments than any other language I know of. I haven't had so much fun programming since learning BASIC in grade school.

An under-appreciated language that is still in some demand is Smalltalk.
Oh, you might want to check out the K and/or J languages. Those are fun, too.
posted by sonofsamiam at 1:09 PM on August 13, 2004

Just about any "real job" these days will have you writing code in either C++ or Java. Python is great for coders who like flying solo. PHP is a glorified scripting language (only glorified because you can finally compile it). That doesn't mean it's not awesome for what it does, but I can guarantee you that Doom 4 won't be coded in it.

Anyway, it's easy as hell to teach yourself PHP. If you're going to be spending money on classes, learn C.
posted by Civil_Disobedient at 2:04 PM on August 13, 2004

I'm considering learning Squeak for my just for fun projects.
posted by weston at 2:38 PM on August 13, 2004

squeak is cool. would also be good for learning, and when croquet eventually apears and takes the world by storm, you'll be at the cutting edge. maybe.
posted by andrew cooke at 2:58 PM on August 13, 2004

Er, several PC games have made use of Python as a significant component of their programming. I believe Quake (or was it Unreal) was using a variation on Python for the bulk of its scripting, with the graphic engine being written in a low-level language.
posted by five fresh fish at 3:16 PM on August 13, 2004

What are the cream-of-the crop python learning resources? I'm willing to either buy a book or print out online stuff.
posted by namespan at 4:02 PM on August 13, 2004

Now I've got a non-IT related career, and I miss it

be glad you have a career! If you want to get back into IT, focus on learning Mandarin or Hindi and exporting yourself to Asia or India.

If you just want to get your geek on, then throw together a linux box or buy a Mac. Objective C on OS X is amazingly nice and easy to work with. And the full development environment comes with the OS. Linux is a lot more do-it-yourself, but that seems to be what you want.
posted by Kwantsar at 5:37 PM on August 13, 2004

I learned Python reading Mark Lutz's book (back when it was one book, not two) while riding in a car on the way to a backpacking trip.

So Lutz's book is the one I'd recommend. :-)
posted by five fresh fish at 6:32 PM on August 13, 2004

Of course, I might observe that Assembly Language seems to be having a renaissance lately.
posted by RavinDave at 10:31 PM on August 13, 2004

c#, because it's a skill that not many have, it's an easy language to learn, because there are tons of tools for it, and because it'll be worth money in a few years time.
posted by seanyboy at 7:00 AM on August 14, 2004

« Older Firefox at Work   |   Sending Texts Newer »
This thread is closed to new comments.