What’s the most important skill for a software engineer? According to a study by Li, Kho and Zhu (2015) the most important skill is the ability to learn. The authors of the study examined many thousands of hours of interviews and surveys of software engineers and leaders at Microsoft and identified 53 attributes from which they then drew their conclusions. Their rationale was that great software engineers are focused on continuous improvement and being open-minded. Continuous improvement is driven by both the need to improve the quality and functionality of software over time and the external forces that are driving the market with new technologies, uses and approaches. The software field is continuously changing, and great engineers have to always be learning to keep up. But they have to be open-minded as well, in order to make judicious decisions on new things and what to focus on while avoiding the thought that they already know everything they need to know. Thus the ability to learn is more important than any single learned skill.
The ability to learn is a key skill in today’s economy and society, and the study of the ability to learn is a complex one that starts with intelligence testing for young people and continues throughout different phases of one’s life development. In my experience evaluating one’s ability to learn is one of the “easier” things to do in the recruiting process. Reviewing a candidate’s career for evidence of having learned and applied new skills can be a strong indicator and something that can be confirmed through the interview and reference checking process. It’s important to not only look for the obvious, such as a developer who has learned new programming languages and environments but to look for developers who have learned new patterns, techniques and approaches. Test whether the developer has explored and applied new tools, found new ways to apply reuse (either internally or through open source), implemented new design patterns based upon best practices available in the literature and community for developers. How much does the developer have to have formal training to learn as opposed to learning from peers and available sources?
The key conclusion for recruiting and training is to focus not only on the skills needed for the job at the moment, but whether the candidate has demonstrated the willingness and aptitude to continuously learn which is the foundation of being a great software engineer.
Paul Luo Li, Andrew J. Ko, and Jiamin Zhu. 2015. What makes a great software engineer?. In Proceedings of the 37th International Conference on Software Engineering – Volume 1 (ICSE ’15), Vol. 1. IEEE Press, Piscataway, NJ, USA, 700-710. (http://dl.acm.org/citation.cfm?id=2818839)