The Programmers Shall Always Be With You
Every few weeks, someone, somewhere, declares that programming is near its end-of-life: it’s a niche headed to extinction, a remnant soon to be left behind, a lifestyle whose time has almost passed.
This is false.
I don’t make the claim as either good news or bad. There are plenty of liabilities in programming as a profession; people who want to be discouraged about its prospects have my permission to indulge their attitude. Don’t think, though, that a social need for a cadre of individuals who focus on automation, abstraction, analysis, and computation will evaporate soon.
Leave aside for now the million-or-so puerile territorial battles over language/IDE/OS/keyboard/… More sophisticated forms of the argument against programming take a couple of forms. On one side, the claim is that sufficiently-advanced artificial intelligence will take over programming from humans. I don’t doubt this; Vinge’s Singularity is logically compelling. I doubt that it’s germane to this discussion, though, because, at this level, it also eliminates human requirements from computing: the machines are simply in charge. Up to that point, though, I expect humans to continue to best machines at decoding the requirements expressed by other humans, that is, the hardest part of programming.
The dual argument about programming workflow is even older, and more immediately applicable in today’s environment. This claim usually appears as a variation on, “there’ll soon be no need for programmers, because domain experts will simply tell the computer what they need in a high-level language.”
Yes, in the sense that it’s certainly feasible for human society to make use of computers in the future without ever again writing a line of COBOL or Ruby or any other specific coding language. Do without programming languages, programming and programmers entirely, though? That will not happen.
The breakdown occurs in the vicinity of “simply” in “… domain experts will simply tell the computer …” Programmers’ endless discussions of the details of syntax are a poor guide to the true value of programming. Stylistic variations like functional vs. imperatives are secondary; our real social role is to analyze systematically and diligently what the domain experts say. In principle, yes, domain experts can express their own requirements and models. In any practical application, however, that would mean that physicians and salesmen and plumbers would spend their time thinking through the vagaries of timezone adjustment, or how to sort by last name for individuals whose last names are in an unfamiliar encoding, or which parts of ACID to give up to achieve adequate performance. The basic physics of computing devices is another necessity for effective programming that holds little interest for accountants or advertisers.
We can agree not to call it “programming”, if we choose. Whether it’s “logic” or “analysis” or “coding”, though, there is a body of knowledge and habits that is essential for translating between human affairs and digital automation, and it’s too large for domain experts to acquire at reasonable costs. However labeled, programmers will be busy for years to come.