My path to a Computer Science PhD

Part of my PhD funding is provided by the LEADS program, which aims to bring lots of interdisciplinary scientists together to tackle sustainability challenges. We recently discussed the increasing importance of programming and machine learning to different scientific disciplines, but also the challenge to becoming fluent in these tools.

When I finished my undergrad, I had essentially 0 programming experience; over the next few months, I self taught enough (python) programming and machine learning to become a machine learning engineer and to eventually start a PhD in computer science.

One of the nice things about machine learning is its openness; there are plenty of free ways to learn about it. The purpose of this post is to document the tools I used to become familiar with software engineering and machine learning in the hope that it might help others looking to learn the same skills.

0. Set up / Google’s introduction to python

Time: a few days

If you haven’t set python up locally, I recommend using conda. A key concept in python is the idea of libraries, which is basically code that other people have written that you want to use. A challenge with this is that libraries may depend on other libraries, and these dependencies can be a nightmare to navigate; conda does this all for you (and provides a python installation if you don’t already have one).

Once you are all set up, Google has a nice python introduction, which helps you get set up with python locally and which introduces you to the python basics. It says it’s for people with “some programming experience” but it’s the first programming I did and I found it super helpful.

1. Project Euler

Time: A few days to weeks

Project Euler is a bunch of math and programming problems. I suggest starting here because it forces you to set up a python environment on your laptop - many online programming courses set up in-browser environments, which is nice but means you can’t keep going by yourself after the class is over.

It also forces some thoughtfulness about how python works, since brute force solutions often won’t work (e.g. when dealing with large numbers).

I used this to learn:

  • Basic (and not so basic) python programming, as well as very common python libraries such as numpy
  • Some fun maths!

2. Machine Learning on Coursera

Time: 61 hours (according to coursera)

Coursera’s machine learning course is the canonical machine learning course. It covers basic machine learning algorithms, and it provides an intuition for exactly what we are trying to do when we use machine learning. For anyone just getting started exploring machine learning, I can’t recommend this course enough.

I used this to learn:

  • What exactly we are doing when applying machine learning algorithms to a dataset
  • Basic (but critical) machine learning concepts (such as the use of a test set to evaluate a model)


Time: More than 2 months, but (as the course highlights) people go from this course to publishing machine learning research’s deep learning for coders is an awesome course for getting caught up on modern deep learning techniques (although - disclaimer - I took it a few years ago, and the course has iterated since then. I expect it is still awesome).

It’s also excellent for picking up an intuition of key design considerations when building a machine learning pipeline (whether or not it involves deep learning).

One reservation I have about this course is its use of the fastai library, which hides away a lot of the boilerplate code necessary when training machine learning models. At least when learning, I found it useful to try and implement as much of the boilerplate as I could, so I reimplemented many projects in pure PyTorch. This meant it took quite a bit longer for me to go through the lessons, but I think it was very helpful to better understand the intricacies of deep learning.

I used this to learn:

  • All about deep learning
  • PyTorch
  • How to parse research papers about machine learning