I think of Alan Demer's comment: "There are two kinds of programming
languages, those that make it easy to write good programs, and those
that make it hard to write bad ones."
When teaching, you want the latter. Doing anything real, you want
the former.
Re Python: I think we old fogeys have to realize that programming
today has little in common with programming a few decades ago. Back
then, when we programmed, we typically wrote algorithms. There were
a few libraries for things like sin and cos, but if you wanted a
matrix multiply, you dashed off a triply-nested loop.
Programming languages now are used primarily to create a scaffold on
which to hang library calls. The libraries are incredibly attractive
because the world is more complicated now, expectations are higher,
machines vastly faster -- so the languages are rarely used to write
algorithms. A case in point is Google's TensorFlow -- a Python
front-end to a vast number of mathematical functions, where almost all
the "real work" is done by C++ programs with Python wrappers. The
fact that Python is largely interactive means that modest sized bells,
whistles, warts and other disgusting things can be slipped into the
language and be unnoticed as long as they don't have much effect on
the human reaction time. But doing these same things a billion times
really hurts.
On the other hand, most of TensorFlow was prototyped first in Python
and then C++ was called in to get the job done. I suppose there's a
place for that... But C++y TensorFlow add-ons like Keras are very
clean -- easy to write good programs at that level, but disappointing
when you see how badly they are delivered by TensorFlow.
Steve