Religious and spiritual folklore surrounding programming
deusinmachina.net
deusinmachina.net
There's a deeper level as well. The concept of "memory safety" which is a core principle of Rust has, I believe, a lot in common with religious concepts of purity and cleanliness. Undefined behavior, by contrast, is an undesirable form of uncleanliness, emotionally similar to trayf in Jewish culture or haram in Muslim culture. Rituals include the `#[deny(unsafe_code)]` incantation, or using cargo-deny or similar tools to make sure uncleanliness hasn't crept in through dependencies.
It's not just Rust, although that's a nexus for a lot of tension and conflict around this issue. Tools for avoiding and mitigating unsafety are often given names evoking cleanliness: "Purify" and "sanitizers."
(don't mind me; you might find me upon occasion with the animists, worshipping at the altar of '*' and '&')
(Is only joke - no srs)
I miss n-gate’s weekly HN annotated digests.
I hope whoever they are/were is doing well…
Are you certain you are not assuming that Rustlang advocates are arguing in bad faith?
There are pieces of wisdom in low-level languages, script languages, and functional languages. But after seeing Rust, one knows that there are only fragments of something greater.
I am a sinner, though. Even after I saw Rust, I still write mostly in Python and TypeScript. Out of convenience, out of habit, by social pressure.
I would say, turn off the bots but I'm sure you won't.
1: https://aphyr.com/tags/interviews 2: https://artemis.sh/2022/04/11/package-manager-murder-mystery... 3. https://etiennefd.substack.com/p/common-tech-jobs-described-...
> There's a good part of Computer Science that's like magic. Unfortunately there's a bad part of Computer Science that's like religion.
This points to perhaps a useful distinction that is to be made here between religion (as in tribalism which leads to holy wars) and mysticism/spirituality/magic (as in deep fascination in search of ultimate truth).
I think it deserves and update - 15 years is quite some time.
> most popular modern languages are incomplete subsets of it that obsess over artificial restrictions of their own creation
which honestly hits a bit close to home
Mel wasn't fictional. Melvin Kaye was an application programmer at Librascope, and there's a photo of him in the company newsletter. https://www.freecodecamp.org/news/macho-programmers-drum-mem...
Some people for some reason I can't understand have warm and fuzzy feelings about FTP, despite it being a horrible protocol in multiple ways. Yet, for a long time it was often thought of being the "proper" way to download stuff, even though even HTTP is technically better in many respects.
You still find plenty people harping on about the Unix Philosophy, even though that in modern times it's nigh irrelevant, and significant parts of it are technically obsolete. Yeah, parsing text streams was sorta okay in the 80s, but is very troublesome and brittle in the modern age.
And there's an odd amount of people who are still mentally stuck on the Linux of the 90s and having trouble to understand that things have gotten more complicated since then, and software has had to adapt to things like laptops and wifi.
The basic core revelation that the Unix folks had was "gee wiz, I seem to need to sort data/open a socket/make a directory super often, and every time I personally try to code one of these operations up it's a huge headache that adds hours to dev time"
But I see this as a good example of a religious issue because you can often find people think that it's a principle worth rigidly adhering to, regardless of whether it actually does produce better results in a given case.
For instance my experience is that such a model tends to get bad when things get sufficiently complex. Things like GPG and cdrecord are painful to interact with, and would arguably work much better if they were a library because a text stream is actually a pretty bad communication channel.
And sure, I agree that back when Unix was created the model made sense, but it's increasingly less and less relevant.
I, for one, would very much prefer GPG to be decomposed to follow the unix philosophy - I think I would have a much easier time understanding and composing commands like `gpg-sign --keyfile ~/mykeyfile somefile | gpg-encrypt --to ~/someperson.pub | gpg-asciiarmor > somefile.gpg` than whatever the monolithic incantation is. This would make it much less painful to interact with, especially because GPG is doing a series of transformations on either streams of text or raw binary.
For instance if you want to deal with keyrings, and be fully philosophy compliant, then that might be a gpg-keyring tool, which means now we have a problem. A signature operates on both a key and a file, and a pipe only works on one stream. Then there's the issue with error handling, since any of those bits can go wrong, and then somebody has to figure out a good way of dealing with all of that.
Or, we could have libgpg instead, in which case our mail client could avoid screwing around with text streams, signals and process management, and just have a nice API with features like callbacks and well defined datatypes that would be a lot more comfortable to use.
EDIT: Even with just the 3 primitives you've outlined, we already can create a huge mess. Is it sign then encrypt, or encrypt then sign? We can combine signing, armoring and encrypting in any order and any amount, requiring the recipient of this insanity to somehow figure out what we did, and then somebody else will do it differently.
Have you confused the Unix Philosophy with Unix itself? The Unix Philosophy doesn't have any technical components which might become technically obsolete.
> Write programs that do one thing and do it well.
Putting things together from a kit of parts isn't necessarily the optimal way to do many things. In many cases tight integration actually produces superior results, and debugging a system made from many cooperating bits isn't necessarily any easier.
> Write programs to handle text streams, because that is a universal interface.
Or don't, because it's a bad interface, and a cause of many bugs and security issues.
> Putting things together from a kit of parts isn't necessarily the optimal way to do many things. In many cases tight integration actually produces superior results, and debugging a system made from many cooperating bits isn't necessarily any easier.
Define "optimal" here. Without a definition this is a meaningless statement. But even if your definition of "optimal" is "easiest to debug", I'd have to disagree. Tightly coupled systems are nigh impossible to debug because you have to have the whole system composed together to debug anything. Loosely coupled systems allow you to debug each part separately, and small components mean they have little you have to debug. The next part of debugging is the interaction points, but that's easily constrained with a moment's thought when designing and developing a system.
If "optimal" is about performance, that's a debatable thing. The tightly coupled shit some people put together at my office is terrible with respect to performance. It's bordering on negligence the way they designed it and trying to fix the performance issues is almost impossible again because of the tight coupling of different components.
Regarding text streams: Ok, one weak point in some definitions/descriptions of it. The idea of utilizing a more universal data format though still stands. 1 million or so different binary formats isn't much better.
So for instance stringing too many things together also leads to confusion due to the many interactions between disparate bits.
At some point you can end up too much parsing/serialization in the mix, too much accumulation of startup costs, or dealing a system that has components written in shell script, Perl, Python, C, C++ and Rust making the whole system difficult for any random person to comprehend fully.
The reason why this is part of the Unix philosophy is not merely because of the productivity it provides, but largely because of the power it affords end users. Most of the programs on my computer are GUIs that don't interact with each other. How much more powerful and flexible would my PC be if they were designed to do one thing well and be slotted together.
A year or so later, we got individual student accounts. I resolutely refused to discover how they implemented it.
The Unix Philosophy is about building small components that compose well together. The fact that some applications benefit from tight integration in no way derogates from its value.
Contenerized microservices is also text processing, but you add 2 new layers of abstraction for every operation you do.
People were using the “Unix philosophy” in the 2000s to try to satisfy the demands of the consumer internet. It failed miserably at that, and was replaced.
Sun Microsystems business quote on their manuals, "The network is the computer".
Then again, besides being a famous book quote, most commercial UNIXes never cared about such philosophy.
You see, it is the File Transfer Protocol.
Do you need to transfer a file? Use the protocol designed to transfer files! Why would you use something silly like a Hypertext protocol for binary!?
I see similar conflation of the name-vs-reality all the time. My favourite is the “secure” network that is differentiated not by firewall access policy, but by name only. Literally just a label.
Because it’s faster with http, doesn’t require firewall/nat trickery at either side, is secure out of box via https, can be easily gui-ed via index plugin, cached via a proxy/cdn, supports “moved elsewhere” and other issue reporting.
And if you ignore that “Hypertext” word that is there historically and look at http as just a metadata+data transfer protocol, it is clearly superior to ftp for any sort of data transfer.
Don't know if that fits the bill, but for a lot of people (me included) ftp is the reminder of simpler times, where you'd just put your username /password and address in an explorer window and drag and drop files.
It wasn't secure, nor reliable, but it felt really simple and easy to grasp, especially for inexperienced users. We have way better choices now, but I've spawn many more quick and dirty ftp servers at home than I'd be willing to publicly admit. Hell, my printer pushes scanned files to an ftp.
Those large drives could store an enormous amount of data: sometimes as much as a megabyte per platter!
Linus has flamed plenty of people
> Time for some serious flamefesting!
> I don't usually get into flames, but I'm touchy when it comes to linux :)
I do the same.
My primary development machine is 'ptah': https://en.wikipedia.org/wiki/Ptah
Firewall is 'anubis'.
Had a print server named 'loki'. Never again.
I’ll add a footnote to this post, it captures the spirit well.
If anyone has suggestions for things to add to my list it’d be much appreciated
"...a common ideological framework that appears across four engineering endeavors: the OLPC Project, the National Day of Civic Hacking, the Fixit Clinic, and the Stanford d.school."
Laurent Bossavit's "The Leprechauns of Software Engineering"[1] is fun and accessible. It claims that much of what we consider fact in software engineering is actually folklore.
The Tao of Programming is not a website. It’s a book. If you saw the whole thing on a web site, that was an illegal copy. Of course, it was also most certainly missing the illustrations, foreword, etc.
There is also many mistakes in your text: Where, in 1.1, your web page has “The user is pleased and there exists harmony in the world.”, my book (7th edition) has “The user is pleased and there is harmony in the world.” In 1.2, my book has “Each language expresses the yin and yang of software.”, but your text capitalizes: “Yin and Yang”. In the following paragraph, your text writes “COBOL”, but my book has “Cobol”. There are many more (including missing words, wrong words, etc.), but I don’t want to write them all here.
Buy the book.
i suggest you fix the errors in your copy of the page and post the url here
30 year old thing does thing that was common 30 years ago.
You know the book uses outdated terminology and probably doesn't use colour.
Pre-infocom Zork I-II-III's ambient (Dungeon) was obviously related to the MIT and its rooms. In Adventure, you explored the Mamooth Cave. With Zork, you learn about the "mystical place" of programmers with weird spells, magical-techy places (heck, Zork is anachonistic) and figuring out the mechanics by yourself as hackers do.
Turing meeting his end with the apple is an obvious one, but I'd rather imagine that, for having brought computing to the mortals, he's chained to a rock in perpetuity, when he attempts to port DOOM to the ACE, only to be foiled each evening when the moths show up and immolate themselves, destroying various valves, requiring him to start afresh each morning...
Shannon came down from the mountain and gave us sequences* of symbols; various later prophets (McCarthy, Crockford, etc.) have added new structures on top but it's difficult to go very wrong if one hews to the mitzvot of the old ways: after all, string homomorphisms stream.
(Rabin & Scott introduced monotapism in https://news.ycombinator.com/item?id=34561797 ; polytapists suffer [both in this world and any possible successor] by losing the grace of Boolean closure, for ever and ever. Amen)
Very near the Western Wall is a mosque whose wall contains the parallel port where Englebart (peace be upon him) plugged in the divine Mouse.
Every generation rediscovers Confucian Rectification of Names for themselves; that's why we have so many names for the same things in Informatics. (cue https://xkcd.com/927/ )
When Siddhārtha Gautama left the palace for the first time in his life, he encountered legacy code, bit rot, abandonware, and an Agda programmer. Shocked at the rampant suffering in software, he started his noble quest to free software...
* Die ganzen Zahlen hat der liebe Gott gemacht, alles andere ist Menschenwerk. — LK
When we were not writing code, we did chores around the monastery, usually I was sweeping the cobblestones or fetching supplies from the small town near by.
Some took to more technical chores such as managing the local area network of the monastery; there was no internet access but computers at the monastery could still communicate with each other locally.
Most days we would start off by listening to sermons from wise old programmers in the grand hall. The past Christian iconography had been taken down. The simple stone architecture that remained with its thick pillars holding up soaring ceilings far above our heads encouraged pure creative thought.
We did not sully our thoughts with pointless conversations, a brief nod while passing another programmer in the halls was enough social interaction for the day. Anything else could be taken online to the monastery’s IRC channels.
The best part was the libraries. Books upon books about programming that you’ve never heard of or even seen, that were never sold commercially. Binders filled with notes from ancient programmers printed on pages now yellowing with the passage of time. All manners of topics and languages were available here. Floppy disks with ancient programs, old punch cards, vintage machines and peripherals. Secrets that you could not learn anywhere else.
Maybe some day I’ll return and spend my days pontificating over a new generation.
Something like this would appeal to me, actually. It reminds me of Nesin Mathematics Village in Turkey. There are also some similarities to Recurse Center, where I did do a 3-month batch in 2017. It also has a library with some rare items, and a good collection of retrocomputing artifacts.
It all has it's place when compared to the bland seriousness of real work.
Now I obviously have a believable rational hypothesis for that behaviour but then it was mystical. I left the variable and got a passing grade (it was a student program).
Similar experiences I've had:
* Putting a big array on a stack (early in C programming career) - compiles fine, instant crash at runtime.
* Colleague discovers that a function needs padding with NOPs to achieve precise timing. Number of NOPs needed varies depending on code changes (even NOPs added or removed) in functions higher up the same source file.
* Occasional crashes in low level routines on ARM64 after changing completely unrelated code. The stack appears to contain a struct from elsewhere in memory instead of ... a stack.
(First one was probably just the array was too big for sensible stack management/ growth and a friendlier compiler would have just told me. Second one was to do with the size of memory pages in the flash - there was a delay if you ran over a boundary. Third one was, IIRC, the variable containing the base of a temporary stack occasionally getting splattered to point into other data structures! The actual stack was fine but you couldn't see it anymore)
That it needed padding wasn't unreasonable - we had tight timing constraints. It would have absolutely made sense for it to race with another part of the system but that didn't seem to be the nature of the interaction. The interrupt handler could always run when it wanted to.
The eventual deduction: the flash memory had 256 byte pages at hardware level. I inferred that there's some initial access cost to open a page (and probably cache it into SRAM or something).
The build was putting later functions in the file at later addresses, so what you put in other functions changed the alignment of the interrupt handler. If you requested 256 byte alignment for that function then you still needed nop padding but it was completely consistent.
St. Ignucious would not use the term 'FOSS': https://www.gnu.org/philosophy/floss-and-foss.en.html
First the target instruction set changes. You may have a `mov` for copying between registers but you may not. For that matter, you may not have registers. You probably can write raw bytes in the middle of an instruction stream for instructions that the assembler doesn't know about, and if you wrote the entire program like that, you'd (almost) have the binary itself.
Then there are common conventions like `label:` and being able to write basic arithmetic in a place that an instruction expects an immediate operand, but they're at the whim of whoever wrote the assembler. There's probably a macro layer or two.
There is a strong analogy remaining though. Some creator gave us the processor, with documentation of some quality about how to make the piece of sand do anything, and on top of that someone (who may have been the same creator but may not) usually writes mnemonics for the instruction set and from that, an assembler.
The core holy text for a given processor is then something like https://developer.amd.com/wp-content/resources/Vega_Shader_I... - an incomplete description of what the magic sand does, from which one who is sufficiently determined can construct arbitrary computation.
This article is meant to be humorous, but I think it unintentionally hit on some important truths.
Terry Davis Was Right
Religion Is Computing, Computing Is Religion
Terry’s big idea was that it is not possible to separate religion from computing.
Since the beginning, every complex society has been based on a shared socio-cognitive operating system, a religion. Your religion says you must live a certain way. It tells you what is valuable and what is disgusting. It gives you your fundamental paradigm and ontology of belief through which you interpret the world. It tells you to read certain texts, listen to certain traditions of wise men, and meet with like-minded others at certain places and times. It tells you to avoid certain influences, and seek out others. It gives you techniques for structuring thought and mind and memory. When you have doubts, it gives you procedures to ask for and receive insight. It tells you who you are, and what your life is for.
https://www.palladiummag.com/2022/04/01/palladium-is-now-tem...
I'm researching these ideas more since ChatGPT has shown me how to make certain religious and spiritual ideas more accessible.
Levandowski shut down his AI church after he got in trouble with the law for something unrelated. He was too soon, so it's only a matter of time one starts up again.
https://www.wired.com/story/anthony-levandowski-artificial-i...
Bonus link: Terrance McKenna. Culture is your operating system
Actual faith is orthogonal to all of the data and the logic.
Sacrifice not humanity on the altar of technology.
The Tao of Programming takes the trappings of Taoism but is not to be taken seriously as a religious or spiritual text.
When someone says a programming book is "the Bible of X" this is no more religious than when videogame creators refer to their documents collecting their fantasy world data as "their bible", as in "the Fallout bible". This is just borrowing the popular image of the Bible as the "authority" on something. It's common usage, not religious.
TempleOS is an outlier, and not a good example. Its author is arguably mentally ill. If I remember correctly he is also a bigot, and nobody would claim bigotry is an essential part of working with computers.
It's not true that most hackers are Buddhists, where's the evidence for that?
Folklore.org is about anecdotes about early Apple (I wouldn't discount some have religion as the background because I haven't read them all, but I can attest the vast majority are non spiritual in nature, and instead about nerds, tech and infighting). They are fascinating because Apple is a major player and its early history is full of quirky anecdotes. It's not folklore in the sense of gnomes and ghosts.
Stallman is an atheist; his "saintly" photo is a joke.
And so on, and so on. I know the author of TFA knows all this; I bet most readers of HN also do. So why am I such a bore?
Because someone will take this literally.
There may not be "illegal" people but there are people who gain entry by illegal means. There may not be "suicidal" software but there is software which is so recklessly constructed that it is bound to crash and burn regardless how brightly shines the gold it showers on its creators and acolytes. There is "original sin" in programming. There is a hell of a lot of venality.
Most programmers don't last either; their lords and masters recognize this, just as lords and masters throughout history have tolerated religiosity in their serfs... up to a point.
What's the difference between a person being religious and a person acting religious? To a non-believer I mean.
The most obvious one is the photo of Stallman that opens the article, posing as "Saint Ignucious": that's a joke, and Stallman is a self-declared atheist. Likewise, "Folklore.org" is a website about the early history of Apple; anecdotes told by the people who were there; there's nothing spiritual or mystic about it. I also explained many of the rest of TFA's examples.
The only exception is TempleOS, but that was the work of a schizophrenic and maybe not the best example of the hacker community at large. I wouldn't draw any conclusions from that particular example.
For example, do you believe Folklore.org is about what people commonly understand as "folklore"; or that Stallman believes himself a saint; or that programming "religious wars" (e.g. vim vs emacs, or Linux vs Windows) are truly religious in nature? Do you believe when people talk about the "Dragon Book" they revere it as a mystical book, or that someone believes the Tao of Programming is truly a religious text?
Religion has permeated and shaped common language so that a lot of the expressions we use originally had a religious meaning but don't anymore. Others, like "crusade" or "religious wars", or even "evangelize" are not meant to be taken literally, they just evoke religious imagery but nowadays often mean something else.
If someone does canonize Stallman, then Stallman's beliefs on the matter are similarly irrelevant. The "religious" behavior is exactly the same. There's just no supernatural element. But you already don't believe there's a supernatural element. So I guess I just don't get the distinction you're making here.
Just the idea that you think something can be "truly" religious exposes this for what it is: Your opinion on a thing. You're an atheist and you don't think anything is truly religious, right? All pictures of Jesus are a guy dressed as Jesus. I just don't understand why the picture of Stallman dressed as Jesus is different. To you I mean. I get why I think that but I'm a Christian.
Do you have any actual religious behaviors to point to that aren't already human behaviors? Because right now it's like, two guys are doing cartwheels. But one guy thinks cartwheels are very important so it's fundamentally different when he does them. The other guy was just doing cartwheels for fun so it's not the same.
> But you already don't believe there's a supernatural element
I didn't mention my own beliefs whatsoever. In order to note all of the examples in TFA are wrong, I don't need to refer to my own beliefs.
The rest of your comment... I just don't know how to engage with it. So I guess I won't.
I couldn't answer this either! And that was the day I stopped hating religious people or seeing myself as somehow different or better than them.
This may shock you but I don't hate religious people. I guess good for you that you stopped hating them?
You assume way too much. I notice you failed to respond any of my questions, and so I'm uninterested in continuing this conversation.
The difference is that the religious really believe in their nonsense. While the people "acting religious" are actually making fun of it.
But religiosity or mysticism? Not in programming, though of course individual hackers probably run the gamut from religious to atheist, with all beliefs in between.
TFA is a joke, by the way. The author obviously understands this. But I'm worried it will get interpreted literally. For example, by the person who submitted it to HN.