The latest issue of Communications of the ACM (March 2015) has an article titled "Python for Beginners" with a few points that surprised me.
The first thing that got my attention was the banner text "Choosing Python is the modern equivalent of the old adage 'nobody ever got fired for choosing IBM'". If I were an unimaginative, risk-averse bureaucrat, just wanting to run with the herd, the choice would be Java, not Python. The only clarification I can find is in the conclusion of the article where we learn that Python is "blandly conventional", just the latest crest in the "waves of fashion" (Pascal, C++, Java, Python, Scratch). Odd that Ruby is not mentioned anywhere.
I read the article carefully, looking for substantive comparisons, and found only more baffling, vague statements without enough definition or specificity to reach any understanding. What does it mean that Java is more "industrial strength"? I would say Java is a more "industrial" language, but that is not a compliment.
The biggest problem is calling Python a "scripting language". Any language can do scripting, and Python is particularly good at it, but this label makes me think of shell scripting (e.g. tcsh, bash, and all the variants of these special-purpose "job control" languages), not a modern, object-oriented, full-feature language like Python.
Another problem is quoting a Python advocate on the productivity advantage of Python (2 man-months vs 24). Wild statements make prospective users walk away without further investigation. I tell my faculty friends it is 2 to 1 over an expert's productivity in Java. I might even quote Bruce Eckel's estimate, 5 to 1, but only to back up my own more conservative estimate. Until now, I've never seen 12 to 1.
The bulk of the article is discussion of Python's "weaknesses":
1) Creating non-trivial data structures is onerous.
2) Limited support for testing.
3) Lack of static types.
4) Difficult transition to other languages because the syntax is quite different.
Show me some real-world examples of a data structure or test setup I can't do better in Python. Python's doctest is an excellent methodology for teaching Test-Driven Design, or even just teaching basic Python (see
pykata.org).
I understand the complaint about data types, but I would not give up the advantages of dynamic typing for the few projects where I really need the efficiency of static types. Write first in Python, then insert some C code where testing shows that it is actually needed.
When I first started using Python, I was astonished to learn that it was not derived from Java. See
codingbat.com for many one-to-one comparisons of various code snippets. See Goldwasser's "Object Oriented Programming in Python" for an excellent transition to either Java or C++.
This article was disappointing and superficial.