Building autonomous vehicles is a challenging task that combines a wide range of engineering and computer science disciplines. In order to make contributions to a team in the self-driving domain, you have to constantly be learning and exploring new technologies. The biggest asset you can acquire is a relentless curiosity and strong self-discipline for solving hard problems.

That said, companies choose specific technologies and techniques to build their systems and often prefer candidates who already have those experiences and skills. I analyzed the job postings from several self-driving car companies and compiled a spreadsheet of the technologies and disciplines that are mentioned in the postings. This analysis is intended to give a general sense of the what companies are looking for. It’s not a comprehensive assessment of what they value, but it can serve as a guide for those trying to get enough experience to interview with self driving engineering teams. I focused on specific skills/technologies like OpenCV and SLAM rather than broad disciplines like Computer Vision or Robotics.

Self-driving skills by mentions in job postings

C++

The one constant in all of the postings is that experience with programming in C++ is a highly sought attribute for self-driving companies. Since performance is so vital for any code running on a real time system, it’s necessary to use a language that can be compiled to machine code for speed.

The good news for prospective self-driving car engineers is that out of all the listed responsibilities, basic C++ experience is one of the easiest to acquire. Google has pretty good online course about it. Udacity is working on a great C++ course of their own that some other students and I are beta testing. It should be available to the public soon.

The best way I’ve found to learn a new language is choosing a basic project and implementing it in that language. If you have a background in an object oriented language like Java, but haven’t used C or other procedural languages, this will force you to learn new concepts like pointers and destructors. This is one of those “hours to learn, lifetime to master” skills where completing a single C++ project after having already done lots of other programming will make a big difference even though you’ll still have tons to learn.

LIDAR

Velodyne LIDAR mounted on Auro autonomous shuttle

One of the most challenging self-driving engineer skills to gain experience with is LIDAR. Unless you’re independently wealthy or working in a university research lab, you probably don’t have a Velodyne lying around.

I’ve been able to learn about LIDAR at Auro by joining the company to help with projects that fit my experience (managing data, reporting systems, and mobile apps) and then learning everything I could about LIDAR and point cloud operations in my spare time.

Some other ways to learn about this technology are working on open source projects like Autoware that share their point cloud recordings and give you tools to start working with the data. In addition, , if the Velodyne factory goes through or solid state LIDAR takes off, you should be able to get super cheap ($50–250) LIDAR pucks for doing homebrew projects.

Sensor Fusion/SLAM

Demo of Dibotics SLAM algorithm

Experience with core robotics techniques like sensor fusion and SLAM (simultaneous localization and mapping) is something that every company values. Many robotics engineers have spent decades mastering these techniques in grad school labs. While it’s not realistic to expect immediate mastery of them, you can acquire a basic understanding that might get you on a team by taking free online courses like AI and Robotics. If you’re able to take that knowledge and implement it on a homebrew robot or contribute to an open source self-driving project, teams will be lining up to bring you on.

ROS

Super unnecessary chart

ROS (robot operating system) is a framework for writing robot software. It includes lots of libraries and system organization tools. While many of the job postings do not mention ROS (including Auro’s post), each of the companies likely use a reliable, distributed architecture that bears some resemblance to ROS. Vehicle manufacturers often ensure that their systems adhere to standards like AUTOSAR. BMW has a great presentation that explains why they chose ROS for their autonomous vehicle R&D while also highlighting some of its limitations for a production use case.

It is very valuable to have experience working with modular systems, and ROS is a great open source tool for gaining that experience with the specific application of robotics. I highly recommend going through the ROS tutorials. They’ve not only helped me to understand ROS specifically, but also the type of architecture that’s necessary to keep a robotics system organized and fault tolerant.