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 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. online course 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 lying around. Velodyne I’ve been able to learn about LIDAR at Auro by joining the 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. company Some other ways to learn about this technology are working on open source projects like that share their point cloud recordings and give you tools to start working with the data. In addition, , if the goes through or takes off, you should be able to get super cheap ($50–250) LIDAR pucks for doing homebrew projects. Autoware Velodyne factory solid state LIDAR 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 . 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. AI and Robotics 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 (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 . BMW has a that explains why they chose ROS for their autonomous vehicle R&D while also highlighting some of its limitations for a production use case. ROS AUTOSAR great presentation 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 . 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. ROS tutorials