software calligraphy – part 2

As a systems administrator I am used to stitching together other people’s code and systems to produce a working outcome within given constraints. Which means, the rise of agentic coding should make me happy. Alas, outside work, it seems to make me sad. Which is why I still discuss my saddening experience with friends, coaches and mentors.

A professor friend posted on Facebook part of Moshe Vardi’s article:

CS departments must also grapple with the fact that the most fundamental skill we used to teach, which is coding (remember “Coding for All”?), may not be a viable skill at all.

To which I responded something along the lines of: Professors teaching circuits and computer architecture, do teach students how the components connect, but there is no person in the world, for decades now, who does this on their own for VLSI and the like. It is just not possible. They rely on the computer to do that. And yet, the skill of designing chips is not lost. We are there.

So what I call software calligraphy (hand crafted code) is the skill Dr. Vardi thinks is not the viable one. Yes, a calligrapher aims at a niche market. But to be honest, I do not think any of the 65 courses I had at NTUA taught me code as a viable skill. Maybe at Rice they did things differently (with Racket, HTDP and the like).


I woke up thanks to a nightmare this morning. I could not sleep. But here is what I remembered:

One morning I was shopping in Amsterdam with my young fiancée, and tired, we sat down on the café terrace to drink a cup of coffee and I was just thinking about whether I could do this, and I then designed the algorithm for the shortest path. As I said, it was a twenty-minute invention. In fact, it was published in ’59, three years later. The publication is still readable, it is, in fact, quite nice. One of the reasons that it is so nice was that I designed it without pencil and paper. I learned later that one of the advantages of designing without pencil and paper is that you are almost forced to avoid all avoidable complexities. Eventually, that algorithm became to my great amazement, one of the cornerstones of my fame.

This is Dijkstra describing his famous algorithm. And he did not do that in front of a computer. Hell, there was no way to be in front of a computer at the time for as long as we do now. It made me realize that I (and possibly others) had replaced any notation, pen and paper with the keyboard and the programming language. As I told another friend in our morning coffee, I had replaced thinking with pen and paper with C and pointers. It is as if we express unformulated thought by writing (and editing to bring it in order) code, and because the LLM writes code faster, we get saddened because we do not have time to think, when it should have been our thought, and not our query, guiding the LLM.

No algorithm was typed in the computer first (for certain definitions of “no”). I had this discussion back in 2006 with Aris. I told him, “I feel I can solve any problem you can pose to me by thinking in code”. “All right”, he said calmly, “solve graph isomorphism”. Yup, he is still waiting for my solution.

So the thing is this: I need to approach my interactions with the LLM in a way that does not outsource the thinking to it. Only the typing. And use more drawings and paper. This will bring back my recreactional computing joy. And maintain fine motor skills.

Leave a comment