Designing my Own Curriculum for Self-Learning

Posted on Thu 14 May 2020 in learning

After deciding to pursue a degree in Artificial Intelligence, and with my never-ending list of things I would like to learn, I resolved to teach myself using online resources. This is a first draft of the courses and resources I plan to use, it includes a variety of subjecs from basic to advance to get started in a myriad of topics.

My Goals

  • Explore new fields: Probably my main reason for self-study. The world of Computer Science is full of exciting topics, some of which I am curious about, like Deep Learning applied to Medicine, Bioinformatics, Functional Programming, MLOps.
  • Bring value to my current job: Improving my knowledge in Python and SQL, or getting started with AIOps.
  • Improve my toolkit: Polishing my skills with vim, awk, bash, etc.

Maths

Courses:
[x] Data Science Math Skills by Duke University

Python

Courses:
[x] Data Collection and Processing with Python by University of Michigan
[x] Python Classes and Inheritance by University of Michigan
[ ] Python Project: pillow, tesseract, and opencv by University of Michigan
[ ] Build a Data Science Web App with Streamlit and Python by rhyme

Artificial Intelligence

Courses:
[x] AI for Everyone by deeplearning.ai
[ ] Intro to Machine Learning with PyTorch by Udacity
[ ] AI for Medical Diagnosis by deeplearning.ai
[ ] AI for Medical Prognosis by deeplearning.ai
[ ] AI for Medical Treatment by deeplearning.ai
[ ] Practical Deep Learning for Coders by fast.ai
[ ] Neural Networks and Deep Learning by deeplearning.ai
[ ] Machine Learning by Stanford University

Books:
[ ] Neural Networks and Deep Learning by Michael Nielsen
[ ] The Hundred-Page Machine Learning Book by Andriy Burkov
[ ] Artificial Intelligence, A Modern Approach by Stuart Russell and Peter Norvig
[ ] Deep Medicine by Eric Topol

Videos:
[x] Introduction to Neural Networks in Python (what you need to know) | Tensorflow/Keras by Keith Galli

Data Engineering

[ ] Google Cloud Platform Big Data and Machine Learning Fundamentals by Google Cloud
[ ] Modernizing Data Lakes and Data Warehouses with GCP by Google Cloud
[ ] Building Batch Data Pipelines on GCP by Google Cloud
[ ] Building Resilient Streaming Analytics Systems on GCP by Google Cloud
[ ] Smart Analytics, Machine Learning, and AI on GCP by Google Cloud
[ ] Preparing for the Google Cloud Professional Data Engineer Exam by Google Cloud

Functional Programming

Courses:
[ ] Introduction to Functional Programming in OCaml by Université Paris Diderot

Books:
[ ] Structure and Interpretation of Computer Programs by Harold Abelson, Gerald Jay Sussman, Julie Sussman

Research

Courses:
[x] How to Write and Publish a Scientific Paper (Project-Centered Course) by École Polytechnique

Books:
[ ] Reinventing Discovery: The New Era of Networked Science by Michael Nielsen

Misc

Courses:
[ ] Mountains 101 by University of Alberta
[ ] Learning How to Learn: Powerful mental tools to help you master tough subjects by McMaster University & University of California San Diego

Books:
[x] It Doesn't Have to Be Crazy at Work by Jason Fried and David Heinemeier Hansson

How I keep track?

I tried to tackle courses and books one by one, from start to finish, but this strategy didn't work very well for me. What I do now instead is try to mix different resources, I found that sometimes they reinforce each other and I can learn better. For example, Michael Nielsen's 'NN and DL' book is a great complement for the fast.ai course. And both have common topics with any other Machine Learning or Deep Learning course. It is also a good way to avoid getting stuck or getting bored.

Another method I use is splitting courses or book chapters in small sessions or projects of ~1-3 hours. In this way I have more manageable chunks of work and I am more willing to start something new. This also helps with the previous step of combining different resources.

You can use whatever you want to keep track of your progress, a simple notebook is as good as the most complex software. Personally, I use Zotero to capture interesting content, and Trello to have a quick overview of my progress, check what is pending and easily find something to work on next. My workflow is quite simple:

  1. Every time I find interesting content, I added either to my Zotero library or directly to my 'Backlog' in Trello.
  2. Then I create small pieces of work based on the resources from step 1, and put them in the 'To Do' column. Ideally they should take between 1 and 3 hours to finish. If it takes longer, chances are that I will not pick the task soon and will be in 'To Do' for a long time.
  3. Now I just have to pick an item from 'To Do', transition it to 'In Progress', work on it and finally move it to 'Done' (and celebrate!)

My Learning Board