CRUD-dy Programmers Are the Future!

Wednesday, October 8, 2014

I spent years as a software developer and project manager. Now I'm ready to begin yet another career: fortune teller. That's right. Thanks to my magic crystal ball, I can see into the future and am ready to report back on the state of software engineering. Long story short: the future isn't bright, and it's only going to get worse.

The writer Arthur C. Clark once stated that any sufficiently advanced technology is indistinguishable from magic. Nowhere is this more true than in the field of software engineering. The average project manager, corporate recruiter or even CEO has little understanding of how software is written, designed or evolves. To them, software engineering is simply a black box that takes engineers as input and yields computer code as output.

The lack of insight into the world of software engineering, results in the unfortunate situation that the professionals in charge of hiring lack any means of determining which programmers would be best to hire and which would be best to avoid. As with all things, a lack of information will lead to inefficiencies of an ever-growing sort.

It is of little surprise that those without a reliable methodology for hiring would turn to keyword searches on resumes. After all, it's very hard to evaluate a candidate's problem solving ability via his resume, but an automated search for a trending framework is just so easy! Besides, if programmers are otherwise alike, why not use a list of tool kits and technologies as the deciding factor in hiring?

Unfortunately, markets react to incentives. If corporate policy is to select candidates by toolkit, rather than problem solving ability or knowledge of software engineering concepts, software engineers will change their skill sets. Rather than focusing on fundamental skills with long-term value, they will focus their attentions on learning syntax of the flavor of the month: knowledge with a shelf life shorter than the average bouquet of roses.

The ever-increasing proliferation of for-profit and low-quality hacker schools and self-educated dilettantes are resulting in a generation of programmers with an understanding of syntax but a fundamental lack of knowledge about software engineering. I recently spoke to one senior developer who claimed that it was impossible to create a tree structure in Ruby and another who had no idea what a tree could even be used for! This would be roughly akin to a sailor being unaware the ships could turn or a swordsman not knowing that the "pointy side" should face toward his opponent.

And yet, I can hardly blame any developer for his actions. When corporations focus their hiring policies by keywords, it makes perfect economic sense for them to pursue a keyword-heavy knowledge base. Yet this shift is sure to wind up damaging the future of companies, and the nation as a whole. With the introduction of each new framework, a corporation will find itself with folks who have little to no professional utility until they can be retrained at great expense.

Some types of software are relatively straightforward, involving only the four typical types of operations - create, read, update and delete (CRUD). For this type of development, a merely superficial knowledge of software engineering may not prove completely disastrous, but the industries may be on course to losing the ability to create software that is revolutionary in nature.

The solution is clear. We need to put the hiring of technical staff back into the hands of technical staff. Of course, such a future is unlikely, as long as non-technical folks continue to make hiring decisions. As suggested, by the Shirky Principle, once staff members (be they HR or another nontechnical group) take charge of a problem, they will not be able to imagine a solution that does not involve themselves as the solver.

In the meantime, I'm reading a book on Angular as my book on JQuery continues to gather dust. My books on artificial intelligence? Why bother reading them!