Tips on Becoming a Self-taught Developer

Updated on · 10 min read
Tips on Becoming a Self-taught Developer

Recently, I've been asked more frequently for tips on becoming a self-taught developer, which inspired me to write this post. I'll reflect on my experiences and share what I would do differently.

In this article, I'll provide general advice for those considering or already on the path to becoming self-taught software developers. Although the post focuses on front-end development (since that's my background), most of the advice can apply to software engineering regardless of your area of focus.

I've structured the post as a list of bullet points, in no particular order of importance. Remember, this is based on my personal experience; your journey may (and should) differ depending on your learning preferences and other factors.

The role of artificial intelligence in the future of software development

Before discussing improvement steps, it's essential to address a growing sentiment regarding AI taking over developers' jobs. Questions are increasingly appearing on various forums, wondering if it's still worth pursuing software development, given the power of the latest AI models, such as ChatGPT-4, in writing code.

In my opinion, instead of fearing these advancements, it's crucial to recognize that AI has the potential to boost productivity, enhance learning capabilities, and ultimately lead to more fulfilling and rewarding careers.

For instance, AI-powered tools can assist developers with time-consuming tasks like debugging, testing, and code reviews. By automating these routine tasks, developers can concentrate their energy on more complex and creative aspects of their projects, resulting in more engaging and fulfilling work. If you're looking for ideas on how to utilize ChatGPT for increased developer productivity, I have written about this here: Productivity Benefits of Integrating ChatGPT Into the Front-End Development Process.

Furthermore, it's vital to remember that while AI may change the nature of software development, there will still be a need for developers with unique skills and knowledge. As discussed in Josh Comeau's article The End of Front-End Development, developers must be adaptable and willing to learn new technologies to remain competitive in the job market. By mastering in-demand technologies, developing human-centric skills, and building robust professional networks, aspiring developers can position themselves for success in a rapidly evolving industry.

In summary, although AI will bring changes to the software development industry, there are still many opportunities for skilled developers to thrive. By embracing these advancements and focusing on acquiring unique skills and knowledge, new developers can build successful and fulfilling careers in a constantly evolving field.

Start writing code as soon as you can

Learning to code was my New Year's resolution. However, I didn't write many lines of code for a few months, until I started building my first app. Instead, I spent that time reading various programming books, attempting to build a solid theoretical foundation. Eventually, when I thought I was ready to create a simple app and began writing it, I realized I had no idea how to do it. All the theoretical knowledge about a programming language that seemed solid while reading the books, seemingly evaporated when it came time to apply it in practice.

The thing is, it's easy to feel like you know enough when learning a new topic, only to see that knowledge fall short in practice. It's challenging to internalize all that new information 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 together to build an app. Therefore, my advice is to start writing code as soon as you grasp the basics of a language. 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).

Study the code of an existing project

It's quite normal to struggle with writing your first few apps or websites after completing courses or reading programming books. In that case, I recommend finding a finished project on the same topic and examining how the parts you're having issues with were implemented. 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, followed it along, and incorporated some pieces into my app. Ultimately, I 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 excellent 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 new skills simultaneously while receiving immediate feedback on your progress. I went through Codecademy and freeCodeCamp courses, which have since then 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 valuable addition to your CV.

Get good foundations instead of going straight for frameworks

I've conducted a fair amount of technical interviews, and one thing I've noticed is that many developers, even at a senior level, do not have a solid grasp of the main JavaScript concepts. This is because a lot of them jump straight into using frameworks without first achieving a good understanding of the underlying language. Again, you don't need to be a JavaScript guru before picking up a framework, but if you've been working with React for a while and still cannot explain what a Promise is, something is amiss. It's a good idea to learn enough of the language to be effective with its frameworks before diving into the frameworks themselves, such as React, especially if you are a beginner.

Learn HTML and CSS fundamentals - build a portfolio website

If you're aiming to become a front-end developer, knowing HTML and CSS is a must. Website markup and styling are integral parts of any user-facing web application. You don't need to master all the topics but should know enough to create a basic website. I would even argue that your first project should be a portfolio website, which doesn't require any JavaScript. It can be as simple as just one page with screenshots for each project and a link to both the project and its underlying code (don't worry that you don't have any projects yet; they will come in due course). It is also relatively easy to host a static website on a platform like GitHub Pages.

Building a portfolio website has two essential benefits. Firstly, it's an excellent way to practice HTML and CSS. Secondly, it's one of the best methods to showcase your knowledge without having any practical experience. If you're just entering the field of software engineering and lack work experience to show, having a solid portfolio of projects is a great way to secure a job.

Learn computer science fundamentals

