Over the past six months, I’ve gone from knowing zero Javascript to landing my first front-end position. As such, I’ve been reflecting on what I did (and didn’t) do well on my journey here and how I’d go about passing that information on to others. Although there’s far more information than I could pass on in a single blog post, these are what I consider the top seven tips for someone looking to go from nought to employed when learning to code by themselves.
Learning to code by yourself comes down to two key challenges: motivation and direction. Hacking away in your room is fun at first, but a few months in it becomes difficult to stay motivated. More overlooked than motivation, however, is direction. In the world of JavaScript especially, you could quite happily spend half of your time simply working out what it is you should learn. When there appears to be a new key framework or set of language features appearing every week, it’s exhausting just to know what to learn, never mind how to learn it.
The brilliant thing about communities is that they solve both of these problems. When you’re surrounded by mentors and other learners, you have both peer pressure to keep you motivated and a set of people to tell you what tools you should be learning in order to get hired. What’s more, having a community is fun and meeting other developers has been one of the best things about learning to code for me.
If you’re trying to find a community to join, there are two paths you can take. Firstly, you can join a group in your local town or city. Meetup.com has more groups and events than you could possibly have time to attend and is without a doubt the best way to find other developers in your area. As well as giving me access to loads of free workshops, talks and pizza, Meetup introduced me to a bi-weekly group of other learners who would keep each other accountable and share valuable knowledge with each other.
The second option is to join an online community. There’s a much broader range of ways you can get involved with communities online, ranging from popping a quick question on StackOverflow, to participating in public Slack groups, to joining an ongoing, community-based course like Treehouse’s Techdegree or Lambda School. It took me a little while to work out how to leverage the power of these communities properly, but once I did, they’ve been as affective as the real-life communities I’ve joined.
If you’re serious about getting good, I’d advise participating in both kinds of community.
The advice that you should learn to code from doing projects is thrown around a lot. Don’t get me wrong, this advice is good, but it misses some important details. When I was starting out, the idea that I should simply build a whole app was, quite frankly, frustrating. When you’re a beginner, building an app is daunting, if not an impossibility.
But the truth is if you’re going to learn to code, you do have to learn by doing. There’s only so far tutorials will get you towards your goal of becoming a real developer and, without proper practice, you’ll never truly grasp what you watched that video on.
The way I overcame the challenge of doing real projects whilst only having only rudimentary coding skills was to follow along with Treehouse’s Techdegree. Treehouse give you access to a bunch of tutorials but more importantly they also follow up those tutorials with little projects that implement those newly-learnt skills in a real-world setting.
Even if you don’t use Treehouse, you can apply the same method to your learning. If you’re lucky enough to have meet someone who knows how to code (see step 1), get them to quickly draw up a basic project for your current skill level that you can add to your portfolio. If you haven’t yet found a mentor, see if you can think up a basic page you can make to test your ideas on. The trick is to interpret ‘project’ broadly. Your project doesn’t have to be the next Airbnb, just something fun that you can whip up over an evening or two.
‘Learn to code’ is not a bad goal. ‘Know enough React and JS to get a job in 6 months’ is much better. If you’re committed to getting a job as a developer, you need to give yourself a way of enforcing this kind of time-constraint. For me, it was ‘get a job by the time you graduate’, the fear of being unemployed driving me forwards. You’re time-limit is going to be unique to you, but make sure you have one. If you’re stuck, Beeminder, Go Fucking Do It and Stickk.com are all great ways to give yourself some time pressure.
As you progress through your learning, you’ll encounter a range of frameworks and tools to help you build. Many of them you’ll use again, but a lot of them you won’t. One thing you will undoubtedly use time after time, however, is the actual language. By no means should you neglect using frameworks and libraries completely, but it’s more important to set aside some dedicated time to learn the nuances of your language of choice.
The one exception to this I’ve encountered so far is React. While this is partially becuase it’s massivley employable at the moment, React is useful becuase it teaches you a lot about Javascript along the way. If you’re struggling with ES6 syntax, get stuck into some React to help you learn those language fundamentals.
When learning to code, you should focus on knowledge that compounds over time to give yourself an exponential rate of growth over your career. This is why you should learn fundamentals over frameworks (the former is evergreen, the latter is not) and it’s also why you should focus some of your time on the skill of learning itself.
Understanding some basic learning concepts such as chunking, focus vs diffuse thinking and forgetting curves will have a force-multiplying effect on everythign else you do.
More than anything, my advice to learners is just to stick at it. When you’re in the thick of it it’s sometime hard to see progress but stay strong and know that in 6 months’ time, that problem you’re stuck on now will feel like a piece of cake.
I’m always happy to help other learners and if you’re welcome to drop me a line on Twitter over at @mulholio or on my personal site jmulholland.com.
If there’s anything else you’ve found useful, pop it in the comments.
Happy learning!
Communities
Practical things to practice
Time limit enforcers
Language fundamentals
Meta-Learning Resources