Gap between deep learning students and experienced engineers
Although hundreds of hundreds of students (the majority of which are bachelors and masters) graduate from CS or Machine Learning departments every year, although the online deep learning courses from Coursera, Udacity, Fast.ai were taken by millions, we keep hearing that companies have difficulties to find AI talents. There are similar reports on AI talent shortage from Bloomberg, Forbes, and many other places. It seems to me that fresh college students may face a more and more challenging job market, while experienced ML engineers will be more and more popular.
Why are fresh graduates often considered as “inexperienced”?
Well, college studies do bring quite a lot of benefits. Most importantly, a good student has bread knowledge to learn new things and know the context to communicate with his/her colleagues. Some star students will grow into great ML engineers in a good environment (Joel Spolsky‘s blog gives great suggestions on how to hire such).
But most college students miss the experiences of following: Coordinating collaboration in a team; Developing new products; Maintaining or upgrading old software. When I was a college teacher, I wish my students could practice more in these areas. Let me explain one by one.
- Collaboration in a team with 5–10 people or more.
Although students often collaborate on a course project or a paper, the collaboration is either of a short period or between few people (less than 3). Students are used to working on their own, and their codes are usually only for them to run and to revise. How to share the work between different groups? How to motivate others to make new efforts? More technically, how to change your code without breaking the whole system? What are good software engineering practices in a big team? It will be quite impressive if a student can answer these questions in an interview!
2. Developing new products.
A sad fact of computer science education: many college students with CS major have not written enough codes. People often ignore this. Thanks to the blessing of convenient tools including Tensorflow and Pytorch, one can quickly learn how to classify hand-written digits, or to learn to generate images using GAN. However, it takes longer to how to code a solution for a new problem. I always encourage young students to write a new app to solve their own problem, or a service to help their friends or family members. Such new product development experience is valuable for ML engineers or entrepreneurs.
3. Maintaining or upgrading old software/services
A nice thing about working on course projects or research projects is that students can start from fresh. They can literarily write anything from zero. When they need some external libraries, they grab a snapshot of a particular version and pay little attention to forwarding and backward compatibility. However, work in companies is quite different. We need to maintain old libraries and endure heavy dependencies while trying to reduce the impact to external customers as little as possible. Note that customers are not soft engineers, and they will not care whether you have upgraded from python to C++, but they will be angry if their service returns different results or their favorite recommendation changes behavior. Many deep learning algorithms rely on tons of parameters, and we must be careful that tuning the model will not bring harmful consequence in some extreme cases. Sometimes a better algorithm, in theory, may not be accepted by customers, which students often have a hard time to understand that.
To summarize, at least in the near future, our world will not be dominated by pure AI algorithms. AI models are part of the software. ML engineers are part of the team of software developers. I believe college students with both deep learning knowledge and software engineering experience will be attractive in the job market.