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.

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.

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

Android

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.

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