Tech-inzichten door Niek de Greef. Reflecties op technologie, software development en de impact van digitale innovaties op cultuur en maatschappij.

Programming: a profession

Programming, a profession not a monkey task

A few years ago an IT manager said to me: for this programming job, I should be able to hire any monkey from the street.

I told him such an attitude would very quickly ruin his application, if not his entire business.

For an organisation that relies on software so heavily, allowing unmaintainable code to enter your applications is like accepting a loan your will never be able to pay off. You are building up an insurmountable technical debt. You can only hope you have some superb programmers around when the bugs hit the fan.

Programming profession

But for us programmers the problem is also about professionalism.

Coding is a profession. Good programming is a skill.

Some organisations want to have code done for 5$ per hour. Or so. Less than you would pay for a plumber. You would trust a plumber for that rate, why leave a programming job to someone for that rate? You are simply not serious about the problem at hand if you hire like that.

Democratization – the amateur and the pro

There is a tendency to underestimate the importance of skill.
Programming is democratized. That is good. Coding is not something mythical either. Amateurs can do it. Do it well. And enjoy it.

But for the problem in my organisation I need a pro.

Photographing is democratized. But for my wedding photos or for my business brochure I hire a professional photographer. Because he has a number of things extra, which I would summarize a craftsmanship and experience.

If you want stuff done you want good craftsmanship. A specialist you can talk to.

And by the way, ideally they should be at your desk and you at their’s. This is where outsourcing often goes off the track. Too little interaction.

Go pro

Cheap programming may work for throw-away apps. But not for high quality solutions that need to work be maintained for a couple of years or more. That stuff is built for the future. For maintainability.

By an expert.

The roots of modern computing explained in EWD51 – Multiprogramming and the X8

Dijkstra’s EWD 51 is a structured educational coverage of the workings of semaphores in communicating processes and with IO devices. It is the first part in a series of three articles called MULTIPROGAMMERING EN DE X8″ (Multiprogramming and the X8), EWD54 and 57 describe part 2 and 3.

if then else

The X8 is the Dutch research computer for which Dijkstra and hos team developed the operating system, and he was able to test his now famous concepts for multiprogramming. 
In a way it is the formal part of the talk that Dijkstra held and was transcribed in EWD 35.

EWD 51 extensively discusses the mechanisms of semaphores, the conditions, and (hardware) implications. That is the summary. To give more would be pointless, and you’d rather read the entire article. (The article is in Dutch – I could provide a quick translation if you are interested. Please let me know through a comment on this post, or send me an email)

The Dutch language used in this article is highly interesting. Dijkstra invents concepts for which no words existed before (seinpaal/semaphore as computing concept to start with) the abbreviations P (prolaag/pass – probeer te verlagen) and V (verhoog/increase), critieke secties / critical sections, ingreep-flip-flop / interrupt-flip-flops, luisterbit / listener bit, doof-horend bit.

The article could still  function as a modern introduction into the topic and still be applicable to today’s computers.

So far ahead, so clear, so up to date still.

Singularity Is Near – Kurzweil meets Dijkstra

the singularity is near Ray Kurzweil book cover

While reading Ray Kurzweil’s The Singularity Is Near, I stumbled upon a quote attributed to computer scientist Edsger W. Dijkstra that made me pause, not because of what it said, but because of how it was used.

The Disputed Quote

Kurzweil cites Dijkstra as saying: “Computer Science is no more about computers than astronomy is about telescopes.”

It’s a clever aphorism that sounds exactly like something Dijkstra would say. There’s just one problem: the attribution is disputed, and the original source remains elusive.

Searching for the Source

I dove into the Dijkstra archive at the University of Texas, which contains his extensive collection of EWD manuscripts. Despite searching through his papers, I couldn’t find this exact quote. Wikiquote also lists the attribution as disputed.

Could Dijkstra have said it? Absolutely. Despite being a world-renowned computer scientist, he famously avoided using computers for his work, reportedly owning one only to read email and browse the web. For him, computer science truly was about ideas, not machines.

But the lack of a verifiable source matters—especially in a book making grand claims about the future.

Context Matters: Why This Quote Feels Out of Place

Kurzweil places this quote in a chapter discussing exponential growth, Moore’s Law, and paradigm shifts. But the connection feels forced. The Dijkstra quote speaks to the philosophical nature of computer science as a discipline. It doesn’t illuminate anything about exponential technological progress or the coming singularity.

This seemingly minor misplacement reveals a larger issue with The Singularity Is Near: the blending of rigorous scientific facts with personal predictions that lack the same level of substantiation.

