The end of the first era

In this article I am going to tell you about my reevaluation of my mental model of IT. My old mental model was the UNIX filesystem, in this model everything in IT is explained with reading and writing files. So the execution of a program is like the reading of a file from the filesystem into a memory file (a page), after which you execute it (essentially by reading from that memory file). Likewise the communication between client and server is like the reading and writing to a file that happens to be (partially) located on a different machine.

This model has been a real help in the first part of my career; but this last semester has also shown that there are limits to what can be explored/explained with the UNIX model. It’s not the case that I am going to discard UNIX, on the contrary; I am going to cement it as the canonical Operating System. But I am going to discard the UNIX model as my central theory of computing.

Unix is dead, God bless Unix!

The second/symbolic era

As mentioned in the SDAC article, I wanted to learn Lisp. So a few months ago I bought the SICP book and learned Scheme (a minimal functional Lisp). Within the first two chapters I fell in love with the notion of symbolic programming. Specifically the notion that if everything is a symbolic expression, the difference between “code” and “data” is trivial. Meaning that you can execute “data”, and compute on “code”. And because I was in dire need of a theory of computing, I adopted it.

For reference I will put my paraphrase of the statement here:

Any program can be correctly designed by the carefull study of computational processes, whether synthesized from the natural world or not. The notation of computational processes are symbols, these symbols can be used actively (as code) and passively (as data); but this distinction is not inherent. The organization of symbols into programs can be done in three ways:

Primitive expressions; these represent the simplest symbols of the process.

Means of combination; compound symbols are built from simpler ones.

Means of abstraction; compound symbols can be named and manipulated as symbols themselves.

After the adoption I worked/am-working on several things, which I can’t disclose because I have a contract. Nonetheless I noticed that concept like higher-order and recursive functions make more sense when looking at it trough the lens of symbolic programming.