I had been programming for many years when someone gave me a copy of this book. The first thing I learned was to appreciate the elegance of Scheme. As I worked through the chapters, I began to understand what tied together all the things that I thought were separate concepts in Fortran, APL, and the other languages I had used. I don't think I'm that great a programmer, but I am a much better one for having worked through that book.
Have you seen things like MIT's Scratch? Don't even "type lines", because that's not essential to learning the core parts of programming.
Indeed I have. I have played with it myself. I don't know what to make of it. As an old text reader and keyboard user it seemed to make everything much harder to do, what with all that mousing around.
Perhaps it works fine for the youngsters though.
I can't see it being anything but a pain for anything non-trivial, but were are talking about the simplest fundamentals here so I guess it might work.
Interestingly there is a Computer Science 101 course at some American university that has been running for many years. I watched it all on YouTube when it was presented in Scheme. That was fascinating for me having never used a Lisp like language. I was amazed how quickly it took totally non-programmer students from nothing to data structures, linked lists, trees, etc all the way to a language interpreter. What was great about that was that the time spent on Scheme itself was minimal, features were introduced as things went along.
There is a later incarnation of that same course presented in Java. The difference was amazing. Weeks into the course the students were still having trouble getting Java to do what they wanted, never mind tackle the meat of the course which was those data structures and such.
Then there is an even later incarnation of that course presented in a Scratch like graphical language. I did not sit through all of that so I don't know how well it worked out. But I know they did conclude with that "meta circular evaluator". Kind of mind blowing.
Sorry I can't remember the University or the name of the lecturer. He was great.
Edit: Way back in the 1970's when us kids we being taught BASIC we were introduced to the idea of designing programs before writing them. One approach was the good old flow chart. Another approach was the Nassi–Shneiderman diagram : Nassi–Shneiderman diagram - Wikipedia
Unlike flow charts Nassi–Shneiderman diagram enforce a structured programming approach.
If you squint hard enough you see Scratch is a Nassi–Shneiderman diagram drawing tool that generates actual code.
What is old is new again!