Learning material – software development

In this article, I share the learning resources that I have used to teach myself software development, starting with the fundamentals. I have also included my decision process behind each resource.


CS50 – Introduction to Computer Science (Harvard, 2016)
Online Course at edX

Having a strong understanding of the fundamentals is extremely important when learning something new. This online course at edX blew away my expectations and had a huge influence on changing my career. Most importantly, it really taught me how to think like a Computer Scientist. CS50 is where I started and I would highly recommend it to anyone. There are weekly assignments, which take many hours to complete and consolidate the material really well. Topics covered include abstraction, algorithms, data structures, encapsulation, resource management, security, and web development. Languages include C, PHP, HTML, CSS, SQL and JavaScript. (In 2017 Machine Learning was added and Python had replaced PHP.)


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 specialise in Android instead.

I have included my recommendations in Learn iOS with these resources.


Early 2017, it was about time for me to start learning another language and because JavaScript is a first class language I decided to start learning it.

Head First JavaScript Programming (2014) Freeman and Robson

As soon as saw that this book was written by the same authors as Head First Design Patterns it was an obvious choice for me to start learning JavaScript. It is written so well that an introductory course in computer science is enough prior knowledge to understand this book fully. In my case I already knew Java, so I felt I was able to grasp the concepts quite quickly. Minimal knowledge of HTML and CSS is also required, but that is quite easy to pick up if you haven’t seen it before (eg. from w3schools). By the end of the book “you are well on your way to becoming a JavaScript expert” according to the authors and that seems like an honest statement to me!

Free Code Camp
Tutorials and projects

Free Code Camp has really helped to consolidate my JavaScript skills. On my FCC profile, you can see everything that I have completed. I found the projects to be particularly useful.

JavaScript Testing (Udacity)
Online Course

If you are not familiar with testing in JS (with Jasmine) or how to do TDD, this course offers a great introduction.

ES6 – JavaScript Improved (Udacity)
Online Course

This is by far the easiest and best way to learn  ECMAScript 6/ ES6/ ECMAScript 2015 (or whatever it’s called) that I have encountered. This is considered an advanced course by Udacity standards, which means you need to have some experience with JavaScript already (like the resources above!). I highly recommend this course to anyone who is looking to get the most out of JS and/or considering learning about Angular or React. The course took me around 8 hours to complete.


For almost every project I have worked on, database knowledge has been required, which is why I decided to complete the following course early/mid 2016.

Intro to SQL (Khan Academy, 2016)
Online Course

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.

Software Development

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.

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!


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.


Differential Calculus and Integral Calculus  (Khan Academy, 2015)
Online Course

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!


Before you go… If you enjoyed this article and would like to be notified when the next article is ready, be sure to click the blue follow button on the right (or at the bottom) and enter your email. You can also follow me on:

You might also like:

8 thoughts on “Learning material – software development

  1. Looks like I will be following in your footsteps but can you discuss how you got your first internship position? Did you know any java before landing the intern position? If so, how much of it. And so many many. Also after cs50, can I move on to java immediately?


    1. Hey, that sounds great! I had just finished Introduction to Programming in Java and while I was doing the internship I started reading Head First Java. After CS50 it’s definitely possible to move on to Java immediately. Have you had a look at How I changed careers? That’s where I discuss how I got the position.


  2. Hi, I’m working in a different world but I wanted for years to change my job and programming appeals me a lot. I’m 31 and I don’t have much time in my day. Do you think I can really do it?


    1. Not quite. I started each topic for the first time in this order: 1. Fundamentals, Maths and Vim, 2. Java and Databases, 3. Android and iOs, 4. JavaScript. The rest I did in between. I think it’s important to start with the fundamentals and then you can choose any direction after that.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s