Two Visionaries, Two Approaches

The contrast between Dijkstra and Kurzweil is instructive:

Edsger Dijkstra: An unconventional theoretical scientist known for mathematical rigor and precision. Every statement in his EWD manuscripts was carefully reasoned and documented.

Ray Kurzweil: An unconventional futuristic engineer and inventor. His predictions are bold, optimistic, and often based on extrapolating current trends.

You might expect Dijkstra to be dry and academic, while Kurzweil would be the more engaging personality. But here’s the surprise: the biggest difference between their work isn’t their subject matter or their ambition—it’s humor.

The Missing Ingredient: Humor

Dijkstra’s writings are filled with wit, self-awareness, and intellectual playfulness. He could be cutting in his criticism, but always with a touch of humor that acknowledged the absurdity of certain positions. This humor wasn’t just stylistic. It was a sign of intellectual honesty and humility.

Kurzweil’s The Singularity Is Near, despite its grand vision and fascinating ideas, takes itself entirely seriously. Every prediction is presented with confidence. Every trend will continue. Every obstacle will be overcome. There’s little room for doubt, irony, or the acknowledgment that futurism is, by nature, speculative.

The Problem with Unquestioning Optimism

This lack of humor—and the self-awareness it represents—makes Kurzweil’s predictions less credible, not more. When you can’t laugh at yourself or acknowledge the limits of your knowledge, you risk becoming a prophet rather than a scientist.

Dijkstra understood that computer science required both rigor and humility. He documented his sources, admitted when he was speculating, and never confused his hopes with inevitability.

Kurzweil’s work would be stronger if it borrowed more from Dijkstra’s approach: not just his ideas, but his intellectual honesty.

What We Can Learn

The misattribution (or at least unverified attribution) of the Dijkstra quote is a small detail, but it’s emblematic. It suggests a book that prioritizes narrative momentum over scholarly precision. That’s not necessarily wrong for a work of futurism, but readers should understand what they’re getting: a compelling vision more than a rigorous prediction.

When reading about the future of technology, it’s worth asking: Is this backed by verifiable evidence, or is this someone’s optimistic extrapolation? Are the sources documented? Is there room for doubt?

Dijkstra would have insisted on all three.


Further Reading:

Related posts:

Watching the birth of modern computing – EWD 35

EWD 35 starts out in typical Dijkstra way.

It is not unusual for a speaker to start a lecture with an introduction. As some in the audience might be totally not familiar with the issues that I wish to address and the terminology, which I will have to use, I will to give two examples as a means of introduction, the first one to describe the background of the problem and a second one, to give you an idea of the kind of logical problems, that we will encounter.

The story that EWD 35 tells is a brief history of the resolution to the scientific topic that brought Dijkstra his fame: the problem of synchronising parallel processes and the invention of the the concept of the semaphore for these types of problems in computing.

Today it is almost impossible to imagine a time in which this problem was still unsolved. Collaborating parallel processes, semaphores and indivisible operations have become a such a commodity in computing. But at that time computing meant sequential processes and parallelism of interacting processes was being looked at for the first time.

In 1959, the question was of whether the described capability for communication between two machines made it possible to couple two machines such, that the execution of the critical sections was mutually excluded in time. In 1962, a much wider group of issues was considered and the question was also changed to “What communication possibilities between machines are required, to play this kind of games as gracefully as possible?”

A side note. The word “required” and “possibilities” here do not cover the meaning of Dijkstra’s original in Dutch “welke communicatiemogeljkheden tussen machines zijn gewenst”. I would say “which communication facilities between machines are desired” – expressing better that Dijkstra is in the mode of designing the thing, thinking up these communication facilities.

Another side note, much of Dijkstra’s beautiful loose writing in Dutch is lost in this straightforward translation to English here. For example, we can translate “Jantje” to “Johnny” but in Dutch we have a completely different image in our head when we see Jantje than we someone, Dutch or non-Dutch, would have with Johnny.

Dijkstra uses the word machines in the paragraph quoted above. The terminology developed further and today we would call these, a bit more abstract, processes.

Further in his article he gives an insight into the potential for his “machines” and sees them simulated on a central computer. We really have to imagine this is a remarkable insight in the future. At that time computer ran single tasks. Running multiple processes at the same time on the same hardware was at best experimental. He makes this remark in the context of alternative ways of having machines collaborate and let them wait on each other by building in wait times in case they need access to the same resource.

However, if we consider now, that will be the majority of these machines will be simulated by a central computer so that any action in one machine can only be performed at the expense of the effective speed of the other machines, then it is very costly using a wait cycle to demand attention of the central computer for something completely useless.

The basic problem Dijkstra extensively examines is best described by Dijkstra in the following sentences. One machine wants to assign a value to a shared variable, after testing its value. For example something like:

if x=3 then x :=4 else x:=5

Another machine is trying to do the same thing, at the same time. What happens if machine 1 tests for the value of x, while at the same time machine 2 changes this value. Or, what happens if they both change the value of x at the same.

Dijkstra indicates a mechanism is necessary which he call indivisible actions. Today these things are indivisible, uninterruptible or atomic operations or instructions.

These two actions, assigning a new value and inquiring about the current value are considered indivisible actions, i.e. if both machines wish to “simultaneously” assign a value to a common variable then the value assigned at the end is one or the other value, but not some mixture. Similarly, if one machine asks for the value of a shared variable at the time that the other machine is assigning a new value to it, then the requesting machine will receive or the old or the new value, not a random value.

Having these instructions is key to the solution of the problem of interaction sequential processes.

In EWD35 Dijkstra then goes on to describe, in a rather lengthy paragraph – but remember this was front end research at that time – the invention of the semaphore in computing.

The programmed wait cycle that exists herein, is of course very nice, but it did little to what our goal. A tiny wait cycle is indeed the way to keep a machine busy “without effect” . However, if we consider now, that will be the majority of these machines will be simulated by a central computer so that any action in one machine can only be performed at the expense of the effective speed of the other machines, then it is very costly using a wait cycle to demand attention of the central computer for something completely useless. As long as the wait cycle cannot be exited, in our opinion the speed of this machine may be reduced to zero, To express this we introduce a statement instead of wait cycle, a basic instruction in the repertoire of the machines, that may take a very long time. We indicate this with a P (to Pass); in anticipation of future needs, we represent the statement “SX: = true” by “V(SX) – with V of “vrijgave” (in English: release) (This terminology is taken from the railway environment. In an earlier stage the common logical variables were called “Semaphores” and if their name starts with an S, it is a reminiscence of it). The text of the programs in this new notation is as follows:

“LXi: P(SX); TXi; V(SX); proces Xi; goto LXi” .

And you hold your breath, watching the birth of modern computing here in EWD 35.

The rest of the article provides the proof that this mechanism holds for any number of machines.

Dijkstra in EWD 32 on the tool, how it should be worthy our love, and show: Elegance and Beauty

E.W. Dijkstra and McJones at a conference in marktoberdorf 1973

Reading Dutch computer scientist Edsger Dijkstra’s EWD’s.

The State of Programming in 1962

In EWD 32 Dijkstra shares his “meditations” on the state of the Art (or rather Science, as he prefers to say) of Programming. Machine design was ugly, programming as a discipline was undeveloped. This was 1962.

Programmers were hired for applying tricks and Dijkstra loves the development that there is

… the slowly growing group of people who think it more valuable that the man should have a clear and systematic mind.

The Commercialization Problem

He goes on to discuss how programmers and machine designers should collaborate to create better machines and programming languages. This was very necessary because Dijkstra believed that at that time, the computer manufacturing industry was taking over computer design from universities. But this brought a commercial angle to computer design that Dijkstra was unhappy with.

They seem to design for the customer that believes the salesman who tells him that machine so-and-so is just the machine he wants.

What Dijkstra Meant by “The Tool”

Dijkstra goes on to share his thoughts on how to improve The Tool – by which he means the programming language, translator, and machine. Nowadays, with so many languages and machines, we hardly think about this tool. We think of tools as tools: a given rather than a thought. And of course, we have massive debates about programming languages, hardware, etc. But some of the concerns have disappeared. Nobody really seems to care about machine design anymore. It has become a commodity. It should be fast and robust. Hardware hardly provides any distinguishing features. If so, it is about size and energy, not about performance and reliability.

The Eternal Quality: Elegance and Beauty

But the last one he mentions is an eternal difference, one which we still haven’t landed on. And maybe we never will. Because it is a subjective one. A characteristic you wouldn’t expected in our Beta world of computers and programmers.

As my very last remark I should like to stress that the tool as a whole should have still another quality. It is a much more subtle one; whether we appreciate it or not depends much more on our personal taste and education and I shall not even try to define it. The tool should be charming, it should be elegant, it should be worthy of our love. This is no joke, I am terribly serious about this. In this respect the programmer does not differ from any other craftsman: unless he loves his tools it is highly improbable that he will ever create something of superior quality.

At the same time these considerations tell us the greatest virtues a program can show: Elegance and Beauty.