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