On Fri, Nov 29, 2019 at 12:23:41PM +0900, Stephen J. Turnbull wrote:
Steven D'Aprano writes:
On Fri, Nov 29, 2019 at 12:55:13AM +0900, Stephen J. Turnbull wrote:
Abdur-Rahmaan Janhangeer writes:
"Designed With Learning in Mind"
That's Python. Guido said so from the beginning,
Is it? Did he? Do you have references for that?
Yes, it is in my opinion (I use it in teaching all the time in the same way I would use pseudo-code, and I haven't taught a class in programming in 25 years).
Yes, he did.
No, just my memory of occasions where he has said or posted that use of Python as a teaching language informed his design philosophy and decisions (which is the minimum that "with learning in mind" implies).
Guido might have something different to say about all this, but according to his blog, he *literally* designed Python as a scripting language for himself to glue together libraries written in C for the Amoeba operating system. "My original motivation for creating Python was the perceived need for a higher level language in the Amoeba project. ... So there was a need for a language that would “bridge the gap between C and the shell.” For a long time, this was Python’s main catchphrase." http://python-history.blogspot.com/2009/01/personal-history-part-1-cwi.html He describes his design of the language here: http://python-history.blogspot.com/2009/01/pythons-design-philosophy.html and notably missing from that list of design principles is anything about teaching programming or making it easier to learn or "Designed With Learning in Mind". In fact, some of the features of ABC that actually were designed with learning in mind were consciously rejected by Guido when designing Python. Honestly, this discussion is quite surreal. The json.load/loads API is clearly copied from the same API in the pickle and marshal modules, which are some of the oldest APIs in Python, going back to at least Python 1.5 if not older. So we have people simultaneously arguing that: * the load/loads distinction is hard to learn * and that Python was designed to be easy to learn from the earliest days which is contradictory. If it had been, the pickle/marshal API probably wouldn't have used loads and json wouldn't have copied it. Python naming conventions have evolved, and the oldest APIs are not "Designed With Learning In Mind".
Python is not Scratch, nor is it ABC. ABC was a *big* influence on the evolution of Python, but (in my opinion) at least half of that influence was to convince Guido *not* to make Python "designed with learning in mind".
"Design with learning in mind" literally means "don't forget about beginners in Python and in programming", not "sacrifice everything else on the altar of education".
That's not what it *literally* means. Its literal meaning is a lot closer to the second statement than the first, only without the perjorative elements of sacrificing to the cult of education. In any case, it is a matter of historical fact (to the degree that we believe Guido's account, and we have no reason to think that he is lying) that he didn't design Python with beginners in mind.
For example, ABC used its own alledgedly "beginner friendly" terminology that nobody else in programming used; Python mostly sticks to common terminology used by other languages which will be recognised by programmers coming from other languages.
Which is a decision that has learning Python (vs. learning programming in general) in mind, no?
No. If you want to learn programming concepts, you might prefer ABCs terminology. That at least was what the ABC designers thought; your mileage may vary. But ABC was designed with learning in mind: https://homepages.cwi.nl/~steven/abc/teaching.html just as Scratch and similar languages are. Using ABC for learning was the reason why it was created, and its design reflected that. This is not why Python was created, and while Guido copied some of the concepts from ABC, he consciously rejected others. One of those concepts he intentionally rejected was that the user had no prior experience and was learning how to program. -- Steven