Learning material – software development

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.

Fundamentals

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 course 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.)

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
Textbook

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.
Textbook

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
Textbook

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.

Android

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)
Online Course

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)
Online Course

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)
Online Course

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.

Fragmented
Podcast

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.

iOS

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)
Online Course

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)
Online Course

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.

JavaScript

Early 2017 it was about time for me to start learning another language and because “ThoughtWorks believes JavaScript deserves to be treated as a first class language” I decided to learn JavaScript.

Head First JavaScript Programming (2014) E. Freeman and E. Robson.
Textbook

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. The approximately 700-page book did not disappoint! 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). Especially interesting is the detailed explanation on closures and examples of how JavaScript differs from other object orientated programming languages. 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! In order to consolidate what I learnt, I completed the Random Quote Machine, which is part of the intermediate front end development projects at Free Code Camp.

 

Node.js Tutorials for Beginners (thenewboston, 2015)
Tutorials

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.

Databases

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)
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
Textbook

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
Textbook

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
Podcast

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!

Vim

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
Textbook

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.

Mathematics

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)
Online Course

Khan Academy is probably the best place out there to learn about calculus.

Integral Calculus (Khan Academy, 2015)
Online Course

It really is.

General

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
Podcast

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:

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?

    Like

    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.

      Like

  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?

    Like

    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.

      Like

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