Project-driven Web Development Apprenticeship

If you want to learn to code, you have to understand programming is a craft. What you know doesn't matter as much as what you did: a potter is not judged by his knowledge of the clay, but by the work he displays on his shop's shelves. An efficient software apprenticeship is project-driven.

The focus of programming is not code, it's the stakeholders' needs: your colleagues, your users, and you. Learning to program is learning to identify and satisfy those needs through well-written code, just like writing is not merely about putting down words on a piece of paper.

In other words, programming is about understanding and solving problems, it's deeply entrepreneurial. If you just got started, you probably don't have any user you can confront your skills to, so start with you: be your own user.

I find it incredible that most computer science majors don't have a personal website upon graduating. Your personal website should be your home on the Internet, the place where you invite guests to have a great time and get to know you. A Linkedin profile is nice, but it doesn't exactly allow you to let your personality shine through code.

A personal website is a great project to learn how to code. It is useful to create career opportunities and experiment with new programming concepts, yet simple enough to develop a minimum viable version in a day or two.

You begin by learning HTML, CSS, and the fundamentals of Git and web hosting. You can understand a lot about the web in just ten lines of code without having to buy anything. More importantly, you can have a live website to show for your efforts in less than an hour.

Once you get the fundamentals of how the web works, you can use your first programming language to spice things up and get acquainted with the main concepts. Javascript is incredible for that: nothing to install, it works right away from your browser. Play around with small projects, like todo apps or simple games, and upload everything on both your Github account and your personal website.

From there it only gets tougher. The quality of your code is probably terrible, or too simple to be terrible. You have to lift heavier weights. Take on a front-end framework, like React or Vue, and re-implement your website using a static file generator, like GatsbyJS or Gridsome. Reduce the number of lines it takes you to add a feature. Simplify, then simplify some more.

At this point you should be able to add a blog to your personal website and display dynamic content from flat files. It's time to learn to connect external services to your application. It implies learning some back-end skills, such as API design and Model-Vue-Controller development. The things you learned up until now should help you take on a back-end framework like NodeJS and make your first simple server-side services. You'll also learn how to persist data in a database to build software other people can use.

This is very similar to what I suggested to my first intern, back when I co-founded my first startup. He only had one month to learn to contribute to our code base, and he still managed to pull off a useful internal tool to generate legal documents.

Start small, be practical, confront your work to the real world, and build upon it. That's how you learn how to program.