free software resistance
the cost of computing freedom is eternal vigilance
### are-computers-really-just-1s-and-0s
*originally posted:* aug 2024
essentialism has a lot of problems, though computers are indeed machines that can be reduced to binary logic. one of the most important lessons of computing is that the most complicated things we do are reducible to just a few fundamental operations, the sum of which can be harnessed to implement all other computational tasks.
there is turing completeness, which is most commonly mentioned to point out that just a few of these tasks, such as comparing values, incrementing and branching, can be used to build a machine that can simulate the most sophisticated computers. and there is also the turing tarpit, the concept that even though all operations are possible, they arent necessarily accessible or less than incredibly tedious to implement with the tools at hand.
so the point of this article isnt to refute, or to diminish the value of being able to break down computing to the most basic and essential operations. its more to affirm the value of looking at abstractions, or looking at these tasks in a way that is more intuitive to more people. the fact that these abstractions have less abstract, more fundamental operations at the root is one of the most important lessons of computing, but abstractions can also be useful- its partly why we have so many of them.
one of the things that is great about learning the fundamentals of computing is just knowing, understanding that under every obtuse abstraction- every bit of bloat, every excess, there is something simpler going on that makes it work. this is a priceless lesson, though the other side of that coin- the point being made here- is that some abstractions are both minimal and more accessible, to more people.
my favourite abstraction is higher than 1s and 0s, and its really more intuitive in my opinion. of course digital computers consist almost exclusively of designs that rely on switches that are on or off- these are combined into various groupings, the most universally known being the octet- or 8-bit byte. but i think its more useful to explain, particularly to people new to the subject- that computers do literally everything with numbers.
the electronic workings of every device, including the capacity to create or receive (or avoid) interference are absolutely relevant for people working on diagnostic applications or those interested in security. the lessons of how each bit is stored or retrieved can be used to write data as a side effect of reading it excessively and repeatedly (this was named rowhammer) and the value of such lessons never disappears, when you focus on simpler ideas that more newcomers can grasp. im not trying to create a one-size-fits-all approach here. most people will gain a better understanding from a simple, numeric abstraction regardless of base. base is useful when working with applications or representations that use hex or octal, but we dont have to start there like many explanations do.
im most fond of the idea that every device and even every operation is like a container for numeric data. you may have an analogue input on some screens or a digital input on others, but before you get an analogue signal the computer is going to be sending digital information to a dac, or in other contexts the computer will be receiving a signal that goes through an adc. every interface, more or less, is going to be essentially digital sooner or shortly later.
when youre learning the real essence of computing, the pixel data is numeric, the hard drive data is numeric, the instructions are numeric, data strings and obviously numeric data, also sound and other video data (not only on the screen) are numeric. introducing the idea that everything is "just numbers" should help most people start to understand how computing works.
but also, as a reminder of what youre working with when things start to get ridiculously complicated, i think it helps everyone- including those who understand computing- to remember that everything being done is really just numbers. sure, weve created applications and protocols and various sorts of libraries, syntactic sugar in programming languages and other adaptations between hardware and software, between application and operating system, and between the user and the computer- but all in all, every one of these things just communicates numeric abstractions to each other- from the keys being pressed to the mouse moving, to the pipes between command line apps, to the bloated and overrated one-size-fits-all solutions that large corporations love all our applications to rely on. which isnt to say big "universal" interfaces are all entirely useless, only that industry seems to love them to an unhealthy excess.
"computing is numbers" is both a fundamental and almost universally useful abstraction- and while its fundamental to practially all of computing, its abstract in that yes, physically speaking, there are even "simpler" operations going on underneath that, even if most computing students (particularly beginners) dont need to know how a transistor works to understand a fairly universal model of controlling their computing.
i would like to mention, that while ive designed code that is deliberately intended to make coding look and feel a bit less like maths, so did grace hopper. grace hopper taught maths academically, while i am particularly weak on that front. i do not love doing maths, i really love that computers take care of that for me. even so- the basic understanding that the computer is translating and following everything based on sets of numeric information is useful.
i struggle with equations and anything more complicated than basic algebra, but i really do not struggle with the idea that every colour on the screen is a mix of red, green and blue light values in the range of 0 to 255, and can be represented with 3 such numbers. really, its just 1. counting and 2. context. and everyone who says "computing is just 1s and 0s" is already aware of this. but i would really love this model of computing to be available and taught to everyone. as ive already said, it isnt the only model that is useful or necessary. its just a great place to start, for possibly the largest percentage of people.
license: 0-clause bsd
```
# 2018, 2019, 2020, 2021, 2022, 2023, 2024
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
```
=> https://freesoftwareresistance.neocities.org