Learning via Projects
What Codecademy Has Backwards
Quick disclaimer: Codecademy is only five months old and have way more to build than the current staff has bandwidth to achieve. I have tons of respect for their progress so far and can't wait to see how they evolve.
I'm extremely pleased with the popularity of Codecademy / CodeYear. Many of my friends are finally learning CS and will soon be able to create their own basic web apps. Alas, the current CodeYear method has one thing backwards: projects are an afterthought.
The current set up has lessons/concepts as the main focus of each week's course with a related (optional) project at the end. I think this should be inverted, with everything revolving around projects.
I started learning CS through Stanford's 106A course (more info here), which was almost entirely project based. Each week would bring a new challenge; by the third week (the third day of my time working through it) the task was to build the classic game: Breakout.
To be able to build a full, fun game so early in the course was a blast. I enjoyed the learning process as I was excited about the end product. Each lesson made more sense because I knew why I needed the concepts. I was highly motivated to continue the program.
Codecademy (and other code courses) could gain much by emulating this structure.
I think the ideal lesson set-up would be something like this:
- Show the student an interactive, working version of the finished project (ideally something fun)
- Explain why they can't complete the project with their current skill set - identify the new concepts they need to learn (this provides context)
- Teach the new concepts through interactive modules (CodeYear currently does this well)
- Coach the student through completing the project with their newly learned skills
- Enable the student to customize/personalize the project
- Let the user share what they've built with others
I think this method will result in higher user engagement and better retention of the concepts by the students. Also *hint hint* if users are sharing their projects, they are likely to bring new users to the site.
Three Other Recommendations for Codecademy
In addition to the lessons on programming concepts, there are three other modules which I'd love to see posted (sooner than later). They are key to becoming a well rounded coder.
Debugging
Bugs are an inevitable part of coding, especially for a novice. An early unit on best practices for quashing bugs would be immensely useful. Stanford has a great handout here.
Problem Decomposition
Stanford also did a great job of teaching how one should tackle a new problem. Decomposition (breaking problems into smaller, bite size, and easily testable pieces) is a key skill that every aspiring coder should hone.
Googling (i.e. quickly finding answers)
As a novice coder, you will constantly run into odd errors and concepts you don't understand. Being able to quickly find the answers is essential to maintaining a projects momentum. A module on this topic should also cover Stack Overflow and "How to read through documentation"