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.
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.
I have included my recommendations in Learn Java with these resources.
Before even 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. 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: