Writing software is not sitting in front of a computer screen and keyboard, staring at code. If you’ve ever been in such a circumstance, then you can probably attest to a number of times blankly looking at the screen while day dreaming about some other matter. Writing software happens to be about sitting in front of a computer screen and keyboard because of what happens after you’re done writing software. Namely, you translate it into keystrokes and text files, into projects and sub-projects, store it away onto a hard drive, a remote computer and so the software is transformed into something tangible.
Sitting in front of a computer screen and keyboard is convention. Software isn’t being written until your mind is attending to the ideas represented in the text files, diagrams, and your own memories. Writing software is an act of thought.
During an oral examination I had a student develop a program which we would now recognize as implementing pointer manipulations using a one-dimensional array. The candidate did very well until at the very end he got mysteriously stuck, neither of us understanding why. It turned out that he should have written down “a[a[i]]:= ….” but that mental block prevented him from conceiving that because FORTRAN (to which he had been exposed extensively) did not allow index expressions as complicated as “a[i]”. It was a revealing warning of the devious influence the tools we use may have on our thinking habits. -Edsger Dijkstra