Although deep theoretical knowledge of computer science isn't mandatory for a front-end developer, in my opinion, a solid understanding of its fundamentals can significantly expand your problem-solving abilities and coding proficiency. To gain basic insights into computer science, I recommend taking the highly acclaimed Harvard's CS50 course. This course offers a comprehensive introduction to programming concepts. With weekly assignments that can be quite challenging, you'll have ample opportunities to practice and apply the concepts from lectures and reading materials.

Join a community or find a mentor

Learning to code can feel isolating if you don't have someone to discuss your progress or share new knowledge with. Engaging in learning communities or finding a mentor can provide quick, informal feedback when you're struggling with concepts. Discussing issues and solutions with others is an excellent way to reinforce and expand your knowledge. There's no shortage of communities for new code learners today. I used to participate in the IRC channel for the #learnjavascript subreddit, but it's less active now. Some well-regarded communities include CodeNewbie and freeCodeCamp's forum.

Make coding a daily habit

While all the points mentioned earlier are important, the most critical aspect is making coding a daily habit. Consistency is key; spending one hour every day coding is more effective than a ten-hour session once a week. Even as a professional who codes almost daily, I often need time to familiarize myself with the code I wrote a few weeks ago if I haven't worked on it recently. It's easy to assume you'll remember how everything works, but our brains don't function that way. I've often found myself trying to understand my old code. This is especially true for new learners; you may grasp coding concepts while writing a particular piece of code, but it won't become second nature unless practiced consistently. James Clear has written extensively on building lasting habits, which is a fascinating subject in itself.

Try coding challenges

If you're looking to add some gamification to your learning process, consider trying coding challenges. I recommend Codewars, which offers a vast array of challenges in various programming languages and difficulty levels. They use a progression system based on solving "katas" (a coding challenge) to make the process more engaging. While the platform is excellent for practicing fundamental coding concepts or familiarizing yourself with new syntax, it's essential to balance it with other learning methods.

Read programming books

While I mentioned earlier that focusing too much on reading rather than actively coding was a mistake I made in my learning journey, programming books are still valuable resources. They provide in-depth knowledge of programming concepts and work best when combined with hands-on coding. After trying a new concept or language, I often pick up relevant books to deepen and solidify my understanding. For example, after experimenting with some simple Go code, I read a Go programming book, which significantly enhanced my existing knowledge.

Write blog posts

One of the best ways to learn a topic is to teach it. Writing blog posts or articles is an effective way to reinforce your understanding. As a writer, you'll need to ensure you have a solid grasp of the material, which often involves in-depth research and analyzing different approaches. For example, when I wrote about testing a simple React component, I discovered the importance of understanding the reasoning behind my choices, the pros and cons of various methods, and best practices. This process substantially improved my knowledge and allowed me to share it with others. You don't need to be an expert to start writing; begin by summarizing a newly learned concept. Platforms like dev.to make publishing easy, and you can even create a private learning diary if you prefer.

Answer questions on Stack Overflow

As an optional recommendation for more advanced learners, answering questions on Stack Overflow can be a valuable learning experience. By responding to inquiries related to your area of expertise, you can identify common issues and deepen your understanding of specific concepts. Moreover, helping others resolve their code problems can be gratifying. Stack Overflow can be intimidating for beginners; if that's the case, consider attempting to answer questions without posting your responses, as a learning exercise.

Stay Focused

Programming is a vast field, and even within specific areas like front-end development, the number of topics to learn can be overwhelming. To manage this, create and follow a roadmap, and avoid straying from it. There are also websites like roadmap.sh, with community-created roadmaps for many roles or skills.

When I was learning JavaScript, I discovered many other subjects I wanted to explore (e.g., Node.js, animations with GSAP), which led me to spend a few weeks on a challenging MongoDB course. Although it was interesting, I didn't have the necessary foundational knowledge at the time, and I haven't worked with MongoDB since. In hindsight, I would have been better off focusing on improving my JavaScript skills before tackling databases. Maintaining focus on a specific topic and resisting distractions is crucial in the early stages of learning. Mastering the basics will make it easier to learn other topics later on.

Conclusion

In conclusion, becoming a self-taught developer is an exciting and rewarding journey. It requires dedication, practice, and a willingness to learn from both successes and failures. By following the advice shared in this article, you can set yourself on a path toward a fulfilling career in software development. Remember to stay focused, make coding a daily habit, and embrace the supportive developer community that surrounds you. As you grow and evolve as a developer, continue to share your experiences and knowledge with others, and always stay open to new ideas and technologies. With persistence and passion, you'll find yourself thriving in the ever-evolving world of software development.

References and resources