How programmers compare to everybody else?

Computer programmer

Working in software development, be it for the desktop, web, mobile or any combination of the three, one often feels like he is in a unique line of work made possible by the 20th century technology, without obvious parallels to other professions. Is that really the case though, or are there commonalities with other fields and valuable lessons that other professions can teach us?

Programmers and artists

Our first attempt at an answer might seem a little surprising. Paul Graham, a famous venture capitalist, entrepreneur and hacker, is of the opinion that programming is analogous to painting, and has even devoted an essay (and then a whole book of his, titled “Hackers and Painters”), to exploring this supposed similarity.

[O]f all the different types of people I’ve known, hackers and painters are among the most alike. What hackers and painters have in common is that they’re both makers.”

– Paul Graham, “Hackers and Painters”.

Graham is alluding here to the creative aspect of programming (“hacking”), as opposed to tedious enterprise code crunching. But he’s also using a restricted definition of what painting evolves, based on his experience with the more structured 15th century painting techniques he was taught at Florence’s art school. If one considers the free form spontaneous painting of the surrealists, abstract art, etc, the similarities are not so apparent anymore. (You obviously can’t “Jackson Pollock” your way into a working program).

Maciej Cegłowski, a fellow hacker and entrepreneur (creator of the Pinboard web service) calls Paul Graham on that, in a rather entertaining essay:

The fatuousness of the parallel becomes obvious if you think for five seconds about what computer programmers and painters actually do. Computer programmers cause a machine to perform a sequence of transformations on electronically stored data. Painters apply colored goo to cloth using animal hairs tied to a stick.

– Maciej Cegłowski, Dabblers and Blowhards.

I’d say, while programming (or hacking, if you prefer) has a creative element, considering it a fully creative endeavor is perhaps ignoring the very pragmatic constraints programmers have to work with, which are nothing like purely aesthetic considerations.

As for the “code is poetry” notion, well, source code might be beautiful in its own way, but it sure doesn’t rhyme and it doesn’t express our “deepest feelings” (except maybe if we’re androids). Plus, it has to pass strict syntax checks, something e.e cummings’s poems never had to.

Programmers and Mathematicians

The analogy to mathematics is probably easier to make. After all the first “programmers”, people from Babbage to Turing, were actually mathematicians in trade, and the greats of computer science, from Edsger W. Dijkstra to Donald Knuth all stressed the importance of a solid mathematical background.

Then again mathematical logic seems too abstract whereas programming deals with all kind of pragmatic constraints (not to mention business considerations). Mathematicians can afford to live in an ivory tower in a way that professional programmers cannot.

We could perhaps compare programming to “applied mathematics”, a kind of watered down, practical application of pure theory. It would be an apt comparison too, if it wasn’t for the fact that most practicing programmers seldom have to delve into deeper math than the occasional first degree equation or simple trigonometry.

There are, of course, hard and complex mathematical concepts and algorithms behind almost every program, but in most cases they are hidden in libraries, APIs, compilers and OSes, and the average programmer does not have to concern himself with them (scientific computing and gaming being two major exceptions).

Programmers and engineers

Engineering is another obvious parallel for programming. Both professions construct things, both have to deal practical and business considerations, both involve a certain amount of creativity and expression, and both are underpinned by mathematics.

In real life, though, the analogy breaks down, to the point that there’s a common lament in programming circles that programming is not more like engineering.

Programming projects, you see, are commonly delayed (often 2 or 3 times over the defined schedule), and are often delivered in a bad or even unusable state (crashing, taking too much time to perform certain actions, freezing, etc). That’s totally unlike the situation in civic engineering, where any engineering team can design and build something as large as a skyscraper or a bridge and deliver it flawlessly and on time.

The problem is perhaps that programming is far less well defined than engineering, with far too many unknowns and far too many interactions between components and external systems. That is, engineering is more like complex lego building ― components are standardized to fit together and have well specified properties (plasticity, weight, hardness, etc), whereas programming is more ad-hoc and (despite the existence of libraries and frameworks) every program has more or less to be built, analyzed and checked from scratch.

Programmers and everybody else

We explored a few commonly put forward analogies between programmers and other professions, none of which felt perfectly satisfactory.

We do have our own idea to propose though ― that programming is not like any of those professions because it’s like all of them, and many more besides.

That is, programming is a malleable profession, or if you prefer, a cross-disciplinary field.

When we design our e-learning products, we are programmers AND educators at the same time. We have to understand teaching, students, courses, and a myriad of learning-related concepts and constraints. You cannot deliver a good e-learning program unless it’s both good as a program (fast, solid, stable, etc) and as an e-learning tool (satisfying educational use and needs).

Similarly, when working in something like multimedia or games, you have to be both a programmer and an artist. Other such cases are even easier to make: scientific computing obviously takes its inspiration from whatever scientific field the programmer works in (biology, astrology, physics, statistics, etc).

So here you have it: programming is an all encompassing, shape-shifting profession, because it potentially concerns all aspects of human activity. And we, programmers, are lucky to be able to dabble in all kinds of other professions, and become, if only for one software project, part-time physicists, mathematicians, artists, biologists, accountants, writers, educators, …

Improve your employee, partner and customer training with our enterprise-ready learning management system. Book a demo now and see why our diverse portfolio of customers consistently give us 5 stars (out of 5!)

Book a demo