Here's how it shakes out from my point of view. You could say that my bias is showing. I think, however, I have solid evidence for my opinions.

C++. Fine if you like memory management. Don't get me wrong, some people love the nitty-gritty details. Some people would prefer to write an operating system than an application; C++ is great for that. I think this is only manageable if you add in a smart-pointer package and a very sophisticated collections framework.

Perl. This language is showing it's age. The object-orientation features look more like a clumsy afterthought than a first-class part of the language. I've already ripped up Perl for simple web applications in "After Perl, What? ". In that posting, I suggested that PHP was better for the specific problem domain and skill set of the team. I don't generally recommend PHP, but it fit their situation.

Ruby. This language has a lamentably obscure syntax. It's probably good, but there is a feeling that Ruby tends to be write-once code. Further, Ruby's popularity may be entirely based on the Ruby on Rails web framework, not on any inherent language feature.

Python. Easy-to-read syntax (better than Ruby or Perl). Automatic memory management (better than C++). Good object-orientation without a lot of overheads (better than Java or Perl). I've found it to be very easy to learn and a very productive work environment.

Python has an explicit "batteries included" philosophy. You should have almost everything you need right out of the box. The single most important add-on is the Easy Install package. Given that, you can download almost anything else you might need with a trivial command-line request.

Other Contenders

There are two contenders not mentioned in the email: PHP and Java.

PHP. Limited by the "all-in-one" packaging. PHP has a lot of functions added into the language itself. Python doesn't add to the language; it has a small core interpreter, surrounded by add-on libraries. new libraries can be added freely, old libraries can be replaced. PHP lacks this growth path.

Java. A close runner-up to Python; it has similar advantages. The one disadvantage is the very fussy static typing model that limits productivity -- you can't simply refactor a class; you have to totally restructure the entire inheritance hierarchy.

Bottom Line

Learn Python.

If, for business or political reasons Python won't fly, Java is the other choice.

There are numerous good on-line and off-line books on Python. I like mine, but that's just me. You might like the price (free for now); you also might like the fact that I can update the text almost immediately.

  • How to Write Your Own Software Using Python . This is for absolute beginners -- folks who are unclear on "programming".
  • Building Skills in Python . This is for programmers who know at least one other language, and want to learn Python. This has four parts to cover the language basics, data structures using the built-in collection classes, object design, and higher-level structures (components, modules and packages).
  • Building Skills in Object-Oriented Design . This is a more advanced book for Java or Python programmers. It builds a rather complex real-world application, class by class.

There are numerous other introductions to Python. Most of them are really good. I like mine because I have a gentle progression from simple to complex topics that I based (loosely) on the approach taken by [Holt78] R. C. Holt, G. S. Graham, E. D. Lazowska, and M. A. Scott. Copyright © 1978. 0201029375. Addison-Wesley. Structured Concurrent Programming with Operating Systems Applications .