Monolingual no more
January 7, 2011 12:01 PM   Subscribe

I've been doing LAMP web development for about ten years. I'd like to learn a new language to diversify my skills. What language should I choose?

Here's why I want to learn a new language:

1. I've heard it said that you can never really be a great programmer if you're just a "good PHP programmer", or a "good C++ programmer". That is: to really excel in any given language, it helps to be fluent in several other languages. This makes intuitive sense to me.

(PHP isn't the only language I've ever programmed in, but it's definitely the language I know the best.)

2. Curiosity. I enjoy learning new things.

3. I've often seen PHP criticized as an amateurish and poorly designed language, which encourages sloppy habits. I think some of this is just the partisan snobbery that always arises between rival technologies, but I can also see some of the points. PHP seems to be more a product of incremental evolution than intentional design.

I keep hearing that various other languages are cleaner, more elegant, more expressive, more scalable, more flexible, etc. I'd like to try them out for myself, and see what the hype is about.

4. Future employability. I'm more-or-less happily employed right now, but having a broader skill set will broaden my options in future job hunts. And I don't want to lock myself into one language, and find myself SOL when it falls out of fashion in ten or fifteen years and I'm too old to learn new tricks.

5. As a bonus, it would be cool to learn a language that will enable me to write desktop apps, not just web apps and scripts.

So, what language should I be learning? At least to begin, I'll be using it mainly for web stuff.

I've been dabbling (very lightly) with Python, and it seems pretty easy to learn. I'm also looking into Ruby. And I'm open to any other suggestions. (Except that I have zero interest in anything Microsofty.)

I'm intrigued by Lisp, but I'm not sure how much practical use there is for it (especially for the web), or whether it's just going to turn my brain into a pretzel. It seems best-loved by mathy / formal-comp-sci folks, and while I admire that world, I have no such background.

I prefer stronger typing, but that's not a requirement, and the trend these days (at least in the web-scripting world) seems to be toward loose typing.

If you have experience with PHP and the language you're recommending, please tell me why I'm going to love this new language. Bullet lists of language features are one thing—but I want to hear, in practical terms, why this language is better / easier / more powerful than PHP, and how those language features are going to help me build sexier web sites (and, perhaps, other kinds of applications).

posted by ixohoxi to Computers & Internet (32 answers total) 17 users marked this as a favorite
I might suggest buying this book and treating it like a college class that you need to pass. Will get you familiar with not only a bunch of languages, but also a range of languages with very fundamentally different approaches.
posted by mcstayinskool at 12:07 PM on January 7, 2011 [2 favorites]

For your "Future employability" I think this list is pretty good. Java has been #1 for quite a while.
posted by Blake at 12:18 PM on January 7, 2011

Python or Ruby. I kinda would suggest Java but Oracle has managed to fuck it up.
Oh, you will also need javascript as a complement. No, I am completely serious.
posted by Foci for Analysis at 12:21 PM on January 7, 2011

I'd learn Python. While not inherently OO, you can work that way much more easily than with PHP. It's powerful, and you can use it for a lot more than web apps. All of Google's API's support it. And one of it's underlying principles is that its code should be highly readable (something PHP forgot early on).

How's your Javascript? Are you fluent with JQuery?

I'm no fan of Microsoft but C# is all kinds of awesome. Linq is the shit.
posted by mkultra at 12:23 PM on January 7, 2011

Response by poster: Yeah, I've been doing a ton of JavaScript over the last few years, and have really come to love it. The fact that Python has lambdas and functional features (like JavaScript) is one thing that attracted me to it.
posted by ixohoxi at 12:24 PM on January 7, 2011

Response by poster: I'm pretty good with jQuery.
posted by ixohoxi at 12:25 PM on January 7, 2011

For web, not so much for desktop... RUBY ON RAILS.

I was a PHP-only girl until I took a course in web development with ruby on rails. Oh my goodness it changed my amateurish web developing life! It was a struggle to get over the initial learning curve but now it's the only thing I ever use for building web applications for both personal and work uses (but this is probably bad. I have probably forgotten everything PHP-related I once knew).

I don't know if you've worked with any web framework type things before (I definitely hadn't before I learned rails), but being able to instantly generate a bare-bones database-backed web application with forms is an unbelievably powerful thing. Seriously, I get all giddy when I type the "rails g scaffold" rails command and a basic web app is made for me. You get to spend all your time doing the fun stuff.

Since learning Ruby on Rails I was lucky enough to get a job where myself and one other guy were basically told "build us a web application from scratch." He wasn't a web programmer when he started, and I suggested using Rails - now we're both on our way to Ruby and Rails ninjadom and the project (A frontend for a complex database with lots of snazzy features) would be unfathomable to me in our other option, PHP (but then again, I haven't worked with any PHP frameworks, and learning one of those might have changed my tune considerably).

On preview, if you do RoR learn javascript as well!
posted by ghostbikes at 12:25 PM on January 7, 2011 [1 favorite]

Python is a great choice. It's nearly unlimited in its versatility. It's powerful for the web - check out the Django framework, basically Rails for Python (but better). If you've never used an MVC web framework you're in for a treat. Python has GUI libraries for desktop development. You can use C extensions to get higher performance when you need it. It has functional programming tools. The syntax makes Python code easier to read 6 months after you've written it than any other language I've seen. Python may not be the best tool for every job, but it's a good tool for most jobs.

I've heard good things about the book mcstayinsckool recommended.

Scheme/LISP will turn your brain into a pretzel in a very good way. The syntax can be picked up in a few minutes. There's not a lot of commercial application of LISP anymore, but working through Structure and Interpretation of Computer Programs (or even Simply Scheme if the math in SICP is too much for you) will make you a better programmer in other languages. Guaranteed.
posted by zjacreman at 12:30 PM on January 7, 2011

For web dev, I'd suggest Ruby on Rails. The MVC model will (if you aren't doing it already with code igniter or cake) really help you scale up your skills and abilities, and move you along in your career path. All of the modern languages support MVC models, but Ruby definitely popularized the current implementations in the webdev world, and most are derivative.

Python is also great.

As is perl, java, scala, erlang, groovy, c#, and even c++ .

All of them have different strengths and weaknesses; growing your abilities in more of them will dramatically improve your understanding of coding as a discipline rather than coding as an isolingual limit.

Personally, I'd go with ruby first, and then go into one of the functional languages next year or the year after. If you're doing this professionally, you should be able to find time to build a mini application in a new language every year or two.
posted by jenkinsEar at 12:36 PM on January 7, 2011

i suggest this family of 3 highly related languages: scheme (via racket), javascript + node.js (start with lord crockford), and coffeescript.

scheme (a simple dialect of lisp) is one of the all time great languages, and racket has an epic win of a code editor with superb documentation. it is the best way to learn some functional programming ideas.

javascript is the language of web (hence very employable) and at its core it is similar to scheme. node.js is a very fast event driven server side environment built on top of the fast v8 engine (same as is used in the chrome browser) and is hot area of web development. see express.

coffeescript is a modern dialect of javascript which compiles to pure javascript. it can be learned in an hour and rounds off most of the sharp corners yielding a real joy for practical web work.
posted by paradroid at 12:57 PM on January 7, 2011 [2 favorites]

If you're intrigued by LISP, but like strong typing, it seems that Haskell is a good choice, and a very good, very pragmatic introduction to Haskell is out there as an Oreilly book and a free Website/wiki.

I realize we're in the minority, but the company I work for, Galois, primarily uses Haskell.

If you want to stick more into the mainstream, I've heard multiple people say that Ruby is a gateway-language to functional programming.
posted by dylanjames at 12:57 PM on January 7, 2011

I will nth the recommendation of Python. What I like about it is that it's multi-paradigm, i.e., it supports multiple styles of programming, from simple structured imperative to object-oriented to (some aspects of) functional. (I recently started playing with Haskell and was surprised by how many concepts were already familiar from Python.) Also, Python code tends to do what I intended the first time more often than any other language I've ever used.

JavaScript (some client-side to go with your server-side) and Ruby are also good next choices, I think. Java and C# are also not bad choices (I would lean toward C#, personally, as it's a better Java, but either one is widely used, particularly in the enterprise).
posted by kindall at 1:30 PM on January 7, 2011

I was/am in a similar position: ten years of LAMP development (plus a lot of HTML/CSS/JavaScript) and I wanted to learn something else for very similar reasons to those you list. I only wanted to learn a new web development language, an alternative to PHP so that narrowed my choice perhaps more than you are.

For me it boiled down to choosing between Django and Ruby On Rails. I wanted to learn both a new, possibly "better" language -- Python or Ruby -- and a decent framework (I'd just done a bit of development using the CodeIgniter PHP framework and could see how a decent framework like Django or Rails would change how I thought about web development).

The best way for me to choose between Django and RonR would have been to try them both -- learn a bit, build a little thing in each, see what I preferred. But I knew that only intermittent periods of free time, plus a bad memory, meant it would take me ages to evaluate both.

So I spent a while reading about each of them online to try and work out which was more me. This is tricky because almost every comparison of the two is written by someone who is much more familiar with one or the other and so is biased. But I eventually decided that Django felt more up my street. Just a hunch.

First I read 'Dive Into Python' and wrote a few Python scripts. And I've now worked through a couple of books on Django, worked on a Django-based project with a more experienced Django coder (I was only doing front-end stuff, but I still learned a fair bit), and am working on my own inevitably overly-ambitious first personal project.

I'm really enjoying it. I occasionally hit a brick wall that takes a while to figure out but other times it's a joy. I like Django a lot, the docs are good, there's a lot of friendly help out there, and it feels right. I may have felt the same about RonR too of course.

If you're anything like me you'll kick yourself for not learning something other than PHP sooner.
posted by fabius at 1:32 PM on January 7, 2011

I'd go with Python. Python is well suited for web apps (Django is an excellent framework, and you can get a working website up really quickly with it). Python is a more mature language with an amazing set of libraries, and you'll find that it's more expressive than PHP — you can do things in many fewer lines, which makes programming more pleasurable. It is a strongly/dynamically typed.

I've heard good things about Ruby but have less experience with it — the advantage of Ruby / RoR is that it's very strongly geared towards web applications, and with Heroku you have a really good infrastructure for deploying applications.

As a long shot, if you wanted to learn a Lisp but also do web development, you could learn Clojure; the Compojure web framework is not bad, and Clojure is an enormously fun language to use.
posted by brool at 1:34 PM on January 7, 2011

Oh, just to add a bit more about why Django (and RonR) are better than PHP...

You don't say if you use any kind of PHP framework... If you don't then using either Django or RonR will be a huge change. It really feels like so much of the really dull work is done for you. There are conventions for doing many, many common things, which are the same across all Django sites. There are lots of great little things which require just a tiny tweak to make something useful happen. I will never again have to write another set of dull admin forms for adding/editing database objects because Django can do that automatically (this is worth the price of admission alone).

If you have used a PHP framework, you get the idea. But language-wise Python just feels somehow "tighter" and more efficient than PHP. I'm a self-taught programmer, so can't describe the differences technically, but PHP feels a bit loose and baggy by comparison. PHP's easy -- which is why so many people have picked it up, but also why there's a lot of bad PHP code out there. Python feels more elegant and, while I still have a lot to learn, and my Python is often clunky and PHP-like in structure, I get real pleasure when I do something that feels elegant and Pythonic.

One downside -- getting a Django site up and running is harder than a PHP one. I guess this is similar for RonR too, I'm not sure. With PHP you can generally upload/checkout the files and view them in a browser. Django seems much more complex, with more ways to serve a Django site, and it's less well supported by a lot of hosting companies (a situation which is gradually improving).
posted by fabius at 1:44 PM on January 7, 2011

As an alternative to Ruby on Rails or Django, I would recommend Grails. It's built on a solid stack of Java, Hibernate, and Spring; It has a lot of the awesomeness of auto-generating frameworks like RoR; It avoids 99% of the ugliness of writing raw java web applications by adopting groovy as its primary development language.

Also, javascript and node.js. If you're already competent with jQuery, I would avoid diving too deeply into it. The library abstracts so many of the core language constructs from you that it does you a disservice when you actually need to build a real application. My framework of choice is YUI3 for its outstanding AOP and expressive object relationships. Best part is, there's a great node.js module for using YUI3 as your backend framework.

The main downside with node is that it's still a very beta piece of software. The level of buzz in the web development community is huge, though.

Really, though, it's not the language that's really important. It's the concepts you apply to it. Knowing what a design pattern is (for example), when and how to use it (and when not to), is way more important than any hacking you might have done in a secondary language.
posted by TeslaNick at 1:52 PM on January 7, 2011

Response by poster: Lots of helpful advice so far.

Guess I should have mentioned that I'm already pretty experienced with JavaScript. Will definitely check out node.js, though.

I've tried to get into the swing of PHP frameworks, without much luck. The main one I've encountered is Zend Framework (usually because I need to tweak or extend some enormous web app based on ZF). It looks like massive overkill for most of my purposes, and I found it to be completely impenetrable when I sat down and tried to learn it. (It doesn't help that the official tutorials are riddled with factual, technical, and typographical errors.)

Also, it seems to rely on lots of auto-generated code, which just doesn't sit right with me for some reason. (Is this how all of the big web frameworks operate? It looks like Django is the same way, for instance.)

I do want to learn how to develop with a framework—but ZF, at least, has not gotten me off to a great start.
posted by ixohoxi at 2:08 PM on January 7, 2011

I'm not sure what you mean by "auto-generated code". Does Zend Framework generate custom code for your particular project, maybe based on your database structure or something?

Django doesn't, AFAIK, have any "auto-generated code". There is a lot of code there already of course, but that is the framework. It provides a common structure for all the things you're going to need, eg, files for your models, views, urls, etc.

Auto-generated pages, like the admin site, don't involve any "auto-generated code". The code for the admin application looks at the structure of your project's models and creates the necessary forms for adding/editing data -- it doesn't generate any new code.

Frameworks are very useful. They provide a sensible structure and patterns, stop you reinventing the wheel, make it easier for other people to figure out how your code works, and can stop you making silly mistakes (eg, by providing standard ways to safeguard user input).

Everyone who's used a PHP framework has their own favorite. I liked CodeIgniter as it was a good balance of being very useful but not overly complicated, and had good documentation. Kohana sounds interesting, and was originally an offshoot of CodeIgniter. Others are probably also good in different ways.

So it may be worth looking at something like that for new PHP projects, until you're up-to-speed with whatever you decide to learn that's new. But learning Django, RoR or something else would be a great way to learn about frameworks and a new language.
posted by fabius at 2:35 PM on January 7, 2011

I've used Django a bit and there is a little optional auto-generation of model classes for legacy/preexisting databases... but you can hand code those if necessary. Not needed for new projects, really. For new projects, Django can auto generate database tables and relationships based on model definitions all written as Python classes.

Of course, you don't have to use Django's models, or even its template language. I'm currently using SQLAlchemy to access an Oracle database, and Jinja2 templates to render html (faster than Django's built in templates). Super nice!

As for Python specifically: I prefer it simply for the intuitive manipulation of sequence datatypes (tuples/lists/dicts). I find array functions in PHP to be painful to use.
posted by Mister Cheese at 2:35 PM on January 7, 2011

Blah, that first paragraph is ugly. Let me restate:
-Django can generate database tables from model code.
-Django can generate model code from prexisting database tables.

The former is how new projects are started, and how new apps are installed.
The latter is the only instance of code generation that Django is capable of that I can think of.
posted by Mister Cheese at 2:50 PM on January 7, 2011

If you've been doing LAMP development for the better part of 10 years, how much Linux/Unix systems programming ability have you managed to pick up?

I know it's not the 'cool' thing these days, but I'd take a look at trying to get a solid understanding of C rather than something like C# or Java. In fact I would stay away from C# completely, as the Linux development philosophy/style is in many ways completely orthogonal to that of the Windows .Net stuff, and you'll have to re-learn a lot of the operating system basics that you take for granted on Linux. I'm in the middle of forced transition from unmanaged C/C++ in Linux to managed C#/.Net in Windows, and I'm not enjoying it in the least.

Anyway, Linux, for the most part, is C all the way down, so you'll never be at a loss for code to explore or applications to play around with. PHP code is similar in syntax to C code in a lot of ways (at least circa PHP3 before all the object-oriented stuff was grafted on) so it won't be as much of a syntax shock as going to Ruby or Java would be. I won't lie - it's a very steep learning curve to get some of the fundamentals down (manual memory management, pointers, data structures, etc), but it's something that looks really good on a Linux-specific resume if you're trying to branch out to something beyond PHP web development.

If C seems like too much of a hill to climb, I'd go with Python over Ruby or Java.

Also, it seems to rely on lots of auto-generated code, which just doesn't sit right with me for some reason. (Is this how all of the big web frameworks operate? It looks like Django is the same way, for instance.)

Auto generated code is mostly* a good thing. It can be used for good as well as evil, but it shouldn't raise any suspicions on its own. If you're going to be using Django or Ruby or Rails or almost any other 'modern' MVC framework, there is probably going to be some utility script that generates boilerplate plumbing code so you don't have to write it on your own. Remember - Laziness is one of the three virtues of a programmer.

*It can also be used for pure evil - See CORBA.
posted by SweetJesus at 2:54 PM on January 7, 2011

I've also been doing LAMP development for years, but was finally introduced to the power of frameworks by my new employer... I can't belive what I was missing. Now I refuse to start anything without a framework. For those simple php web projects, look into CodeIgniter (or similar, smaller lightweight frameworks). Compared to the big boys (Zend, Symfony, etc) it's almost laughably simple and incomplete, but it'll get you into the MVC headspace and isn't overkill at all. It's definitely something to get familiar with, if you anticipate looking for new PHP jobs in the future. It's a skill we now require new hires to have, and I'm noticing more and more companies are doing the same.

That being said, I'll also pile on the 'learn python' wagon (with or without Django). It's what I'm doing, anyway...
posted by cgg at 3:13 PM on January 7, 2011

Take ten minutes to learn Python's syntax and take it from there.
posted by wayland at 3:18 PM on January 7, 2011

I'll curmudgeon.

Python sucks. It's easy to read (almost pseudocode), rigorous formatting (you do indent your code correctly don't you?), designed so that there's one way to do something and that is the one way you're supposed to do something. It has lambdas as in ("No, you can't have lambdas. Did you hear me? I said I'll not give you lambdas. Ok, fine... I'll give you lambdas but they can only be a single expression. Now go away!"). It's easy peasy so you get to compete with all the other infinite monkeys who can code Python.

Ruby is troublesome. It has a niche of Rails. That's all it's really good for. One of the Debian packagers just threw up his hands and quit out of frustration dealing with the Ruby community. They have a handful of active branches so you pretty much have to bundle up everything in your own distribution to deploy it anywhere. 1.8 isn't going to work with 1.9, 1.9 isn't going to work with 2.0. I watched a talk by what's his name (Matz?) the creator. He gives off the impression that he's happy you like it and want to use it, but he's quite annoyed to think anything about backwards or forwards compatibility. He wan't to keep on changing it to suit his own needs. Good for him. It is pretty sweet, but your programs are unlikely to work except in your environment.

You of course want Perl. It's what Python users would use if they could wrap their heads around it. Just start out with the Modern Perl movement. Quite a lot has changed in the past few years that most of the Perl haters have missed. See, Perl likes to steal things. If there's something cool in Ruby, Perl steals it. We have instant web apps like Rails and Racks. We have about the best DB stuff around. I've been doing Perl for about 15 years and every time I take a long look at Python or Ruby my skin ends up crawling. Perl is elegant, it can be a Bugatti, a Mustang, a Civic, a Dragster, or an F1. Procedural or functional. Object bondage or data driven. And TIMTOWTDI.

As you say, Javascript is nice. It has a few warts but it's nice. Reminds me of Self. (I have a soft spot for prototype systems).

Really if you want to branch out you should. Haskell and Erlang are languages you should look into. Haskell for its types and maths, Erlang for its actor based message passing and matching. Both will make your programming better no matter which language you end up using.

Avoid Java. Oracle is going to screw it up, and it's not even a programming language anymore. More of an intermediate format between and IDE and a virtual machine. Go ahead, try and have fun writing Java without some IDE and a bunch of XML files to generate all of your boilerplate code.

Good things to know... some Scheme or other LISP derivative, simple syntax and power go a long way. Oddly, Lua and TCL because you'll run into them somewhere as an embedded scripting engine for applications written in C or some other non-dynamic language.

For kicks... FORTH. It's about as close as interactive assembly language as you'll ever find. A good FORTH can bootstrap itself and if you read the code from the beginning you'll go from stack push and pop and memory store and fetch up to operating systems and on to applications all from the same REPL.
posted by zengargoyle at 3:43 PM on January 7, 2011 [2 favorites]

Python really is (currently) the ultimate pragmatic language. It's nearly ubiquitous, has a vibrant community, and is exceptionally well designed and documented. At heart, it's a procedural language, but it also has strong support for object oriented and functional programming styles. It has an enormous standard library, so you can start building real, useful programs without needing to know about third party packages. It's also exceptionally capable for scripting, developing both desktop and web applications, and it has a strong following in scientific computing.

In short, there are few places that Python can't take you.

But given your background, I think the design bit is especially important: JavaScript has horrible warts (as documented by Crockford), and PHP grew more organically and chaotically than deliberately and carefully. As such, I think you would be particularly well served by working with something borne of the latter philosophy. The craftsmanship and design evident in the language make it easier and more natural to write better code. Plus, when it comes time to build a webapp with Python, you have the option of using AppEngine as Guido intended it.

Other alternatives:

If your focus is almost exclusively on the web, then Ruby is an equally capable, albeit less throughly designed and documented, alternative. In many ways, Ruby is "Perl, for the modern web, done right."

If you're primarily looking to expand your mind and become a better developer, then Scheme and Haskell are exceptional choices.

If you want to work at a different but still practical level of abstraction, then C is definitely the way to go. Plus, C and Python are an extremely potent combination.

If you really want to focus on building nice desktop applications, it's hard to beat Objective-C and Cocoa on OS X.

But before diving into any of this, make sure you've read (or re-read?) Crockford's JavaScript: The Good Parts. Much as C is the lingua franca of desktop computing, JavaScript is the lingua franca of the web, and it's only going to increase in importance, as evidenced by the arms race between JavaScript engines (JägerMonkey, V8 Crankshaft, Carakan, Chakra, SquirrelFish Extreme, etc.)
posted by SemiSophos at 4:02 PM on January 7, 2011

I came here to recommend PERL, but zengargoyle elegantly beat me to it.
posted by namewithoutwords at 4:11 PM on January 7, 2011

Response by poster: If you search for the string "table data gateway" on this page of the official Zend Framework tutorial, you'll see some of the code-generation stuff I'm talking about.

I think I just found it disconcerting because the tutorial didn't bother to explain what any of that code actually does. The tutorial walks you through the creation of this huge, complicated directory tree full of classes and .ini files, and just assumes that you understand how they fit together to make the application work. Which I totally didn't.

Then again, I was trying to learn MVC at the same time I was learning Zend Framework, so maybe I was just biting off too much at one time.

I guess I was mistaken about code auto-generation in Django. I saw some of the model-generation-based-on-database-tables stuff while skimming this tutorial, and assumed it was similar to Zend Framework.

C and Python are an extremely potent combination.

Could you explain what you mean by this? I like the sound of that.

The overwhelming consensus here seems to be Python, which is what I was leaning toward anyway. And my VPS is already set up to support Python. So Python it is.

I'm also going to check out CodeIgniter. Perhaps that will get me over the framework / MVC hump.

I'll certainly keep some of the more exotic recommendations in mind—Erlang, Haskell, Scheme. Correct me if I'm mistaken, but there don't seem to be thriving communities or bustling job markets around these languages—they seem to be the domain of scientists and universities. I'm interested in checking them out (especially if they'll improve my coding skills in general), but at the moment my goal is to learn something more immediately practical.

Thanks, everyone, for the advice! Gotta run now; I'll mark favorites later.
posted by ixohoxi at 4:27 PM on January 7, 2011

Another cool thing you can do with Python is play around with Google App Engine, which is very cool.

I'd suggest Groovy and Grails (and Java). Knowing Java will definitely broaden your employment opportunities as it is supposedly the most widely used language, and companies that primarily use java are usually much different than those that use mostly PHP. The Grails framework has really picking up steam lately.

The "exotic" languages are going to be good for curiosity and improving yourself as a programmer, but have a lesser change of directly landing you a job. In a way, the two are mutually exclusive; the more interesting the language, the fewer companies tend to use it.

BTW, as you learn a new language, you want to appreciate it for it's own merits. If you constantly compare the new language to a language you already know, you might miss the point.
posted by kenliu at 7:45 PM on January 7, 2011

I used to be a fulltime PHP programmer for a number of years, and while I never had many gripes with PHP at the time, I've come to mostly despise the language by now. I'll refrain from going into a lengthy rant against PHP, mostly because it's not relevant to do so but also because PHP, for all its flaws, is still easy to pick up and get started with.

My recommendation is, like many have said above, that you explore Python more deeply. Django is a perfect way to do so, IMO; it's what I did and I made my new site ( based on Django in a matter of 2 days after sitting down and reading the Django Book. I don’t mean to say that as a boasting kind of thing, I mean it as a “this stuff is so ridiculously straightforward and intuitive, you will be productive with it and making real-world things in just a couple of days.”

If you’re interested in desktop (or mobile) applications, I also highly recommend Objective-C and Cocoa on OS X. The iOS platform is based on the same core, which is a really well-polished, deeply refined application programming framework. It's also a great language to invest in with future employability in mind: OS X and iOS are here to stay, and getting more popular each year. Good Obj-C / iOS developers who freelance make bucketloads of money right now, because there is such a huge shortage of them.

And lastly, you’ve already indicated your familiarity with JavaScript and jQuery. I suggest keeping that alive and seeing if you can do more with it, node.js being a good starting point but far from the only possible direction you can go into. For instance, Cappuccino is interesting for you if you want to explore Objective-C, as it is essentially Cocoa in JavaScript. Learn two languages at once!

Of all the languages I know or have experience with, going forward I see only two of them having long-term staying power, viability and appeal: Web tech (HTML5, CSS3, JavaScript), and Objective-C. Python will remain, but probably never expand beyond being a server-side thing; useful, but limited in purpose.
posted by KuraFire at 5:21 AM on January 8, 2011

nthing Python and Django (which has some of the best documentation you will find with any project) and also Flask for a less do-it-all framework (and also documentation). For someone who already knows how to program, you'll be up and running in less than 2 weeks.
posted by i_am_a_Jedi at 9:04 AM on January 8, 2011

Python...oh Python, what a wonderful hammer you make. Let me count the ways you make such a lovely hammer:
  • Python and C. You expressed interest in how this works. There are many ways to interact Python with C, but the quickest bang-for-buck was is to use Cython. It allows you to write modules in pseudo-Python code and have them compiled into C for you. This sounds vaguely cool, right? But how cool? I recently played around with doing massive amounts of financial calculations on stock market data and having written the basic mock design in Python I re-wrote the key number-crunching portions in Cython. Conclusion? Two orders of magnitude faster, ten minutes of effort. Score. Try doing that in another language as expressive as Python.
  • Python and Java. I once had a frightening problem at work. I wanted to use Apache Lucene to do some indexing of massive amounts of C code (read: tens of thousands of files, millions of lines of code) and I knew Lucene was the ticket. However, I abhor Java. Solution? Do the bare minimum in Java and use Jython to use beautiful, clean, concise Python to do the rest. Score.
  • Python and .NET. I know you dislike Microsofty things, and I hear where you come from, but realise that some programming shops interpret a hypothetical programmer's anti-Microsoft stance as a sign of immaturity, but YMMV. Regardless, IronPython has been around for a long time and could be an alternate way for you to use LINQ. Oh, and did you know that you can run IronPython in a browser using Microsoft Silverlight? Score.
  • Python and Erlang? Check.
  • Python and MySQL and PostgreSQL databases? Check.
  • Python and interactive shell commands? Check.
  • Python and CUDA high performance GPU calculations? Check.
  • Python directly interacting with assembly instructions? Check.
  • Python to automate Windows GUI operations? Check
  • Python to perform real-time computer vision? Check.
Apparently, Python comes with batteries included. It changed my life, and it can change yours too.
posted by asymptotic at 2:23 PM on January 8, 2011 [1 favorite]

Python's a pretty good choice. Whereas Ruby is used for either Rails or Puppet, Python's everywhere. We teach undergrads python now. In some sense it's the new Java.

But let's examine the criteria:
1. Not PHP.
2. Curiosity.
3. Clean language design
4. Future employability
5. Desktop Apps

Python meets most of the criteria. If you want more mathy/compsci suggestions, perhaps try OCaml or Haskell. They're similar to Lisp but less maddening. There is a slight possibility though, that you'd end up professionally working with Microsoft F# as a result. Them's the risks you take for being ahead of the curve.
posted by pwnguin at 9:50 AM on January 10, 2011

« Older Mad Woman, [Sad] Woman, That's Just Who You Are   |   Stud or Dud? Newer »
This thread is closed to new comments.