Learning to code is hard. Like, really hard, especially for folks without strong math backgrounds, resources to modern computers, or internet access at home.
So where do you get started? And how do you sort through hundreds of tutorials, posts, and jargon? And why should you listen to me?
I'm a self-taught developer, but not one of those 6-month wunderkind. It took me a couple years to learn what I needed to get my first development job, but I managed to do it. I found time in my 60-hour workweeks, battled mental health issues, and maintained my social life and sanity. And you can too.
Don't be discouraged by those wunderkind. Most of us can't cut back on sleep, family time, or even quit our jobs to learn to code. Be patient, practice solid learning habits, and try to have fun.
This article will list my tips for anyone trying to learn to code online. Let's get started with a few key terms:
Glossary of terms
- Frontend: Also referred to as 'client side'. This is the part of a website that users interact with. A frontend developer codes (and sometimes designs) web pages. They typically use languages like HTML, CSS, and JavaScript.
- Backend: This is the part of a website that you can't see. The backend stores and manages data. It also provides the 'frontend' logic to access and manipulate that data.
- Full stack: The 'full stack' is the combination of front- and backend. Many job postings may refer to this. As web development grows more complicated, it is more difficult to master every part of the 'development stack'.
- Pseudocode: It's 'fake code'! Writing pseudocode means writing out what your code should do in regular language. Typically you will turn each line of plain language into actual code. This helps you work through a problem in manageable chunks.
- Language: This is code that can be run by a computer. Different languages are work in different environments (e.g., websites, iOS, smart refrigerators). Examples include JavaScript, Ruby, and Python.
- Framework: A framework is built on top of a programming language to make certain aspects of it easier. It's always a good idea to learn the programming language a framework is built on before learning the framework. Examples include React and Angular for JavaScript, Ruby on Rails, and Django for Python.
Now, on to the hot takes... 🔥
Define your goal
This is probably the single most important piece of advice I can give. Does it sound like some self-help guru's instagram post? Yes it does. Does it work? Also yes.
There is a reason you want to learn to code. Maybe you want to make more money, or just get a job that doesn't require working on holidays and offers healthcare (if you're in the U.S.). Whatever your reason, ask yourself, "How will that make me feel? How will it make my life better?" That's your real reason. It might be freedom from debt, more time to spend with family, or the knowledge that you've created a tool that will help people.
Ask yourself those questions, and write down your answer. Put it on a sticky note on your desk, set a daily reminder in your calendar, or even write it on your mirror (I actually did this!)
Life is hard, and distractions and obstacles will come up while you're learning to code. And coding is hard; you will get stuck and frustrated. But if you are having a bad day and you see the words you wrote, they will remind you of why you are working so hard. That makes it a lot easier to keep going.
Identify your priorities
There are a ton of resources online to teach code. It can be hard to know which ones are trustworthy, up-to-date, and most of all which ones you will enjoy.
Take some time to figure out what it is you are looking for in a learning resource. Here are some ideas:
- Does it need to be free? Or do you have a budget you're willing to spend?
- Is accountability important to you? Do you feel comfortable learning on your own, or do you want a community of learners to support you? Or would you benefit from an experienced mentor?
- What delivery method do you prefer? Some folks love video walkthroughs and code-alongs, while others prefer just reading. Likewise, do you prefer tutorials or reading through documentation?
One thing I would recommend is to always start with free resources! Make sure you enjoy coding, enjoy the new language or framework you're learning, and enjoy the teacher. Don't over-commit any of your hard-earned cash.
I have another post with some great, free resources!
Learn what to learn
Look back at your goal - chances are, programming is a means to that end. You don't have to become any specific type of developer to make your goal a reality. That's freeing, empowering, and scary - how do you know what you should be studying?
Sometimes people complain about classes they had to take in college that didn't have any impact on their careers. You don't want to waste your time like this when you're learning to code! There are tons of programming languages you could learn, but guessing at which one is best could end up a frustrating waste of time.
Only you can figure out what type of work you will like the best. But once you have figured it out, you'll know which programming languages actually matter to you. If you want to be a data scientist, you'll learn Python or R. If you want to build websites, start with HTML and CSS, then learn JavaScript, and figure out if you like the frontend or backend better.
No matter what you want to do, figure out what your next job should be. Then learn the programming languages it requires.
Find the fundamentals
That last piece of advice I gave you? About finding the language you need and getting started? There is one caveat...
Learn the fundamentals first. Loops, conditionals, variables, data types, and objects - these are an essential part of every programming language. It's important to understand these before you dive in to a framework.
You'll probably learn those fundamentals while you learn your first programming language. But be sure you learn a language first and master the fundamentals, especially before picking up a framework. You'll save yourself a lot of headaches, and be more likely to ace those interview code challenges.
Cut the chatter
There are tons of programming languages and frameworks, dozens of specialties and niches, and a lot to learn even to publish a website. This ties in to the last piece of advice: figure out what you need to learn, and zero in on it. Take it in pieces. Don't try to learn everything all at once. The siren call of becoming a 'full-stack' developer may be appealing, but trying to learn too many disparate things can lead to burnout.
But past making sure you don't get distracted by the latest and greatest framework, remember that it's OK to admit you don't know something! Whether that's how to write an API, how to use CSS Grid, or what the heck a deployment pipeline looks like, remember that nobody knows everything, and everyone was a beginner once.
Make it fun
No matter what you're learning and how you're learning it, make sure you're having fun. This is the best way to ensure you stick with it, and to help you deal with the inevitable setbacks.
The easiest way to keep your learning fun is to center each learning project on something you love! For instance, if I were working through a tutorial that walked through creating a movie search tool, I might want to create a Pokémon search tool. I would write my code with the same structure as the tutorial, but use a different data source and change the variable names.
Taking this approach will help you have fun while you're coding. Plus, your portfolio will end up having a lot more personality!
Use scratch paper
Remember that tests in math class were always easier when you were allowed scratch paper? The same is true when you're coding.
That might mean drawing some boxes for your layout before you start writing CSS. Or it could mean listing out each problem you need to solve (and breaking it down into manageable pieces). For most developers, it also means writing pseudocode. Whether you prefer actual paper, an app, or just your code editor, be sure to map your route before you get started.
Messing up is fine
Let's face it: everyone makes mistakes. Ask any experienced dev you admire (if they deny it, they're probably not someone you should admire). But failure can be demoralizing, especially when you're just getting started.
Especially if you're a career changer, it can be hard to get back in a beginner mindset and let go of the feeling of mastery you had over your old career field.
There isn't any great advice or secret wisdom I can offer to help you get past your frustrations and struggles. Just remember that every failure is an opportunity to learn. Also, read the error messages, they can be helpful! (Seriously, I didn't do that at first because I was too frustrated!)
Know when to take a break
So, you ran into a problem. You're getting an error and you don't know what's wrong! That's OK.
Give yourself time to struggle and try to work through the problem on your own - try stepping away and doing something to relax. It's amazing how much this can help. Take a bath and get those #showerthoughts, cook yourself a nice meal, or exercise. Chances are you'll come back to your computer, sit down, and find a solution much faster.
Remember that a well-rested brain is a smarter brain. Food is fuel, and eating well can help you code well. Coding take a lot of mental energy, but physical aches and pains can create creaky code - get up and move around.
Know when to ask for help
It can be rewarding to figure out a problem on your own, and it can be beneficial to your learning. But sometimes you don't have the context you need, or a problem isn't worth spending a whole day on! If you're really stuck, admit it, and get some help.
- You might be able to Google a solution! But if you try a few things that only seem to create more problems, you may need to find a different helpline.
- Hit the forums! The right forum depends on what you're learning, but some favorites include Dev.to (try using the #help or #explainlikeimfive tags), CodeNewbie, and freeCodeCamp.org
- If you're lucky enough to have real-life friends in your hometown that know code, don't hesitate to ask them! It can be easy to think you'd be a burden or be embarrassed, but they'll just be glad to help! Plus, you'll probably make them feel super smart - always a good friendship move!
Remember that your story is not someone else's story
It's easy to get discouraged when you see blog posts titled, "How I became a full-stack developer and started making 6 figures in only 3 months!!!!!" But it is usually pretty clear that those people had a lot of additional background, resources, and support to make those incredible things happen.
Your story is not like anyone else's. You have unique challenges, constraints, and opportunities. Don't hold yourself to someone else's standards: make your own.
Share your success
Learning to code is hard, and teaching yourself online is even harder. You should be proud of your dedication and hard work! Even 'small' wins are wins, and deserve to be celebrated.
Tweet, post on your Instagram story, or whatever you like best! Let people will celebrate with you. If you get any hate, don't hesitate: smash that block button and keep coding.
--
Thanks so much for reading this far! No matter where you are on your coding journey, I salute you - keep up the awesome work!
Top comments (2)
This is an excellent post, thanks so much for writing it.
The only area that I'd offer a counterbalancing point to is that while you definitely should get to understand the fundamental constructs in your target language as early as possible, it is something you can do in iterative passes. You don't need to know those things perfectly, just well enough so that you have basic literacy in reading and writing code.
Then as you read and write more code, you will start to realize there is still a lot more you don't know, and you can keep coming back and filling in the gaps, refining your understanding further.
Also, I'm a strong believer in pairing rigorous practice on fundamentals with study and casual exploration of realistic examples. This helps establish some bookends in your space of study, and keeps a connection between theory and practice.
(That's mostly covered by your "Make it Fun" suggestion, but I've seen enough people stay too abstract, too long to want to call that out specifically--especially because more than a few learning resources only provide contrived examples)
Thanks again for this article! Really solid advice here.
Thanks so much for the thoughtful comment!
I totally agree that the fundamentals can and should be learned in iterative passes - 'master' was probably poor word choice on my part! I just hate seeing new devs jump straight to React without learning how JavaScript works, or how a .map() function works.
I think you've discovered something I took for granted, which is that learners should always be writing code and building projects (however small!) as they learn. This is such an essential part of my learning framework (and learning theory!) that I took it for granted and didn't actually say so! Staying abstract is a great way to grow bored and frustrated with any subject, but code especially.