Skip to main content

CodeSchool vs Codecademy(or 'How socket inherits event listening methods and implements asynchronicity')


In this review I'm going to focus on the pedagogy that I see evident in some CodeSchool courses and compare them to  Codecademy. By pedagogy, I mean: 'How does CodeSchool teach?' and ' Does it do a good job of teaching?'. I'm going to argue that despite high quality videos, colourful web pages, and often ssspppeeeeeakkkiiiing...rrrreeally...slowly..., CodeSchool's pedagogy is inferior to that of Codecademy.

There are many fantastic resources for learning to code on the web, and CodeSchool is one of them. So far I have completed courses in Ruby, Rails, Javascript, HTML/CSS, Jquery and Git on CodeSchool. The courses have all included high quality videos and colourful, interactive exercises- as well as massive pdf files of the slides (the files take more than a minute to load on my machine.) The question is: does the higher production value mean better educational quality?

The 'Try' courses on CodeSchool(such as Try Ruby and Try jQuery) are free and serve as hooks for complete beginners. The Try Ruby course gives the beginner an overview of the Ruby language and contains some whimsical art as well. However, unlike the free Codecademy course on Ruby (which lacks art), Try Ruby doesn't lead anywhere. If you pay for a CodeSchool membership, you have the option of RubyBits courses which are designed for Rubyists who want to improve their code, or for programmers coming from an another language who will be able to follow the talk of inheritance, encapsulation and namespaces. There is no true beginner option for CodeSchool in Ruby. Codecademy on the other hand provides an in depth course after which a beginner could start creating new programs from scratch.

The JavaScript track is better- the courses build more logically and a beginner could learn the basics of Javascript doing the first few JavaScript Roadtrip courses. However, as other reviewers have pointed out, once you have watched the videos, it's difficult to review what you have learned (except by re-watching the videos).  There are no transcripts or clearly written explanations of the new concepts learned, instead you can download the slides. The slides contain the code taught, but lack any explanations. Again, what Codecademy lacks in high quality videos, it makes up for in clearly worded explanations for every challenge (95% of the time- sometimes the explanations are a little unclear, but nobody's perfect).

Yesterday, I started the CodeSchool Node.js course for which you need to be comfortable with Javascript and jQuery (which I am). The first video begins with a clear explanation of the difference between 'blocking' and 'non-blocking' code, with examples. So far, so good. If you listen carefully however, there is still a lot being assumed. 

Here's a sample:
Only because I spent last week learning about HTTP, sockets, servers, ports, clients, etc. in Ruby could I understand what was going on here. No explanations of the concepts involved were offered-the knowledge was simply  assumed. Some people will respond : "OK, but you can look that up on the web and learn about sockets and HTTP." True, but then what am I paying CodeSchool for? 

Many of my criticisms apply to a particular instructor in CodeSchool who seems to suffer from 'expert blindness'. He knows so much about the material and has been programming for so long, that he doesn't realise how much other people don't know. He therefore uses jargon without properly explaining it. He introduces too much new jargon at once and moves on before it's had a chance to sink in. This difficulty could be overcome if there were accompanying text for the videos. That way, a beginner could look back and read over difficult concepts at their own pace. 

Perhaps I'm wrong here and he doesn't suffer from expert blindness; perhaps the courses really are aimed at programmers who want to learn new skills (and looking at the accompanying course reviews, most of the positive reviews are from experienced programmers). That's fine. The problem is that CodeSchool claims to be beginner friendly. Beyond wasting $29 a month, a beginner could end up frustrated and deciding they were no good at coding if they used CodeSchool as their primary learning resource.

Codecademy on the other hand is perfect for beginners. It's simple and doesn't waste screen space on videos, animations and cool art. Instead it uses most of the screen as a text editor, has a column of explanatory text and exercises, and puts aside a small window as an output console.
Codecademy also implements a crucial teaching technique which CodeSchool lacks: repetitive practice. 

Though much bashed, repetitive practice is essential to beginners learning to code. (For great examples look at Zed Shaw's courses.). I've seen reviewers complaining of 'too much typing' in Codecademy... Seriously? That's like complaining about too much 'chopping' or 'frying' in a cooking course. Not only is typing what coders actually do to write code, typing code is what gets your brain to learn syntax. After completing the jQuery course on Codecademy, I had probably typed:

$(document).ready(function(){
}): 
100 times- but I will never forget how to setup a jQuery function. The CodeSchool jQuery course was very difficult to follow and contained very little practice- instead, it has you do each new command once, and once only.

The other design advantage of Codecademy courses is their coherence. In the CodeSchool Javascript course (which is admittedly better than other CodeSchool offerings), each new challenge often has you doing a different task. Sometimes, a few challenges in a row will focus on building a single method. But often, each new challenge introduces a completely new method aimed at doing something different. This means you aren't seeing code grow in complexity, but instead are often adding single lines even at the more advanced levels. Codecademy wins here by including mini-projects where you build a functioning object like a cash register or mini choose-your-own-adventure game. 

Overall, Codecademy courses have been designed for true beginners and do an excellent job at getting people to a stage where they could start writing their own programs. I think CodeSchool does a poor job of getting complete beginners to this stage. CodeSchool puts a lot of resources into appearance but lacks the depth of Codecademy and other free resources.



Comments

Popular posts from this blog

Ruby, RSpec, Linux and Relational Algebra (or "What I'm doing this Christmas")

Last week was challenging- I'm beginning to appreciate the need for a programming buddy.  So far, I haven't found a Ruby IDE that helps with missing brackets or illegal syntax. This means hours spent looking for errors which more experience (or an IDE) would have solved in an instant. I've spent a lot of time on Stack Exchange looking for solutions to problems that many have already had- so far I haven't had to post a single new question (though it's evident that many people post duplicate questions, not having looked for a solution first). I spent longer on the Ruby project than anticipated, BUT I really enjoyed learning about Behaviour Driven Development. Thinking of tests in RSpec and then watching my Ruby script pass (eventually) was like passing an exam (though  one I had written myself). This week I'll be starting Rails-after I complete the CodeSchool Rails courses I'll go on to their RSpec course. Partly for the geek cred, partly out of curiosit...

Rails Project-Blogger Problem

Ran into my first challenge with the blogger today. I was creating a new model for a Comment feature and I typed: $ bin/rails generate model Comment author_name:string body:text article s :references That single red letter cost me an hour of struggle (I mean 'learning'). The extra s created a database schema containing something called 'articles_id'.  Since id  is a property of a single article, the comment controller  couldn't find an id  for articles,  as it didn't exist.  I looked at the Comment model file and saw the extra s  almost immediately after trying to enter a comment. But then I couldn't reverse the error. Rolling back the migration ( rake db:rollback), had no effect on the schema.  Destroying the model ( rails destroy model Comment)  had no effect on the schema. In the end I replaced the my local files with the Github repo contents (luckily I had just done a push). git fetch --all git reset --hard or...