Don’t Become a Computer Programmer

That was the advice of my high school chemistry teacher. It was fall of 1993. I just started my sophomore year after spending the summer learning the C programming language, furthering a journey that started all the back in second grade when I got hooked on BASIC.

That day, I brought in a floppy containing a program I wrote that reproduced some of the visual effects from what’s now considered old school graphics demos. I popped it into a computer in the chemistry classroom during a free period and showed it off. My classmates shared praise. As did my chemistry teacher. Then he gave the aforementioned advice.

It sounds like horrible advice. But he justified it. He explained that he graduated college into a changing world. The first generation of microcomputers became available in the mid-1970s. And they were readily adopted by scientific institutions. Unfortunately, they were so new that software was not available for doing common tasks. This forced him to take programming classes to record, analyze, and plot data from scientific instruments.

However, over the next few years, he experienced the rise of spreadsheets and other software that rendered his programming skills obsolete. He explained that during the early years, each new software version was a drastic improvement over the last. But as time went on, things petered out. “Do we really need yet another version of a word processor?” he asked to make his point. He prognosticated that soon all the software that typical users need will plateau. And that will have a major impact on the programming jobs market.

Furthermore, he said, you no longer need to be an assembly language wizard to write powerful software because the speed, memory, and disk space of computers doubles every eighteen months. Soon, even poorly written code will run fast. This means, he predicted, easy-to-learn scripting and drag-and-drop interfaces will empower users with abilities that currently require professional coders, forcing them out of the field.

He told me, if I continued to follow my passion, I’d graduate college into obsolescence.

I ignored his advice. And I’ve coded professionally and for fun for the thirty years since.

But why was he so off the mark? My chemistry teacher experienced the personal computer revolution. It was so significant it made it impossible for him to foresee another paradigm shift of equal measure. He could not conceive of something else that could transform the way we use and interact with technology, yet alone multiple of them: the internet, smartphones, social media, connected appliances, the cloud, big data, encryption, artificial intelligence, blockchain, etc. And, of course, all those new frontiers demanded computer programmers.

Another thing he missed is that software requires ongoing maintenance and improvements. If development stops, then software decays as the world around it advances. The needs and expectations of users are constantly evolving within that hardware and software ecosystem. Consequently, systems that linger and slip into legacy eventually require an enormous development effort to modernize.

As for poorly written code, easy-to-learn scripting, and drag-and-drop interfaces, there are certainly software domains that prioritize rapid development, simplicity, and user-friendliness over robustness and optimization. There are platforms where the user can create frontends, modules, even full-blown apps with minimal or no code at all. But these are tools of development, not substitutes for developers. For instance, it’s common to research and prototype in Python, then build a performant and scalable system in Java or C++. This is because there is a tradeoff between empowering non-technical users and the expressive capabilities of a language or a framework for complex tasks. Some problems inescapably require computer science knowledge (algorithms, data structures, logic, etc.). And simplicity tends to abstract away the fine-grain control necessary to build at that level of sophistication.

I think my chemistry teacher was giving me honest advice. And I can’t help but wonder what I would tell a sophomore with a passion for programming today if I were in his position. At the time of this writing, an AI revolution appears to be upon us. We’ve all seen the capabilities of large language models. Will they make us better developers, or will they eventually replace us? If history tells us anything, this is just one of many new frontiers to come and we should be excited, not afraid. Nonetheless, I might not be able to resist asking that hypothetical sophomore, “Don’t you know by the time you graduate college, the AIs will make your job obsolete?”