A lot of ink has been devoted lately on reality checks for new self-taught coders. Here are two prominent posts:

TechCrunch: Don’t Believe Anyone Who Tells You Learning To Code Is Easy

Viking Code School Blog:  Why Learning to Code is So Damn Hard

These posts are reactions to the wealth of beginner courses on coding, some which promise to turn you into an expert hacker in a few months.

The “learn to code” movement tells people that anyone can do it, even kids and Barack Obama. These initiatives are admirable to be sure, but in their eagerness to spread the gospel of code, they are not telling the whole story. According to the posts linked above, as well as other anecdotes, people are giving up their studies after leaving the warm, gentle embrace of Codeacademy.

As the Viking Code School post says, after the hand-holding honeymoon with these tutorials is over, new coders are pushed from the “cliff of confusion” into the “desert of despair”, where there is little to guide them into proficiency.



This desert is familiar to anyone who took the path of the self-taught coder. Once you realize how little you know (variables and for-loops are but the ABCs of programming) it can be discouraging to go on.

The post suggests three strategies to survive this desert:

  1. Have a strong goal for what you want to accomplish because otherwise you will end up chasing your tail learning all kinds of interesting but ultimately unproductive things. If you have the time to spare, by all means skip this…

  2. Find a strong path which leads directly to the goal you’ve set and verify that it will actually get you there. This is where you need to dig deeper than the marketing slogans and smiling faces on course websites or book jackets to ask “will this help me accomplish the goal I’ve set or not?”

  3. Focus and avoid distractions because, if you’re the kind of person who’s interested in learning to code, you’re also the kind of person who gets interested by learning all kinds of other awesome things. When coding gets difficult, you need to be able to push forward instead of just trying out the next cool-looking thing.


These are all great tips, but I want to add to them.

1a. In addition to you goal, have a concrete project to accomplish. Your goal can be broad, like “I want to scrape websites with Python”, or “I want to build news apps with Django”. Within that goal, set a specific milestone.

For example: “I want to scrape this government database with BeautifulSoup”. Or “I want to map all the homicides in my city like the LA Times did”.


4. Use intermediate learning resources. The lack of post-novice resources for programmers has been acknowledged and there are a few great attempts at filling that vacuum. These are resources that no longer teach you the basics of code, but have you complete challenges and mini projects.

It’s here that you’ll learn the most important lesson in coding: the ability to seek solutions or at least hints that will take you closer to a solution.

Here are some of my favourite intermediate resources:

  • Newcoder.io – gentle walkthroughs for small, doable projects in Python
  • Exercism.io – short coding challenges where you submit a solution and others review your code
  • Python Projects – a book with lots of annotated recipes on useful practical uses for Python
  • Design of Computer Programs – an advanced computer science course on Udacity that teaches the importance of planning out your code before writing it
  • /r/BeginnerProjects – a subreddit for new Python coders to suggest and work on simple projects, and have their code critiqued
  • Mega Project List – a bunch of project ideas to try on your own


5. Join your local coding association. Major cities usually have a meetup group for different languages. Go there, make friends, find a mentor. If you’re a journalist leaning code, join discussion groups like PythonJournos, RubyJournos, or RJournos. Folks there are very friendly and helpful.


4 thoughts on “How to survive the desert of despair in your code-learning journey

Leave a Reply

Your email address will not be published.