In 2017, there are a lot of programmers in the world. The talent pool is enormous. As languages evolve and technical education becomes more accessible, a growing number of professionals are either self-taught or converted from another area of expertise. At the same time, computer science curricula in universities are evolving to focus on more industry-relevant skills like web development and machine learning.
I hate to say it, but the skill gap is shrinking in most sub-disciplines of programming. This has had a big impact on the way businesses vet and hire programmers. In brief, the ability to program is no longer the focal point of hiring decisions.
Employers Focus on Communication Skills
The number one skill I look for in candidates in the ability to discuss advanced computational problems with clarity and focus. Including obvious conversational skills like grammar and diction, I look for organization, precision, and abstraction.
- Organization: When writing, frame and group technical concepts in a logical manner. Have a preferred method of recording and updating to-do lists. When speaking, prioritize high-level concepts and understand when low-level concepts are not communicable.
- Precision: When communicating low-level concepts, use literary/documentation devices like static vocabulary, italicized introduction, defined terms, forward definition, exhibit calling, and inline references to explain concept with laser-like precision.
- Abstraction: In general, any programmer should be able to bring any other technical person to a state of understanding regarding his technical problems, even if that person knows nothing about the language, architecture, or toolkit of concern. This skill is a strong correlation with an individual’s ability to troubleshoot problems in unfamiliar environments. This is otherwise known as asking the right questions.
Unlike variance in programming skill, variance in communication skill is huge across any given batch of candidates. Thus, we must solve two problems:
- How do employers pinpoint candidates with the best communication skills?
- How do academic institutions correct for the communication deficit?
Employers: Hire PhD’s Regardless of Background
We have arrived at the meat of my argument:
PhD’s are the only reliable certificates of communication skill.
We hear all of the time about mathematics, physics, and quantitative finance PhD’s invading Silicon Valley. Writers typically make the obvious connection that computer science is merely a familiar problem space that analytic minds just get. I am of the firm belief that these doctorate holders succeed in programming primarily because they possess the communication skills discussed above. I know this because I have observed the same analytic behaviors in doctorate holders from many disparate backgrounds, including physics, psychology, and religious studies.
We did not end up working together for very long, but in the time we collaborated he showed tremendous troubleshooting ability, organizational skill, and clarity of thought. As I have interviewed and worked with other “PhD Converts” for programming jobs, I have observed the same behaviors. PhD’s must learn to think analytically on a very low-level in their respective fields. Thus, I treat almost any PhD as certification of possessing the advanced communication skills desired by tech companies.
Academia: Mimic Liberal Arts Curricula in CS
Colleges and universities can modify their computer science curricula to help compress the skill gap in communication observed among programmers. Currently, I see most curricula concentrate on three distinct areas: general education, general engineering, and computer science. I will focus purely on the computer science portions, which I believe are doing a lot of things right already.
Currently CS curricula cast a wide net within computer science. They typically include intro programming, advanced programming, and follow up with various subjects like networking, algorithms, cryptography, and system administration. This is all fantastic, but I have never seen a course on code documentation, requirements analysis, or technical authorship.
In the same way that mathematics majors take writing courses and foreign languages as part of a liberal arts curriculum, computer science majors should take courses in technical communication as part of an engineering curriculum. No employer would complain if all the CS majors had severe addictions to pydoc, Markdown, and LaTeX.