How to Teach Yourself Coding
How did you learn coding yourself? How should I start programming? I hear these questions often enough to warrant a blog post. I'm no expert at data science or web development (yet), but my attempts at self-learning (with only free resources) has gotten me two internships so far. This guide to self-learning is a result of what worked and what didn't work in my experience.
Why This Guide?
Because online guides aren't comprehensive enough. They don't deal with challenges specific to self-learners, which includes:
-
Lack of Fixed Learning Path. There isn't a standard curriculum. Self-learning requires you to design your own curriculum.
-
Lack of Guidance. Unlike bootcamps or schools, there isn't a teacher to constantly solve your problems. You have to rely on online forums and largely yourself.
-
Lack of Accountability. When self-learning, there isn't an exam or employer to force you to learn concepts you detest. The only one who can keep you accountable is yourself.
-
Tutorial Hell. Tutorial hell is the infamous problem where a self-learner watches tutorial after tutorial after tutorial, and never gets to apply those skills.
These challenges combined can overwhelm self-learners, leading to procrastination and never learning to code. This guide outlines a self-learning methodology that specifically aims to solve the above challenges.
So let's get started!
Step 1: Define an End Goal
This long-term target is used as a guiding beacon for your learning journey. It reminds you of why you are learning to code, which keeps you motivated. Software engineering is a gigantic field. Your end goal tells you which languages, frameworks, technologies, etc, you need to learn.
While your end goal need not be hyper-specific, it must be measurable or observable. Having too vague of an end goal is like being a cross-country runner and not knowing where the finishing line is.
Good Examples
- Land a job as a junior software engineer
- Build a Twitter clone
Bad Examples
- Become good enough to be a junior software engineer
- Become proficient at web development
Words like "good enough" and "proficient" is difficult to measure. Having a vague goal introduces uncertainties into your self-learning journey, making it needlessly harder.
Your end goal may change, and that's fine. When I was just starting out, my end goal was to build my own trading bot which incorporates data science methods. But my focus has shifted to solving inefficiencies with web development and data science.
Step 2: Learn the Basics of a Language
Google for the most popular programming language for area of interest. For example, if your end goal relates to data science, you should pick Python. Then find an online courses/tutorials that teach you the absolute basics of that language. There is a ton of tutorials for the fundamentals of every major language. Just pick any popular option and start learning.
The goal of this step is to learn the super basic stuff like variables and functions, so aim to finish this in less than 10 hours. Once you can create a simple BMI calculator, move to the next step.
Exception: If web development your area of interest, you need to learn JavaScript, HTML and CSS, since all 3 are considered fundamental knowledge. Aim for less than 20 hours on this.
Step 3: Start Your First Project
Create a personal project which pushes you towards your end goal. It should teach you some of the skills needed. Pick something you are genuinely interested in creating, so you shouldn't try to find inspiration from those "100 Personal Project Ideas" Medium articles.
Say your end goal is to build a algorithmic trading bot. Your first project just be a stock trend analyzer, which takes in a CSV file and spits out metrics about a certain stock.
Build something you can complete in a month. If it takes too long, it means this project is too complex at this point. Simplify your project. Small wins are the key to motivation.
How do I pick up skills?
Medium articles, Youtube videos, short Udemy courses...basically anything that gives you a decent understanding of the topic. Once you get the hang of this, you will start reading documentation instead of tutorials.
Don't forget you shouldn't spend more than a month for a project. So go through a tutorial, and jump straight into your project.
Step 4 and Beyond: More Personal Projects
After you are done with the first project, pick a second, after the second pick the third, and so on. The idea is that your projects' difficulty will rise incrementally, so you pick up more and more skills along the way, nudging you closer to your end goal.
Pick up 1 or 2 new skills per project. Overly complex projects makes you overwhelmed, while simple projects will make you stagnate. When I built my personal site with Next.js, I was familiar with React, the main library Next.js relies on, but not Next.js itself. So in this project, I only had to learn 1 major new skill.
This method has several advantages:
No Tutorial Hell
When you start the project from the beginning, your goal shifts from learning a technology to finishing the project. This mental shift prevents you from staying in tutorials, because it doesn't get you closer to your goal.
Motivating
The middle of the journey is always the hardest. You don't have the same excitement as when you first started, and you are still far from your end goal. But after a few months, you can look back at your past works and easily see the progress you have made, which pushes you forward. That's why you shouldn't start a big ass project right from the start.
Bonus: Find a Mentor or Learning Buddy
Buddies whom you respect can keep you accountable to your end goal and reduce procrastination. Mentors can do the same, but since they are more experienced, they can offer learning advice and point you to relevant resources. Mentors are invaluable when you learn more advanced concepts, since resources are less readily available.
But you do not need a mentor or buddy. I personally didn't have one until my first internship. It could be hard to find a partner if your circle has no developers/self-learners. Partners make your journey easier, but they aren't necessary.
Miscellaneous
And here are some miscellaneous pieces of advice that doesn't fit in the above steps.
Don't code for more than 5 hours a day. Spending too many hours a day absorbing content leads to less information retained and higher chance of burning out. I personally do not code for more than 4 hours a day. If I go over my limit, I tend to feel burnt out the next day.
It's ok to take several days off. There's nothing wrong with not coding for an entire week if other things in life are getting in the way. If you feel burnt out, take a break, then adjust your self-learning habits to prevent this from happening again.
Summary
Conclusion
I hope this guide has been useful to you. Don't forget that learning to code takes significant time, just like any other skill worth learning.
So go easy on yourself and have fun learning.
You can leave a comment on Medium