Sign in
Log inSign up

Does feeding coding newbies more abstract languages actually foster more effective learning?

Todd's photo
Todd
·Nov 5, 2017

As a teacher (informal; I'm talking about teaching coworkers/friends not in a formal institution), I often hear people telling newbies to "learn python" or JavaScript first because it's "easier to grasp the fundamental concepts of programming before dealing with advanced OOP concepts or even low-level concepts like pointers/bitwise operators/etc..."

There are variations on that advice, but, I'm sure you've heard it before too. The question is, has this actually ever been evaluated and shown to be true? Do folks who start on a language which does more for the programmer and abstracts more away, actually, for reals, having a better learning experience? I've taken an opposite approach and taught several people C instead of python, and so far it's worked out better than expected.

One of the reasons I ask is because there was a time when none of the newer languages existed, yet the human race still wrote very effective programs. So I can't help but think "At one time, newbies *had* to learn on assembly language" or C, or PASCAL, or punchcards, etc... And apparently it wasn't *so hard* so as to block us from progressing.

Keep in mind that my question here is specifically about learning experience. I don't believe how fast someone learns or how effectively someone learns has much to do with how good of an actual career programmer they are, so we are not addressing "which way makes x person a better programmer in the long run." We are also not addressing "Which language is best?" or "Are higher level languages better than lower-level languages?"

I had to explicitly state the above because I could see this topic accidentally heading in those directions. Also note that, in this context "more abstract" means "languages which do more behind the scenes for the programmer without them having to worry about it"; those which come with built-in data structures, garbage collection, and other "automatic" features.

I think a good question to address here is "Does programming fundamental data structures/algorithms and dealing with manual memory management teach some part of programming which cannot as easily be learned when only coding on more abstracted/macro level systems?" For example, does coding a hashtable from scratch exercise the brain more than implementing an OAuth API?