############################# The "Which Language" Question ############################# :date: 2008-06-29 15:45:44 :category: `Building Skills `_ 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. :strong:`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.  :strong:`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? <../C1076854706/E20060126195803.html>`__ ".  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. :strong:`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. :strong:`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. :strong:`Other Contenders.` There are two contenders not mentioned in the email: PHP and Java. :strong:`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. :strong:`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. :strong:`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. :emphasis:`Structured Concurrent Programming with Operating Systems Applications` .