The Skeptical Methodologist

Software, Rants and Management

SYWTLTC: Novice Chapter 1 : Building Intuition

I’m creating a curriculum to organize and guide you through the plethora of online resources available that will teach you to code.

This is the first in that series, for the absolute beginner and novice. No requirements are necessary at this point other than a computer (with a web browser) and a mentor.

If you haven’t managed to find a mentor by this point, take heart. You can still make your way through the novice portion, however, you’ll most likely go a bit slower and miss some big picture items that your mentor would bring up. You won’t be able to move on to the Advanced Beginner portion, though.

Code Combat

Code combat is where you are going to spend the bulk of your time during the Novice stage. Out of all the different resources available to you, why Code Combat?

It’s Fun

Code Combat is a video game – it draws from role-playing game and real-time strategy roots. It creates a bunch of compelling problems to solve from this game, and is addictive in the same way that Starcraft or Farmville are addictive – there are levels to beat, enemies to battle and treasure to loot.

You will be more able to stick to this than many other resources.

It’s At Your Level

Code Combat excels, more than other resources I’ve seen, at starting you off very simply. It assumes absolutely no knowledge and builds you from there. There are a plethora of interesting resources out there that tend to have a steeper learning curve.

It’s Live, and Builds Intuition

Being able to actively watch a program run – in Code Combat, this is done by watching your character interact with other allies and enemies – is called ‘visual debugging’ when done on real world programs. It is one of the best ways to understand something unfamiliar.

The largest handicap for a traditional computer science program is that you have to write a program from scratch, find out at the end it doesn’t work, then slowly hack at it until it does. You’re never taught how to debug, so actually looking at the state of your running program is usually left as an exercise to you.

Code Combat starts you off early seeing the exact state of what’s going on. The more practice you get translating your code to the game’s actions, the more you build up your ability to think intuitively about code. I’ve never seen a resource better at building coding intuition than Code Combat.

It’s Free!

There are free and paid levels, and you should be comfortable working with your mentor to decide if you’d like to take them up on their paid services. Certainly, they’re a great company and deserve your support. But part of the assumption of this curriculum is that people will only need a computer and a mentor.

(Update: Code Combat has since changed how it charges. Previously, entire worlds were cordoned off as paid. Now, there are paid sections of each world. It is entirely possible to get the intuition you need from the free levels. But it’s also very useful to take advantage of the paid levels, especially when you get stuck on some concept and need more practice.)

It’s a Lot of Hours

To learn something, you have to do that thing. And to learn it well, you need to do it a lot. Often, traditional computer science programs may have one homework assignment a week, or multiple if you’re taking multiple classes. The bulk of learning coding in computer science degree programs is through this homework – not in the lecture hall or textbook reading.

Code Combat provides a lot of exercises. By the time you’re done, you’ll have completed as many exercises as someone half way through a computer science degree program. But it won’t feel like that since you’re assignments will have been fun.


The exercises tend to grow at a slower pace than a traditional degree program, so don’t feel bad if a friend of yours throws out complex terms like polymorphism or lambda calculus and you’re still working with while loops. This is, in my opinion, a good thing.

Building an intuition for the basics is far more important than name dropping on advanced concepts. Coding is not like mathematics, or traditional engineering where having been exposed to a bunch of very different toy problems and their toy solutions will make you a more productive programmer. Coding is much more like playing a musical instrument, and lots and lots of steady, progressive practice will give you a leg up in actually doing your job over someone from school.

The Assignment

Get an account on Code Combat, and get hacking. They’re always expanding to new levels and new worlds. Generally, we want you to work on Code Combat until you start to get a bit bored… and then some.

This happens after about a 100 or so levels in. At that point, you may want to add some variety in terms of a textbook we’ll recommend later. Around 120 levels plus a few chapters out of that book, and you’ll add in some additional variety with exercises from this blog posts “Advanced Beginner” series.

Whether free or paid, take advantage of the optional Web and Gaming mini worlds for additional exposure – even if you never intend on entering either of those industries. They’ll give you your first exposure to what is called ‘architecture’ in coding – largely assumed patterns in code that different industries use to solve reoccurring problems.


This Novice Portion, as well as the rest of the series, is going to be written with the Python programming language in mind unless specified otherwise. Python was designed in the late 1980’s as a teaching language – it has an intuitive syntax that’s easy to learn and is not filled with a lot of ‘gotchas’ or ‘magic’. It’s a dynamic language, which means you won’t have to figure out how to compile anything, and is multi-paradigm, which means you won’t have to jump through hoops to make your program do something as simple as say “hello world”.

For Mentors

It’s advisable to try and get your mentee to coalesce a list of questions for you on a weekly basis for either a face to face meeting or email. Code Combat gives some introductory explanations for computer science ideas like variables, arguments, parameters, functions and the like, but it’s taught from a highly pragmatic point of view. For this first phase, you are your mentee’s traditional computer science education.

Let them come to you so that you can plug in answers to their questions from the theory, but don’t add anything on top. Theory needs to wait for skill to catch up, and overwhelming someone with technicalities before they need them to solve their problem is just going to turn them off. They won’t remember it anyway.

Work with your mentee around boredom points – encourage them to stick with Code Combat past a handful of boring levels to truly see if they’re bored, or just have mastered a concept early and Code Combat isn’t really ready to move on yet. Eventually, they’ll get bored enough that it’s time to give them something more challenging to mix in from the Advanced Beginner portion, and this is largely your job as the mentor to decide.

Finally, the large focus on online exercises during the Novice phase also serves as a wash out period. It takes quite a bit of time, and despite the fun, can be challenging. It conserves your own effort to have them complete the Novice phase first, to truly see who’s interested and who’s merely dabbling. We want to generate more coders to enter the workforce, build open source projects, and the like. We don’t necessarily want to spend mentor hours on folks who want to write a “hello world”



September 20, 2016 - Posted by | Uncategorized

1 Comment »

  1. […] SYWTLTC: Novice […]

    Pingback by So You Want To Learn to Code: Prologue « The Skeptical Methodologist | September 20, 2016 | Reply

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s

%d bloggers like this: