Amish Programming
I admit, I have felt my share of JavaScript fatigue. But it's not just JavaScript. It's Rust. It's LLVM. It's Webassembly. It's containers. It's the flavor of the week. It's FOMO. It's the everything remixed with everything else. It's the you-scratch-my-back-and-I'll-scratch-yours. It's everything competing with everything. It's the Highlander there-can-only-be-one competitive Darwinian madness. It's complexity building up over years, decades, centuries, millennia, and more.
Carl Sassenrath's plea that we are enslaving ourselves to our technology struck a chord with me. The early days of computing were fun because the complexity was low enough that you can understand the whole system and diagnose problems yourself. Granted, this was not for everyone, perhaps more for self-motivated tinkerers.
In the technology of today we see layers and layers of abstraction. We see a plethora of rigid systems and rules we have to work around. Interim solutions become permanent fixtures, and we keep piling them on. No one engineer understands the whole system. Departments and departments of engineers who need to be managed. Code whose owners we can't identify. Code whose owners are now gone. Jonathan Blow makes the case that the software industry is in a period of decline. We are losing control of our technology. I haven't mentioned AI yet (oops! now I did), but we don't have to.
The Amish
I studied the Amish people from the comfort of my own home and have grown to admire the way they live. One thing that stood out to me is that although all Amish people resist technology, different Amish groups do it to different extents.
The Mennonites are a group that split off from the Amish, although they still retain much of the Amish tradition. A main difference between them and the so called Old Order Amish is their acceptance of motorized vehicles. Josh is a Mennonite and you can see that he drives a truck, has a smart phone, yet he considers himself to be the middle of the spectrum in terms of receptiveness to technology within the wider Amish community. He puts restrictions on his phone to block porn, among other things. Only his wife has access to his blockers.
The Swartzentruber in contrast reject cars, in-house toilets, and any electricity-powered devices. They ride around in horses and buggies and do their farming chores in the absence of any motors or engines.
Forks of the Amish
While the Mennonites are a major fork of the Amish. They are by no means the only one. The Mennonites themselves have many subgroups, one of which is funnily named the Beachy Amish. There's the Old Order Amish, within which the Swartzentruber is a subgroup. There's also the New Order Amish. A much more complete list of the various Amish subgroups can be found here on wikipedia.
One thing that struck me is the smallness of Amish communities. Amish communities organize around churches. Each church usually serves only between 20 to 40 families. Even if you have large families, say 7 per family: 40 * 7 = 280 means there'd only be about 200-300 people per community. Their schools are so called "one-room schools" where all students attending the school reside in one single room. This one-room school in particular supports 10-17 families. When the children in a family grow up, the size of the community does not necessarily increase because they usually leave to join a different church.
Each community has the freedom to decide on their own rules, including which technologies to adopt and which to reject. They are not bound to some "pope" who decides how everyone should behave. I think this is why there's such variation within the wider Amish community. They are organized in a decentralized way.
Self-Sufficiency of the Amish
The Amish are fiercely self-sufficient. Although they do not hate the government, they hate being dependent on the government, as evidenced by:
- They do not pay for health care, but instead pool their funds together to create a charity to help those who need help paying for hospital bills.
- During the aftermath of the Covid pandemic when the government handed out checks, they did not cash their checks because they believed you should work for what you earn.
Programming the Amish Way
I think we have a lot to learn from the Amish. In that vein, I'd like to imagine what programming would be like if we took the values of the Amish to heart.
1. Programming Language
A community will not use more than one programming language.
- The Swartzentruber would choose Assembly.
- The Old Order Amish would choose C.
- The Beachy Amish would choose Go.
Fancy and/or feature-rich languages like Rust, C++, TypeScript, and Haskell are not in the Amish tradition.
2. Libraries, Packages, Frameworks, APIs
This is an area where most software shops could use some Amish values. I've been on many projects that used a plethora of 3rd party dependencies. This invariably bogs down both the user experience and the developer experience.
- Swartzentruber: disallow use of any 3rd party libraries, packages, frameworks, or APIs.
- Old Order Amish: only allow the use of 3rd party header-only libraries after the code has been reviewed.
- Mennonites: a 3rd party library may only be used after its code has been reviewed, tested, and vetted by the congregation.
3. Programming Resources
- Swartzentruber: No access to the internet is allowed. Use the manual for your micro processor.
- Old Order Amish: The C Programming Language is your bible.
- Beachy Amish: use the official go documentation. Unsavory websites such as Stackoverflow are blocked.
4. Development Environment
- Swartzentruber: as and ed.
- Old Order Amish: gcc and vi.
- Mennonites: Golang and VS Code with the official Go extension.
5. Open Source
- Beachy Amish: You can download and fork, but don't send me pull requests.
- New Order Amish: Don't use Github or any 3rd party code hosting service. If you want to share your code, write your own server to do so.
- Old Order Amish: Use floppy disks or print the code on paper.
- Swartzentruber: Don't share code. Keep it under your pillow.
New Age Amish JavaScripter
Full circle back to JavaScript. Despite my JavaScript burnout, I still partake in JavaScript recreationally, occasionally. Much to my delight, I've found a new way of doing things that allows me to be more Amish-like, ironically thanks to an advancement in browser technology. That advancement is .mjs JavaScript modules.
With .mjs I can separate my code into small files and use export
and import
statements to combine them
without having to install anything. No Node.js, no webpack, no esbuild, no TypeScript, no nothing. All I need is a browser that supports .mjs (I use Chrome), and an HTTP server
in order to support Ajax requests, for which I use Python's built-in http module:
python -m http.server 8000
Occasionally I have to "hard reload" the browser because Chrome is pretty aggressive about caching
.mjs
files, but I am happy to cope with this inconvinience to avoid the alternative.
Luddite Solutions Don't Work
Daniel Schmachtenberger made the point that "Luddite solutions don't work even if they would be better". When you resist technology, you put yourself at a competitive disadvantage and will eventually be eliminated.
whether it was China engaging with Tibet, whether it was colonists engaging with Native Americans, whether it was Ghangis Chan or any of his guys engaging with more peaceful tribes that were smaller...peaceful tribes lose at war.
The people who inhibit the world today were selected for being good at war and economic prosperity, because people without those abilities have been phased out of existence either by direct warfare or by their population dwindling vs the competition who is better at propagating. So his hypothesis goes.
Although I used to wholeheartedly believe his perspective — which had made me quite sad, in the Amish I have found the ammunition to mount a counter argument. The Amish population is tiny vs the rest of the world. As a point of comparison, the total U.S. Amish population in 2020 was 373,620; the population of the city of Atlanta in 2020 was 6,017,000; the total U.S. population in 2020 was 331,449,281; the world population for 2020, from the estimates I've seen is ~7.8 billion: 7,800,000,000. However, the Amish population is by no means dwindling, in fact, its growth is accelerating. Based on the Historical population table in in the Wikipedia page, you will see this growth trend:
Just because you are not growing as fast as your so-called "competition" does not mean you will be eliminated out of existence. If anything, I am extremely impressed at the Amish's evolutionary competitiveness given such a severe handicap.
But the Amish are not the only ones. There are many indigenous people living still in the present day. An estimate given in a book in 2012 put their total estimated population between 250-600 million. With a quick look though the list I estimated there are ~1500 different indigenous groups living in 11 major regions in all continents of the world except for Antartica. There's a great diversity to them, so I hesitate to make any general statement about how well they are doing, but one thing for certain is that they are still around in great numbers, and still surviving.
Closing Thoughts
Technology is not unanimously good. The Amish do not reject out right any technology, but rather they are thoughtful about adopting new technology. They understand that any piece of technology can have both good and bad effects, and they want to properly take both into consideration before moving their community onto it. They also have a culture of small sub-communities and decentralized control. This prevents any particular technology from spreading too quickly, in contrast to the Instagrams, TikToks, and ChatGPTs.
Should software projects use more Amish values?