Funny. There is a series of books by Zed shaw called "Learn 'x' the Hard Way". The books tells you to type things first; the explanation comes later.
In my experience, the most important part of learning to program is that you can do something fun, quickly. If you enjoy the programming, you will continue with it, and then bother to learn the "why"'s. If you don't find it fun, why would you bother learning "why"?
The Code Academy tutorial isn't perfect, but I do think it's a fun introduction. Importantly, it's a fun introduction that require almost no set up. I know it has limitations, but it is pretty awesome, and a much better path into Ruby than a lecture on object oriented programming.
Not to knock the lecture. It's very important, in fact. I just think the lecture should wait until lesson 2 or 3.
One example is the popularity of Stanford Professor Andrew Ng's Machine Learning class. The course is almost entirely top-down, with concepts, then trying out basic code, then finally learning some of the Math behind the algorithms. But people have definitely been able to learn from the course-I remember seeing an HN post about a guy who built a self-driving RC car using the algorithms in the ML course.
The idea of adding buckets of complexity by beginning with questions like "what is a REPL", "how does the code turn into action?", "how is my message getting to this site?" kind of takes all the fun and exploration out of the experience.
As a programmer I dislike magic, I have to know what's happening under the hood. But had I kept asking why, I'd be studying electronics and electricity at the moment.
The trust in the existing infrastructure has to begin somewhere, and I think the quick feedback from a REPL is a great learning tool. It whets the appetite, and students can then expand their circle of knowledge over time.
Imagine if you had to understand E=mc^2 before being allowed to appreciate the night sky ;)
It is obvious the users' background covers a wide spectrum so Codecademy would have to draw a line somewhere and say here's the pre-requisites prior to starting the intro coding course. They may need to provide this background knowledge via a pre-sessional/foundation/principles course (or pintpoint users where to go if they don't) covering the barebone basics of computer science and computing as a task.
Whether 'the hard way' is the best is really up to the learner - people learn in different styles so whatever gets their attention really. As a suggestion , Codecademy should provide a list of additional resources for eager learners who wants to understand the underlying concepts and/or provide links to other courses if this particular course is not useful for them.
It's a distraction from what otherwise seems to be a great idea.
There cannot be a right way to teach given the multitude of learners now online.
No one actually codes using a REPL in a browser. Yet the site makes no attempt to explain why or how this REPL exists, or how it works.
It doesn't explain why I can only type in certain places on the screen.
It doesn't explain how to try again, or undo mistakes.
It doesn't explain why a string must be surrounded by quotes, but numbers must not be.
It doesn't explain why suffixing `.length` to a string (but not a number) does anything, versus any of 50,000 other English words I might have put in its place.
It's confusing that there are three sources of errors: those from the language, those from the tutorial, and those from the browser/internet. Where is this program running? Where does the code live? How does this code turn into action? How does the tutorial know what I'm doing?
Codeacademy doesn't explain how any of this magic happens. It just plops you down in front of a REPL and tells you to echo specific things.
Coding is not about learning the syntax that lets you type "Ryan".length. It's about learning the underlying concepts: the "why", not the "what".
Coding is best learned "the hard way".