In this article, I share the learning resources I have used to teach myself software development starting with the fundamentals. I have also included my decision process behind each resource and I constantly update the content.
Last updated June 4th, 2017.
CS50 – Introduction to Computer Science (Harvard, 2016)
Online Course at edX
Java and Object Orientated Programming
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 Java developer I decided to specialise in the language.
Introduction to Programming in Java (MIT, 2010)
Online Course at MIT OpenCourseWare
This course offers a good introduction to object orientated programming in Java. It is a little bit dry as there are no videos but I would still recommend it to anyone looking for a decent introduction to Java. In order to consolidate my knowledge, I completed my own project called GermanVerbConjugator.
Head First Java (2005) K. Sierra and B. Bates
I would highly recommend this book for learning about object orientated principles and Java. This is not a book for complete beginners as the reader is expected to have a general idea of programming concepts. I would even recommend getting to know Java a little bit beforehand. The one thing I felt was missing from this book were additional practice problems and a revised edition would have also been nice as some of the concepts are outdated. I would recommend skipping chapters 12, 13, 15 and 18.
Head First Design Patterns (2014) E. Freeman et al.
This is a great book for learning about design patterns, design principles and object orientated concepts. Reading Head First Java beforehand is not required but experience in object orientated programming is required to get the most out of the book. What I really liked are the concrete examples of each pattern and also how the authors weaved important design principles into each pattern. I have a repository on GitHub with my own examples of design patterns with the aim to consolidate what I have learned from this book.
Effective Java (2006) Joshua Bloch
This book is a must read for all Java developers because it teaches you how you should be using Java and helps you to become a better object orientated programmer. This book is not for beginners and it is better to already have experience with design patterns. The book is sometimes a little out of date but almost all of the concepts are still relevant. I found some of the examples a little bit too abstract, which is why I created my own on GitHub.
Before even deciding to change careers (late 2015) I did an Android course just for fun. It wasn’t until I started working as a software engineer (mid 2016) that I started building Android apps in my spare time.
Android Development for Beginners (Udacity, 2015)
This is a very fun course with great resources to get you started in Android app development. No programming experience is required so the class truly is for beginners. Since I completed the course Udacity has added many courses that follow on from this one.
Developing Android Apps (Udacity, 2016)
I recommend this course to anyone looking to deepen his or her knowledge in Android app development. It is fun and highly relevant. Prior experience with Java and SQL is required to get the most out of this course. Students are shown how to develop various smaller apps and one large weather app (all on GitHub), which is used entirely throughout the course. Each app is accompanied by TODOs and completed over many iterations that clarify each step. My advice would be to delete the TODOs and try to make each app on your own as I found it a bit too easy at times. When you get stuck you can always have a look at the TODOs again or even the solution, which is given at every step of the way. The apps, combined with regular quizzes, consolidate the video content really well. The final project was also really rewarding for me as I needed to revisit the course content regularly, which greatly improved my understanding.
Gradle for Android And Java (Udacity, 2016)
This is another great course from Udacity. You start off learning the Groovy language and then move on to learning how to use Gradle for Java and Android. Prior knowledge of the command line is required. The content has been kept up to date with newer Gradle versions and the exercises are highly relevant. I especially enjoyed learning about creating projects with multiple modules and implementing the backend using Google’s Cloud Platform in the final project.
This is a fantastic podcast that I highly recommend. As they say on their website they are helping developers to “go from good to amazing” and I would agree with that quote. Approximately one podcast is released per week and they go for about an hour. Included are interviews with world-renowned Android developers, best practices in Java, tips and tricks to work more efficiently and so on. Some experience is required to get the most out of the podcast, although they sometimes cover topics that require less prior knowledge than others.
After getting a taste of Android development (mid 2016) I decided it would be a good idea to look at the other side. After completing an introductory course I found the impression was not substantial enough and decided to do a follow-up course (late 2016). After completing the course I decided to specialise in Android instead.
Intro to iOS Development with Swift (Udacity, 2016)
This is a fun course for anyone getting started with iOS development. It must have taken me less than 10 hours to complete so it is definitely doable within a day. The steps for the final project are also given but as usual, I would recommend trying the project on your own first and figuring out where the gaps are in your knowledge. Udacity says prior programming experience is required, which is probably true but the course really is very easy.
UIKit Fundamentals (Udacity, 2016)
UIKit Fundamentals is a great course for learning about the iOS Interface Library and also follows on from “Intro to iOS Development with Swift”. The suggested timeline for the course is two months but I would say it is possible to get done in six days (one per lesson) including the final project. I really liked how there are many different small projects, which were used to consolidate the concepts taught in the course. What I found nice is that some parts of the final project are supported with steps. So you can try it on your own, figure out where the gaps in your knowledge are, and then go through the steps focusing on what you missed. However, not everything is revealed, as some additional study outside of the course is necessary to fulfil the requirements.
Node.js Tutorials for Beginners (thenewboston, 2015)
These tutorials offer a good introduction to node.js. There are 22 videos, which are approximately 10 minutes each. You learn a bit about the syntax and setting up a basic web server as well as tips and tricks from an experienced and charismatic developer.
For almost every project I have worked on, database knowledge has been required, which is why I decided to do the following course early/mid 2016.
Intro to SQL (Khan Academy, 2016)
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.
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 salary negotiation, 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.
I loved maths in school (even though I probably didn’t realise it back then, as it wasn’t cool to love maths, and probably still isn’t!) and I had pretty much forgotten all of it by the time I finished studying. At the time (late 2015) I was thinking about completing an accelerated degree in Computer Science, which requires a strong base of knowledge in Mathematics. (In German, Computer Science = Informatik which is a combination of Information + Mathematik.) Since I find it so important to develop a good base I decided to refresh my knowledge of calculus.
Differential Calculus (Khan Academy, 2015)
Khan Academy is probably the best place out there to learn about calculus.
Integral Calculus (Khan Academy, 2015)
It really is.
I am a big fan of having the right tools and becoming more effective at attaining my goals. The following learning material has no prerequisites and can be consumed at any time.
Learning How To Learn (UCSD, 2016)
Online Course at Coursera
This is one of the best courses out there and it has helped me to become a more effective learner. The course is very concise with less than 10 hours of content and I would highly recommend it to anyone wanting to improve his or her productivity. The most important thing I learnt from this course is that taking breaks can be extremely helpful when trying to solve a difficult problem.
The Tim Ferriss Show
I love listening to this podcast and I have been able to apply a lot of the techniques discussed. Episodes are typically released weekly and take about two hours. “Prior guests include Arnold Schwarzenegger, Jamie Foxx, Edward Norton, Tony Robbins, Maria Popova, Peter Thiel, Marc Andreessen, Amanda Palmer, Malcolm Gladwell, Rick Rubin, Reid Hoffman, Jon Favreau, Whitney Cummings, Mike Shinoda, and dozens more.”
You might also l like: