Comment by notarobot123
1 day ago
Similarly, programming is also a precise language of communication. Initially, we focused on direct machine behavior but every abstraction above the hardware (including assembly) has been to make that behavior legible to humans.
Developed notations and shared procedural abstractions have made thinking about computation more intentionally human and source control has established a protocol for conversing with other humans in the language of a program and changes to that program.
The moment just now feels like a neglecting of the idea of communication being central. If the program is a compile target but not sufficiently legible or if the conversation moves too quickly for us to keep up then we retain the effects of computation but loose its meaning as communication. We loose the understanding and the ability to develop and evolve further shared abstractions.
Open source programs could be more like motivated explanations of computation. For open source to survive, maybe we should start to make the distinction between free product distribution and programming as communication and community building.
This feels a bit too optimistic regarding programming. Or perhaps betrays an imprecise definition of programming. To me, programming is about expressing algorithms. But algorithms may be totally illegible and still work fine.
Math on the other hand is exclusively about being understood. It is ideas from math that made algorithms legible and thus made the act of programming an act of communication. If by programming you mean using notation and ideas that were borrowed from mathematics to specify algorithms, then for sure it’s communication, but only inasmuch as it was math first. If you mean only specifying algorithms, then no communication need take place; the executor of the algorithm will deterministically execute it irrespective of its ability to communicate.
Programming was never about communication. It was always about making the machine do the thing we want. Back in the day, a good game programmer knew which time intervals had writable video memory and which CPU cycles drew which scanlines, and spent more time rearranging the code to hit these timings than to write the actual algorithm. Later programmers (I hesitate to call them good) learned everything there is to learn about OS internals and wrote theoretically nonsensical and invalid code that still worked thanks to those internals, to save CPU cycles and especially memory use. And the next generation of programmers took the principles of late binding and abstraction to the logical extreme and created architectures that cannot be described in words anymore, only in diagrams - but are crazy good for code reuse, traceability and A/B testing.
> Open source programs could be more like motivated explanations of computation.
It is already that. Every time a method/function is created, a structure is defined, a variable is added, a file is created or renamed,… It’s all for the purpose of human communication. The computer only need binary in a single file.
But people feels like they should be able to jumpninto curl code without any understanding of networking, or linux code with no knowlede of computer architecture. Few code are meant for total beginners.