Tips on becoming a self-taught developer
Image credit: Pascal Debrunner on Unsplash
Almost 8 years ago I've decided to make a career switch, learn to program, and become a professional software developer. Even though it was the goal, I still didn't believe that I'd manage to get a full-time job in a field I knew close to nothing about. Fast-forward a year and a few months, and I was working as a junior web developer at a local startup. Currently, I'm a senior software engineer, something I couldn't even dream about when starting my coding journey.
Lately, I have been asked increasingly often for some tips on how to become a self-taught developer, so I thought I'd write a post about it, reflecting on my experience and pointing out the things I'd do differently.
In this article, I'll try to give general advice on how to improve for those considering or maybe already on the way to becoming self-taught software developers. It should be noted that the focus of the post is on front-end development since that's what I did, however, a majority of the advice can be applied to becoming a software engineer irrespective of focus.
The post is structured as a list of bullet points. Although I did try to put the points in order, following them strictly is not necessary. I'm just talking about my personal experience, it may (and should) be different for everyone depending on learning preferences and other factors.
Start writing code as soon as you can
Learning to code was my New Year's resolution. However, I haven't written that many lines of code for a few months, until I started building my first app. Instead, I've spent that time reading various programming books, trying to build up enough theoretical knowledge. Eventually, when I thought I was ready to make the first simple app and set out to write it, I realized I had no idea how to do it. All that theoretical knowledge about a programming language that seemed to be solid while reading the books, seemingly evaporated when it was about to be applied in practice. The thing is, it's easy to feel like you know enough when learning a new topic, just to see that knowledge falling short in practice. It's really hard to internalize all that new data just by reading it, it needs to be practiced. Additionally, theoretical foundation books usually outline the specifics of a language, without teaching how to piece different parts of it together to build an app. Therefore, my advice here is to start writing code as soon as you got the basics of a language down. It doesn't need to be a full-blown app either, one of my first projects was a simple function that solved quadratic equations (it's way simpler than it may sound). And if you're struggling to start writing code, you may find the next point helpful.
Study the code of an existing project
It's quite normal to struggle with writing a few first apps or websites after doing a bunch of courses or reading some programming books. In that case, I'd recommend finding a ready project on the same topic and seeing how the parts you're having issues with were implemented there. That's what I did when I set out to make a quiz app, where users would select an answer to a question and receive a score in the end. Nothing fancy, but I still struggled to figure out how to combine all the pieces. I found the code for an app that did the same things I wanted to do, and followed it along, incorporating some pieces into my app. Ultimately I've got my app working and as a bonus, understood better how to change the content on the screen and use some CSS transitions.
Use online interactive resources
Another great resource for learning programming is online interactive learning courses. They are great for practicing coding skills, particularly for beginners, who might not know where to start or lack structure in their studies. The best thing is that you can learn and apply the new skills at the same time while receiving immediate feedback on your progress. I went through Codecademy and freeCodeCamp courses, which since then have both substantially expanded and received new content. I particularly liked freeCodeCamp because each module has a list of projects to make, which is a great way to build up a portfolio, especially if you're having trouble deciding what to build. On top of that, finishing all projects in a module awards a certificate of completion, which is a good addition to your CV.
Learn HTML and CSS fundamentals - build a portfolio website
Learn CS fundamentals
Join a group or community with the same goals / Get a mentor
Eventually learning to code can start feeling a bit lonely if you have no one to discuss your progress or share the new knowledge with. Additionally, anyone would benefit from quick informal feedback if they're struggling with some concepts. That's where learning communities/groups of interests come in. Discussing the issues you've encountered or solutions to them is a great way to reinforce your knowledge and broaden it. Luckily there's no shortage of communities for new code learners nowadays. I used to hang out in the IRC channel for the #learnvasasctipt subreddit, however, it's not that active anymore. A few communities I've heard good things about are CodeNewbie and freeCodeCamp's forum.
Make coding a habit (at least an hour per day)
While all the points mentioned before are important in some way, the most important one by far is making coding a habit. Moreover, for the best result, it has to be a daily habit, and I cannot stress that enough. Ultimately it's way better to spend one hour every day writing code than doing a ten-hour coding session once a week. Even as a professional who writes code for a living almost daily, it usually takes me some time to get familiar again with the code I wrote a few weeks ago if I wasn't actively working on it recently. It may seem like everything is clear and you'll easily get back to the code you wrote a week ago, but the reality is that our brains don't work like that. I cannot count the number of times I looked at some of my old code and was trying to figure out how it works. It applies even more to the new learners. You may have all the coding concepts and relevant knowledge in your head when writing a particular piece of code, but it will not get easily internalized unless it's done at constant short intervals. James Clear has written a lot of content about making lasting habits, which in itself is quite a fascinating topic.
Try coding challenges
If you want to add a bit of gamification to the learning process, coding challenges could be a good option. I used and can recommend Codewars - it has a large number of challenges in different programming languages. They also vary in the degree of difficulty, so anyone can find a kata (that's what a challenge is called) that suits their level. There's also a progression system that makes solving challenges a bit more engaging. The variety of challenges is indeed great, but I find the website more useful to practice some fundamental coding concepts in a new language or to get a hang of some new syntax.
Read programming books
I've mentioned earlier that one of the mistakes I made at the beginning of my learning journey is putting too much emphasis on reading instead of actively coding. This doesn't mean that reading coding books is useless in any way. Quite on the contrary, it is a great way to get a solid, in-depth knowledge of programming concepts. The best way is a combination of reading and coding. I usually pick up a book after trying a new concept/language. For example, I have started writing some simple Go code. After doing that for a bit, I got a Go programming book, which helped me solidify and deepen my existing knowledge.
Write blog posts
It may sound strange at first, but one of the best ways to learn a topic is to start teaching it. Writing a blog post or an article is one example of teaching, although I didn't think about it in this way until my first post. Turns out, the amount of research and getting to the bottom of how things work is quite impressive when working on an article. As writers, we want to make sure that we fully understand the content covered. As an example, I was writing a post about testing a pretty simple React component. Initially, I thought it'll be quick work to write it up, however, once I got to the task, I realized that I should also be able to explain the reasoning behind my choices, how is one approach different from another, their pros and cons, and so on. This in turn led me to realize that I do not have a full grasp of the ins and outs of everything I was trying to write about, forcing me to go deep into documentation and look for examples of best practices. As a result, I have substantially improved my knowledge of testing React components and was able to share it with others. You don't need to be an expert on a subject to write, the best way to start is to make a quick write-up of a newly learned concept. Additionally, websites like dev.to make it extremely easy to publish, so there's no need to set up your own blog or anything like that. It can also be done in a form of a learning diary and doesn't need to be shared publicly if that's not your thing.
Get good foundations instead of going straight for frameworks
Try answering questions on Stack Overflow
Aspiring software engineers find themselves in quite a privileged position when learning to program as it can be done without a university degree and there are plenty of free resources online. However, this creates issues on its own, such as where to begin, how to stay on track, and what to learn. In this post, I tried to briefly describe my experience and the choices I've made with the hope to make it at least that bit easier for those considering getting into the field.