Recently I outlined a short series of posts I’ll be writing about how I landed a job in autonomous vehicles.
The first part of that equation was coursework.
There are so many free online courses to take!
My background is that I have a pretty solid foundation in software engineering, including an undergraduate degree in computer science. But most recently my programming has been on the web, not so much in the machine learning and embedded systems areas that dominate vehicle software.
Here are the courses I took:
Artificial Intelligence for Robotics (Udacity): This is a terrific and super-fun introduction into self-driving cars by Sebastian Thrun. Thrun is both the founder of Udacity and also the founder of Google’s self-driving car project and also a former professor at Stanford. Taking the class is like being in the presence of greatness.
Machine Learning (Coursera): This class is really broad, covering supervised and unsupervised learning algorithms, as well as optimization and tuning. The teacher is Andrew Ng, who is like Sebastian Thrun’s mirror image — Stanford professor, then founder of Coursera, now head of Baidu’s self-driving car program.
Control of Mobile Robots (Coursera): This course is taught through Coursera’s partnership with Georgia Tech, and covers the basics of control theory. It was especially helpful for me, as a computer science undergrad with minimal background in mechanical engineering.
Deep Learning (Udacity): This is a relatively short overview of the theory behind deep neural networks, with some practical programming exercises.
Deep Learning (NVIDIA): In practice, it’s possible to get a lot of value out of deep neural networks with only a thin understanding of how DNNs actually work. That’s because practitioners can get a lot of mileage out of deep learning frameworks like Caffe, Theano, and Torch. This course provides an overview of each framework, along with programming exercises.
Intro to Parallel Programming with CUDA (Udacity): Deep learning plays a prominent role in autonomous software, and deep learning is itself enabled by the massive parallelization that GPUs offer. CUDA is the parallel programming framework created by NVIDIA, and this course provides great background into how parallel programming works.
Underactuated Robotics (edX): This was by far the most math-heavy of the courses I took, owing to its target audience — MIT upperclassmen. I confess that due to some family obligations I only finished about 2/3 of the course. But the course provides terrific exercises in how to model robots in the physical world. It also forced me to brush up on my advanced math.
All of these are fairly advanced courses. Some of the programming exercises are in C++, some in Python, many in Matlab.
For somebody with minimal software engineering background, I might recommend starting with some more introductory computer science and linear algebra courses.
But for somebody with my background — that is to say, a strong software engineer with no real robotics experience, I found these classes to be terrific.