As a self-taught developer, it's important to understand and fill knowledge gaps around software principles that Computer Science graduates have been taught at university. Here are some of the resources I've found most valuable.
I’m an Android Engineer at FarFetch, but my background isn’t in Computer Science. I studied Biomedical Engineering and fell into software engineering after coding during my Master’s project.
Even though these two fields have some programming and mathematics in common, I felt I had some knowledge gaps, specifically around design patterns and software principles like SOLID or GRASP.
I used a number of resources to help me fill these knowledge gaps. Here are the ones I found most useful, and how they helped me to become a better software engineer.
Head First Design Patterns
Who it’s for: All Java engineers
What it’s about: Head First Design Patterns by Eric Freeman and Elisabeth Robson helped me get familiar with the most important design patterns, such as Singleton, Decorator and Strategy. The book, by Eric Freeman and Elisabeth Robson, is very much not a reference book. Rather, it’s a guiding book that walks you through the different types of design patterns, and where to apply them.
This book contains multiple examples and exercises for one to get familiar with the most important design patterns.
Why I found it useful: When pivoting to software development, I felt that my approach to problems was not optimal. My solutions weren’t scalable or maintainable. Eventually, a co-worker introduced me to design patterns—reusable solutions to commonly occurring problems.
It’s quite rare to have a problem that a textbook can solve, but having a solid theoretical foundation has helped me work quicker and smarter. After going through the book I noticed an improvement in how I approached solutions, they became more scalable and easily maintainable once I could see the design patterns.
Similar useful resources:
- Complementary with the book, I found it helpful to follow YouTuber Christopher Okhravi's playlist on Design Patterns.
- A good alternative option for readers that prefer reference books is Design Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma.
Head First Kotlin
Who it’s for: All Kotlin engineers
What it’s about: Head First Kotlin by Dawn and David Griffiths follows the same hands-on approach as the Head First Design Patterns book. It was written in a way that allows inexperienced engineers to learn Kotlin easily, and more experienced engineers to still learn more about the vast Kotlin Standard Library.
It guides the reader from language basics such as variables and functions, to more complex topics like high-order functions with interactive, fun and easy-to-grasp examples that exponentiate the learning experience.
Why I found it useful: When I first started working in the Android industry, Kotlin was already a must. At that point, I had no contact with the language. This book helped me to get to grips with the language as a Kotlin beginner and enabled me to build on that foundation and solidify my knowledge as an intermediate Android engineer.
Effective Kotlin: Best practices
Who it’s for: All Kotlin engineers
What it’s about: Effective Kotlin: Best practices by Marcin Moskala is great! It’s a great book to learn more about Kotlin’s Standard Library and about the language’s best practices.
Why I found it useful: Knowing a language’s best practices is very useful because it improves the overall quality of your work and the code base health of your projects.
It’s especially important if you want to contribute to Android Open Source projects since these projects usually require contributors to follow best practices.
Another useful Kotlin resource: While developing there are pieces of code that can be tested in isolation. We should embrace the opportunity not to have to compile the entire app every single time to test it. Online compilers such as this Kotlin compiler are very useful on these types of occasions.
Soft Skills Engineering
Who it’s for: All software engineers
What it’s about: Soft Skills Engineering (hosted by Dave Smith and Jamison Dance) is a very interesting, fun and relaxing podcast that discusses issues related to soft skills in software engineering environments. In the words of the hosts, “It takes more than great code to be a great engineer”.
You can submit your own non-technical questions, and Jamison Dance and Dave Smith will possibly answer the question on the podcast.
Why I found it useful: Knowing how to maintain healthy relationships with teammates, how to negotiate salaries, and what to look for in a company, are among a set of soft skills that positively impact the career of a software engineer.
This podcast has helped improve my relationship with teammates and improved the quality of and my attitude towards code reviews.
The Art of Code Review
Who it’s for: All software engineers
What it’s about: The Art of Code Review by Bharat Mane explains how to give positive, constructive feedback as a reviewer. I learned that it’s important to point out the good stuff and to speak as a collective rather than as an individual to show we’re all on the same team. I also learned how useful it is to refer to known principles and practices such as SOLID or DRY whenever possible to justify changes and aid learning.
The Art of Code Review also covers how to make the most out of tools such as SonarLint and SonarQube to assist with spotting bugs.
Why I found it useful: The quality assurance gate that is code review is very important product-wise, but can also be a possible friction point between team members. It is crucial to maintain healthy interactions so that all parties involved can take the most out of this process.
This was one of the articles that helped me have a positive and engaging attitude while reviewing and being reviewed.
There is no such thing as reading too much on how to interact with team members on code review!
These resources have been really useful for me as a self-taught developer to strengthen my theoretical knowledge, and I hope they help you too!
Related Resources:
- How I Discover and Learn from Books
- How Going Back to the Basics Can Broaden Your Horizons as a Dev
- Recommended Reading on Software Principles and Patterns from Leaders at Disney Streaming, GitLab, and Co.
- Fighting the Imposter Syndrome: Lessons from a Self-Taught Developer
- Kotlin Developer Salary Trends in South Africa
Rafael Ramos is the co-founder of Neroes and an Android Engineer currently working for one of the largest online luxury fashion retail platforms. He always works towards process optimisation to allow users to receive more with less effort.
You can check out more of his work here.