A practical guide to learning the basics of web programming
How you can learn to code for free as a ‘non-technical person’
Last summer, I was in the final months of my master’s degree with a specialisation in entrepreneurship. Everyone around me was constantly talking about ‘tech startups’ and being very excited about it. People kept mentioning cryptic terms like ‘HTML & CSS wireframes’ and ‘SaaS’ — and I had no clue what most of these things mean.
What I did know was that I wanted to learn more about it. So I decided to learn about ‘code’ and programming.
As a first step, I asked the most knowledgeable person I know: Google. I typed ‘learn to code’, and what I ended up with were 396.000.000 search results in 0.54 seconds: an insane number of articles, e-books, courses, and any other imaginable form of content about programming.
I had absolutely no clue about how and where to start.
I figured this whole endeavor would require a lot of time and effort, and thus decided to write my master’s thesis about the topic. I would write about what ways exist for non-technical people — like me and most entrepreneurs — to learn how to code in the most efficient way. My hope was that the research would help some entrepreneurs gain the knowledge they need to hack together a prototype or make better technical hires, and I’d pick up some useful skills along the way.
A few months later, I was done with the thesis. Very excited, I shared it in one of the forums at freeCodeCamp, which is where I picked up a lot of what I know about code (thanks ❤).
Quincy Larson, the founder of Free Code Camp, gave me an honest answer:
This was great feedback: It makes no sense to have someone read a whole 67-page document that was written to comply with academic requirements. My goal had been to be rigorous — some might say boring — enough to appear like a ‘serious’ scholar (here’s the link in case you want to give it a try anyway).
Quincy’s feedback is the reason why I wrote this post: to share the condensed learning I got from sifting through countless papers, articles, books, and blog posts on how to learn programming on your own in the most efficient way, and for free — without being boring and taking 67 pages, and after having applied all of the knowledge on myself.
My hope is that this post will help you avoid wasting your time as I did in the beginning with low-quality resources and ineffective learning approaches. I broke down the whole process of learning programming into seven steps — here’s what I learned.
#1 Establish a strong learning goal.
An effective learning goal could be a personal project you are motivated to build: a prototype of an idea you have, your personal website, you name it. Avoid jumping right into tutorials or MOOCs with the vague aspiration of “learning programming”. Having a well-defined learning goal makes your learning progress measurable, increases motivation and helps you persist when things get more complicated.
#2 Gain an overview of the learning materials before you start.
“Programming” is a broad term, which is why I suggest you narrow it down to web development as a beginner. Before starting to learn anything, get an overview of what the ‘full stack’ encompasses in order to be able to make an educated choice of language and technology. Here’s my stab at doing that:
In general, there is no one “best” choice of a first programming language. I recommend these three languages because all of them are commonly used in web development, they have a promising outlook for the future, and experts generally consider them to be adapted for beginners.
I’d recommend these three places to get started:
- Learn Python The Hard Way by Zed A. Shaw (Python)
- Ruby on Rails Tutorial by Michael Hartl (Ruby on Rails)
#4 Establish a curriculum to guide your efforts, and use several resources in parallel.
There is a staggering number of free high-quality resources available, and it is almost impossible to make sense of all of them in the beginning. For this reason, choose one or more curricula that will guide your learning. Note that there is no “one-stop shop” resource that will teach you everything — you can and should use several resources in parallel that will complement each other.
Here are some curricula I found particularly useful:
- The Odin Project (Ruby)
- Bento.io (Python / Flask) or Lifehacker (Python / Django)
- Bachelor’s level computer science
#5 Optimize your learning by using techniques discovered by psychological research.
Learning research has come up with a host of techniques which are easy to follow and implement. Make use of them and tailor them to your needs to improve your problem-solving abilities, your understanding of difficult concepts, your retention of new material, and to master procrastination.
Here are common strategies to improve your problem-solving skills:
- Utilize both focused and diffused mode thinking
- Chunk the knowledge you learn
- Embrace failure and learn from it
- Use metaphors and analogies
The following are techniques to improve the retention of newly learned material:
- Use recall instead of re-reading
- Make use of spaced repetition
- Interleave different types of practice
- Memorize a vocabulary of keywords & concepts that will be useful for solving problems (instead of trying to learn syntax by heart)
Some tips on how to avoid procrastination:
- Find a friend to learn together with
- Focus on the process, not the end product
- Try the Pomodoro technique
- Set regular goals (be SMART)
#6 Learn by doing: practice your programming skills and build real projects as soon as possible.
Learning programming is a hands-on effort — watching videos and solving multiple choice tests will not be sufficient. You should spend most of your time building projects. These are some places where you can find inspiration for what to build:
- Jennifer deWalt’s 180 programming projects
- Zero to front-end hero by Jonathan Z. White (Part I & Part II)
And here are some places where to find programming problem sets for deliberate practice:
#7 Learn from advice by programmers, teachers, and other self-learners.
The main advice you will find is that learning programming takes a long time. Don’t be intimidated by ‘genius programmers’, and get used to debugging.
These are my two favorite collections of advice:
My final piece of advice is the most important one:
The main predictors of success when learning programming are of human nature — your motivation and persistence.
Many beginners fall into the trap of worrying extensively about technical questions: Which resource should I choose? Which language should I pick? Which technology should I use? This approach has a good chance of wasting your time. As long as your choices remain within industry standards, they won’t matter nearly as much as having a strong, overarching learning goal to stay motivated, and coding regularly.
Learning to code is not an easy thing. It takes a lot of time and perseverance. When you want to reach your overarching goal, take it one problem at a time — and just get started! You’ll be making continuous progress, and then it’s all about staying motivated and persevering until the end.
“If you want to build a ship, don’t drum up people to collect wood and don’t assign them tasks and work, but rather teach them to long for the endless immensity of the sea.” — Antoine de Saint-Exupéry
And before you go…
Do you know any additional tips, techniques, or resources that are missing in this post? Please share them in the comments section below.
PS: Here are some more resource collections for different learning styles: