Hacker News new | ask | show | jobs
by peterhi 854 days ago
It's the learnability of the language. Remember BASIC? You could show someone a FOR ... NEXT loop and they would completely understand. After a couple more 10 line programs and you can safely hand over the keyboard and handle the "how do I?" questions

You had to show very little before they understood. Now try Lisp ...

M: This is a list

S: What can I do with it?

M: By itself nothing but trust me it is important. This is how we take the head of a list

S: Cool, why would I want to do that?

M: We'll get to that later. This is how you take the tail of a list

S: ...

M: This is how to append to a list

S: Is this going anywhere?

The number of things you are shown but do not understand keeps piling up before they are supposedly going to magically work together to do something underwhelming (when BASIC did very little it took very little to do it). Add to that the function names were either cryptic, "cddar" anyone - "EQ" and "EQUAL", or insanely long

You have too much to learn before you can make sense of anything. Least that was how Lisp was taught to me in the 80s :)

I self taught Forth and Prolog because with both once you learn something you can do something

2 comments

I don't know why you're being downvoted; I completely agree with this. It's hard to put your head into the mindset of a beginner after it's been in the deep end of the pool for so long. Stuff needs to make sense now and in isolation rather than an ever-growing stack of items that will be explained later. It's a matter of putting stakes in the ground and building incrementally. One could argue that lists and heads and tails do make sense on their own and isolation, but they're maybe not the right primitive, because all the things that beginners might want to use "intuitively" have to be first built out of lists. Lisp is a reductionist language, and that's not good for beginners.

Readable code needs to be not subtle, low on magic, and self-explanatory. The last one is hard to quantify and make objective, but is imperative in making an approachable language.

    (set x (list 1 2 3 4 5))
    (for item in x 
      (do stuff to item))
Now try to explain BASIC, but do it by first explaining how to create and manipulate a block of memory.

You are conflating language differences with the real argument which is the decades-old debate about whether introductory courses should be practical or rigorous.

But that is my point. When trying to teach Lisp they would teach you all about the 100 ways to chop up lists without showing you why you would even want to. Your example would not have appeared until the 4th or 5th lecture and would have required the definition of a recursive function (two lectures on recursion alone) to achieve the same thing

And as for BASIC why would you need to "explaining how to create and manipulate a block of memory". This is not something that the BASIC programmer needs to know to write a program

This is just the sort of elitist crap that gatekeeps becoming a programmer. You can drive a car with only the most superficial understanding of how a car works and it does not affect your ability to get from A to B effectively

The answer to this decades old debate is simple, after each lecture the student should be able to do more than they did before they entered the room. At the end of the course they should be capable of teaching themselves from the available resources