Two Problems with Learn-to-Code Sites

Wednesday December 31, 2014

Lots of people want to learn to code, and this is good. But lots of the web sites that want to teach people to code are bad.

The popular learn-to-code sites generally teach a popular language, which is not necessarily a bad thing.

But there are two fundamental problems with the approach of many popular sites:

  1. They teach all inside a browser. This removes setup difficulty by providing a custom toy environment but leaves the student with no independent working setup of their own.
  2. They take a one pass adventure game guided tour approach. This enforces a progression and generally makes it difficult or impossible to scan through and refer back to the material.

There is definitely value in making it easy for people to try something they otherwise wouldn't try. After trying, a different approach may be better for facilitating learning.

To learn to code effectively, use:

  1. tools that are actually used for coding
  2. materials that are reusable as references

This means that you should:

  1. use an editor and language implementation installed on your own machine
  2. have, read, and work from one or more good documents, guides, or books

Books are a really good idea. This should be obvious, but it seems, especially when it comes to technology, that people want to imagine you can "learn by doing" everything, starting from nothing and then just checking Stack Overflow occasionally. No. Read a book. It's a mistake in an in-person class to think that you can get by without reading a book. You should read a book. It's also a mistake to think you can get by with just online activities. Get a book.

The "toy environment" and "guided tour" design problems of most online learn-to-code systems are fundamental problems. It additionally seems to be, too frequently, that the materials presented in these systems are less well organized and produced than one would expect from a book. Further, the interactive exercises that are ostensibly a major advantage of online systems can totally break the experience if they have the tiniest blocking error in design or implementation. And finally projects, which are an excellent way to learn, too often feel inane and constricting rather than interesting and eye-opening when forced into the frameworks of automated systems.