“We are about to study the idea of a computational process. Computational processes are abstract beings that inhabit computers. As they evolve, processes manipulate other abstract things called data. The evolution of a process is directed by a pattern of rules called a program. People create programs to direct processes. In effect, we conjure the spirits of the computer with our spells.
A computational process is indeed much like a sorcerer’s idea of a spirit. It cannot be seen or touched. It is not composed of matter at all. However, it is very real. It can perform intellectual work. It can answer questions. It can affect the world by disbursing money at a bank or by controlling a robot arm in a factory. The programs we use to conjure processes are like a sorcerer’s spells. They are carefully composed from symbolic expressions in arcane and esoteric programming languages that prescribe the tasks we want our processes to perform.
A computational process, in a correctly working computer, executes programs precisely and accurately. Thus, like the sorcerer’s apprentice, novice programmers must learn to understand and to anticipate the consequences of their conjuring. Even small errors (usually called bugs or glitches) in programs can have complex and unanticipated consequences.”
― Harold Abelson, Structure and Interpretation of Computer Programs
How can we define computer science?
Shall we limit it to the standard textbook “study of algorithms” definition? What’s the difference between a programmer cranking out widgets and a computer scientist? Functionally, a professional programmer may need to focus on profitable algorithmic problem solving in electronic computers. But, a computer scientist may be drawn to tougher questions than, “Does it meet the customer’s specs?” or “Does it compile? …Ok, how about now?”
Algorithms and understanding electronic computers are prerequisites for a computer scientist. Like a composer needing to master musical notation and understand pianos before being able to be creative.
Ada Augusta Byron (1815-1852), considered the first computer programmer said,
“We may say most aptly that the Analytical Engine weaves algebraic patterns just as the Jacquard Loom weaves flowers and leaves.”
Before Von Neumann architecture, this suggests a theoretical emphasis not on the mechanics but in the potential of the mechanics as medium for autonomous execution of abstraction. Lovelace was not a programmer, but a computer scientist recognising ideal beauty in mathematics and flowers.
Donald Knuth, another pioneer suggested we change our traditional attitude to constructing programs.
Instead of imagining that our main task is to instruct a computer what to do, let us concentrate rather on explaining to human beings what we want a computer to do.
In his seminal /Literate Programming/ paper, Knuth suggested considering programs as “works of literature”. If a computer scientist applies a literate programming methodology, he functions as an essayist, primarily concerned with exposition and style. (Knuth, 1984)
Computer science evolved into an interdisciplinary study via distributed cognition, not limited to university departmental silos. With the rise of Artificial Intelligence and major players like Google and Elon Musk investing in human brain interfaces, we need to think outside the computer box in redefining computer science.
Or, at least I do if I want to make a living with computer science.
“In this new economy, three groups will have a particular advantage: those who can work well and creatively with intelligent machines, those who are the best at what they do, and those with access to capital.”
― Cal Newport, Deep Work: Rules for Focused Success in a Distracted World
Knuth, Donald E. (1984). “Literate Programming” (PDF). The Computer Journal. British Computer Society. 27 (2): 97–111. doi:10.1093/comjnl/27.2.97.