In this article, I share the learning resources that I have used to teach myself software development, starting with Introduction to Computer Science. I have also included my decision process behind each resource.
In early 2015 I needed to learn how to code in order to write my master’s thesis. I stumbled across this amazing resource:
CS50 – Introduction to Computer Science (2016) Harvard
Online Course at edX
If you have little or no coding experience and you would prefer to undertake something less gruelling I would recommend having a look at Learn how to code with these resources.
I started learning React in early 2018 as I was lucky enough to need it for a project at work.
I have included my recommendations in Learn React with these resources.
After developing a strong base of knowledge in computer science I felt confident enough to start specialising in a language. At the time (late 2015) I decided learning Java would make me the most employable. After getting an internship and then a permanent position as a software engineer I decided to specialise in the language.
I have included my recommendations in Learn Java with these resources.
Before deciding to change careers (late 2015) I did an Android course just for fun. I started building apps in my free time when I started my first permanent job as a software engineer (mid 2016) until I changed to another company in mid 2017.
I have included my recommendations in Learn Android with these resources.
After getting a taste of Android development (mid 2016) I decided it would be a good idea to look at the other side. Afterwards, I decided to pursue Android instead.
I have included my recommendations in Learn iOS with these resources.
For almost every project I have worked on, database knowledge has been required, which is why I decided to complete the following course early 2016.
Intro to SQL (2016) Khan Academy
This is a great introduction to SQL. I personally find Databases and SQL quite boring but it is an important skill to have and Khan Academy makes it very bearable to learn about it.
The following content helped me improve my abilities as a software developer dramatically.
Clean Code (2009) Robert Martin
One of the classics (and for good reason too), this book gets you thinking in the right direction when it comes to designing software that is reusable, maintainable, flexible and scalable. I found the explanation of TDD to be particularly useful. My favourite takeaways were: later = never, comments tend to a lie after a while, unit tests make our code more flexible, write dirty code and then clean it. I found the case studies in the last few chapters a bit difficult to follow and would recommend the Clean Code video series as an alternative.
Clean Code Video Series (2016) Robert Martin
Online video series
After reading Clean Code I can highly recommend watching the video series to make the lessons more concrete, especially the videos on TDD. I skipped the astronomy segments at the beginning of each lesson and the episodes on architecture and BDD.
Clean Coder (2011) Robert Martin
This book gives you a great insight into the Bob Martin’s professional life as a software engineer and is a fun book to read. Full of handy tips for a career in software development.
Software Engineering Radio
This podcast gives great insight into software engineering. Some topics that I have enjoyed include legacy code, becoming a tech lead and working effectively with unit tests. Episodes come out approximately once a month so it easy to keep up with this one!
97 things every programmer should know (2010) Kevlin Henney
I enjoyed reading this book and although I didn’t I agree with all of the tips, some of them were really useful. My favourites include: The boy scout rule, Fulfil your ambitions with open source, Hard work does not pay off, Keep the build clean, Learn foreign languages, Make the invisible more visible, Pair program and feel the flow, Reinvent the wheel often. If some of that sounds interesting to you, you should get the book!
I started learning Vim before I really knew how to program (mid 2015). I saw the advantage of using it straight away and used it whilst writing the code for my Master’s Thesis.
Practical Vim (2012) Drew Niel
I use Vim as a text editor (also in IDEs) whenever I can as it increases my efficiency dramatically.
Practical Vim is a great resource to obtain in-depth knowledge about the language.
I would recommend doing the Vim tutorial (which can be accessed by typing
vimtutor in a terminal)
before starting with this book though.
Before deciding to change careers (late 2015) I considered completing a degree in computer science, which requires a strong base in Mathematics. I thought Khan Academy would help me refresh that knowledge. Instead, they helped me master it!