This online tutorial grossly overestimates how much the layperson understands about computer languages. For the complete beginner, far too much is left unexplained.
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".
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.
I agree. The vast majority of what I've read regarding teaching, and my personal experiments tutoring, have shown that alternating between different layers of abstraction is a far better approach than going purely bottom-up.
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.
Thanks for the comments. I'm the cofounder of Codecademy - we're working to alleviate all of these issues. We do lots of user testing and have surfaced many of these problems on our own. Additionally, we make an effort to simplify a lot of concepts and ease users into them instead of explaining them immediately. We've noticed lots of users actually struggle when deciding what IDE or text editor to download. The REPL makes it easier for them. We'd love to hear more of your comments - shoot me an email at contact (at) codecademy (dot) com.
I agree with the overestimation of what the layperson understands.
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 ;)
Agree with you about Codecademy's assumption/expectation of a layperson's understanding is ambitious but your expectation of what needs to be explained kinda deviates from their aim. Yes, they should've expanded on some concepts but Codecademy should really concentrate on the 'what' and not the 'why' as that can be developed afterwards. Spending most teaching on the 'why' (like most adult learners would do) early on will put off some users off as they do not feel they are 'doing' much and quit/move onto something else.
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 also constant. Every single time someone tweets/blogs/talks about Codecademy they say Code Academy. It's inevitably followed by "actually it's Codecademy".
It's a distraction from what otherwise seems to be a great idea.
I seem to remember codeacademy being owned by someone else, a squatter or an entrepreneur who hadn't got around to doing tomething with it. If I do in fact remember this correctly, one explanation would be that they bought that domain after they'd received more investment money than they started out with.
"squatter" - although the term is commonly used in the way you used it (and always has been) the usage is an invention of the 90's media. Squatting actually involves occupying property of someone else that you don't have right to in any way (and you don't have permission) that isn't being used. The person who takes a chance and buys a name pays for it and at the time it wasn't in use by anyone else. The practice of using the derogatory word "squatting" to describe legitimate buying of a domain name with the hopes of reselling is something that should end.
Maybe you're right about learning 'the hard way'. I too strongly believe in learning with rigorous practice. But, one has to understand that people take various approaches to learning and teaching.
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".