What Is the Essence of Computing? (2017)
erasmatazz.com
erasmatazz.com
"The essence of computing is the separation of Church and state"
Which is a pun on Alonzo Church's lambda calculus (stateless) and the notion of stored state (in memory), which I suppose can be aligned with processes and objects, respectively.
source:
https://ebrary.net/65011/computer_science/separation_applica...
> Is reality a collection of objects or a system of processes
But when I read this phrase, something struck with me. I kind of hate that we’re originally taught OBJECT oriented programming, specifically that the name is “object-oriented”. I know that the ‘object’ in OOP and object as he is using the phrase above are not necessarily the same technical definition, nonetheless it took me far too long to understand that software engineering is not about the objects: its about the systems. OOP feels like a an awful misdirect as to where one should direct their time and attention in writing code. “You told me my code should be object oriented so I thought real hard about making sure I used objects!”
I would far rather have a junior write one flawless function that DoesTheThing™ rather than a fleet of mis-organized objects that scatter the idea incorrectly. Why? Because DoesTheThingScript() can be more readily and easily refactored than ObjectOrientedMess™.
In terms of code organization, i do think there's certainly a clarity to DoesTheThing. But as we evolve & change & begin to do different things, or as we have different ideas, there's more allure to shifting power from the script into the entities being scripted, to encompassing more capability & responsibility in the objects. Alas we often bungle up & confuse our object systems quickly- when we make bad picks in a bigger system, they stay with us, where as DoesTheThing will more than likely be replaced or become a cog in some other bigger script; it's faults & limitations stand less chance of becoming visible.
> cosmotechnics
Thanks for new favorite words.
I’m sure things might be different in game development, embedded, OS, etc. But object oriented programming feels like it doesn’t quite convey what we actually do as we trying to get a senior-level understanding of SE.
Anyway, this is my hottake and it’s totally warped around my perspective
Very good analogy. Matches my experience also.
Ist's a procedure which takes a piece of food, a pan and an oven and produces a fried egg.
https://michaelnielsen.org/ddi/lisp-as-the-maxwells-equation...
(λ11)(λλλ1(λλλλ3(λ5(3(λ2(3(λλ3(λ1 2 3)))(4(λ4(λ3 1(2 1))))))(1(2(λ1 2))(λ4(λ4(λ2(1 4)))5))))(3 3)2)(λ1((λ1 1)(λ1 1)))
as detailed in https://tromp.github.io/cl/Binary_lambda_calculus.html#Lambd...Since the essence of computing is processes, viewing all programs as processes, it should be really easy to tell if any given process halts. But, it's not.
Math has been around for a long long time, but it turns out there are some really hard problems that took thousands of years to even discover. It took a long time to decide that no internally consistent system can prove that it's internally consistent.
Software, is pretty new. And software got kicked in the teeth right at its inception _because_ process and data are highly context sensitive.
Now, I'd agree, that folks could probably put more thought into organization of data, and deeper thought about what process should operate on that data. But it's not like waving your hand and saying computers are about processing is particularly helpful. I don't need a machine to translate a program into its result. It might take more than my lifetime, but I can work it out with a pencil and paper.
The hard part is building a process that's worth a damn. The thing flips back and forth from being an object, a row of bytes in memory somewhere, to a set of changes over time in a processor. (this could just as easily be brass gears, or punchcards in a loom).
You can choose to look at it however you wish, but it's both. It's really hard to get right.
In theory, some processes could run forever. In practice, they do not. For example,
sudo shutdown -h now
usually works for me. If it doesn't then a hard powerdown usually does the trick.What's perhaps a more interesting question is whether a process will produce its desired output within a desired time frame or number of cycles. For practical time frames an empirical approach seems easy (just wait and check it), but I have no reason to believe that an analytic approach or proof would be "really easy" even if it was just N steps of symbolic execution.
That, is funny.
There are a bunch of approaches, one approach uses 'gas' so you have to pay for computation steps. A bunch of SAT solvers use a clock - if you don't finish in 5 minutes, you get the axe.
And yes, for the vast majority - it's fine. shutdown -h works great. Not many bugs are from "the set of all sets that do not contain themselves" paradoxes.
> What's perhaps a more interesting question is whether a process will produce its desired output within a desired time frame.
Everybody sort of learns about thundering herd in their own way. And retry loops. And many more.
We try stuff, learn how it fails and fix it. And, as far as I know, that's the best we can do. Thinking about programs as processes (I think the author means natural process not unix process) is helpful, but it's not a magic wand.
Doesn't that just beg the question though?
What is the Essence of Processing?
I'd suggest it's a signifier for a subjective state. You can persuade a symbol processor to do anything to any symbol collection, but the results are only useful if the symbols mean something - which is to say they have some analog to subjective experience.
If that's the case then computers and symbol processing are tools for working with subjective experience.
This does not mean there's a possible mapping between all symbol states and all of subjective experience. It's often assumed this is true, but it's a conjecture and has never been proven. It won't be proven until we know exactly what subjective experience is.
So the best we can say is that computers are tools for working with a subset of subjective experience.
Which is interesting enough in itself without being absolutist about it.
According to Ken Thompson and Dennis Ritchie the essence of [communal] computing are fellowship and close communication.