Mechanicalism

From XionKB
Revision as of 15:51, 4 March 2023 by Alexander (talk | contribs) (remove star template)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

Mechanicalism is one of two "broad branches" of computer science. It is concerned with the engineering of computer software where computers are regarded as concrete machines, as opposed to abstract machines as dealt with in the other "broad branch" called functionalism.

Definition

Mechanicalism takes a simplistic view of computers as machines, whose purpose is the transmission and modification of data. The idea strongly takes to a tenet from Richard Fabian's book, Data-Oriented Design: "data is all we have". A strong conceptual separation between code and data is adopted, in contrast to the functionalist drive to make functions "first-class objects". Instead of making modeling an abstract idea the focus of programming, mechanicalism makes the processing of data the primary focus. Software is written as reasonably close as it will be to its true final form as machine code, with abstraction conservatively adopted for the sole purpose of simplifying conventions of data processing.

Significance

Mechanicalism provides the sole basis for creating well-behaved and fault-tolerant systems. This makes it the approach of choice for mission critical computing, such as that involving finance or military use. It is the only way to create software systems that can remain in use unmodified for long periods of time without operational intervention (as in DevOps). Mechanicalism is also indispensable for approaching bare metal silicon in order to maximise performance – this was demonstrated in the weird architecture of Parallela's Epiphany-V processor.

All dialects of assembler are naturally close to the ideal of mechanicalism, however there are some higher-level programming languages that provide more features promoting portability and interoperability, such as C. C* was derived from C to provide a more explicitly data-oriented data model, along with the key features of "law and order" to help manage validity of state with complex systems.

On the other hand, mechanicalism is ill-suited for experimental programming of any kind, due to its heavy focus on manual correctness and thorough ideation of the system prior to programming. It relies a lot on "doing one's homework", that is to say, a mechanicalist will write more about their code in English than they will write of the code itself. It is more capital-intensive in the senses that it demands more time and expertise out of a programmer than would be required in a functionalist approach.