What I love and hate about modern computers
I found this
article, called Software Disenchantment
, on the Internet
today about how disenchanted the author has become with modern
software engineering, and I have had similar thoughts after a similar
number of years as a software engineer. It is nice to know I am not
the only one among my peers who feels this way. When I was a kid
growing up with 8-bit, 16-bit, and then 32-bit computers, the future
seemed bright. Some technologies I expected would happen (like video
phones, photorealistic 3D graphics), some technologies I could never
have imagined in my wildest dreams, for better (massive, world-wide
collaborative projects like Wikpedia) or for worse (deep fake images
of people's faces, voices).
But working as a software engineer is soul-crushing work nowadays because every project I work on is so superfluous while also doing nothing to help solve the world's most pressing problems. It is mostly just trying to squeeze out a bit more performance from applications that should probably not even exist to begin with, especially for companies selling a "service" to customers as a pretext for exploiting data about people's private lives to sell ads. And it seems the majority of jobs are in this same vein, so it is not just a matter of changing employers.
At the same time, there is a prevailing sense that the tools and techniques most commonly used throughout the industry are clearly not the best way to solve software engineering problems, in particular regarding fact that the web browser is the dominant app platform nowadays. And as an app platform, the platform is built entirely on short-sigted design decisions made decades ago that are stifling modern innovation. The entire engineering pipeline, from initialization to deployment, is a long chain of carelessly hacked-together subsystems all held together with duct tape and rubber bands.
But then, there is lots to love about modern computers as well. So it got me thinking: what if we could get rid of the bad and keep the good of modern computers? What would I keep, what would I banish?
What I like:
High bandwidth
an abundance of computing power, memory, storage space, and the ability to transfer vast quantities information around the world effortlessly.
Unicode, emojis, tons of type faces
This doesn't just make for good fun, and nice graphics, it is genuinely a privilege to live in a world where nearly any and all of the world's written languages can be displayed on my computer.
Security (SSH, GPG, Tor)
If everyone is going to have a computer, we need the tech to keep our personal information secret. We have this now, and though it necessarily takes a lot of computing power, I wouldn't want to do without it, especially since there are so many companies out there who's entire business model is exploiting you for your personal information, as I talk about more later.
Static type checking
In particular, I am thinking of the Lambda Cube, formal methods, and programming languages like Haskell and OCaml. These have introduced another major innovation in software engineering, unfortunately egregiously under-used in industry.
The "Elm Architecture" GUIs
Sometimes called immediate mode GUIs, React.js and Vue.js are examples of this architecture. This has been a major innovation in software engineering that I would never want to do without.
Video phones
I love talking to friends or family in other countries whenever I want. Video compression technology has come a long way, and so has the amount of bandwidth provided by the Internet. But there are downsides to this as well, as I mention below.
Books, games, TV on demand
There is no shortage of fictional stories to experience, or of non-fictional things to learn about. And it comes in so many different mediums now: books, video, audio, and interactive games of all kinds. Of course, this leads to corporations competing for your attention so they can sell more ads, which means making high-quantity, low-quality content that cause people to get addicted to their screens for the sake of selling more ads, and also makes them more susceptible to propaganda. But I do like having access to the worlds largest library at all times.
GPS maps
I would literally be lost without this, especially while living in a big city. But it also helps make the most remote parts of the world feel familiar to me, which is a privilege.
Meeting so many people
For all the bad things about social networks, I love being
connected to so many different people. I always talk with people
online, an I have learned so much, I can say without exaggeration that
the ability to talk with so many countless people has completely
changed my view of humanity. There is a dark side to all of this, and
that is that it leads to the creation of echo
chambers
.
What I hate:
The web as a software platform
Everything wrong with modern web browsers could fill several articles. Let me just say that the arc of software industry history managed to converge upon the absolute worst, most inefficient solution to the problem of creating a universal software platform. Upcoming technologies like WebAssembly may yet solve this problem, and maybe then the web as a platform will finally become a good software platform. But it isn't quite there yet.
Technology is a popularity contest
Languages like Python and JavaScript are at the center of it all,
the two most popular programming languages nowadays, both of which
are easy to use
, which is industry jargon for they let us
pay a bunch of low-wage boot-camp graduates to rewrite the app from
scratch again and again every 2 years using the latest frameworks
because it is cheaper than hiring experienced software engineers to
maintain a code base written in Python or JavaScript.
The
industry expects your app to be obsolete in 2 years, they
expect the original developers to move on to their next gig in 2 years
leaving their replacements with little other option but to rewrite
from scratch. They expect you to only use the most popular
programming languages and frameworks because this is just how things
are done and it has high profit margins, quality be damned. It is
consumerism and planned obsolescence applied to software.
Using well-typed languages, like Haskell in place of Python, and PureScript in place of JavaScript, would make code bases more maintainable. It doesn't have to be Haskell, any language that provides better type checking will do. But common wisdom suggests you use popular programming languages to develop your app, so nobody uses well-typed languages because they aren't popular, and they aren't popular because nobody uses them. Our economy just does not incentivize quality engineering.
Touch screens
Touch typing is the by far the most efficient way to use a computer, touch screens are a regression in human-computer interfaces, they are stunted interfaces. But too many people have been convinced that your fingers are all you need to operate a computer, and the more people become convinced of this, the less incentive hardware manufacturers have to continue selling computers with keyboards. There will probably always be hardware manufacturers to appeal to people like me who are becoming a niche audience, but this is the whole problem, the market is creating a vicious cycle of normalizing stunted user interfaces and pushing touch typing out to the margins.
Video teleconferencing ("Zoom meetings")
Video phones have their drawbacks, but this is not a problem of technology, it is a problem of giving powerful tools to inept managers of the labor force and expecting these managers to do the right thing.
Household appliances tracking my every move
Many modern appliances are made needlessly complicated with computers, not because customers demand this complexity, but because the manufacturers demand that their customers be exploited as sources of data for advertisers.
More ads than ever in human history
Appliances have computers in them to gather data about people so people's data can be sold to advertisers for profit. But profit margins would be better if less money was being spent on the complexity of equipping everything with a computer. It is a vicious cycle that has turned absolutely everything and everyone, even their mind, and to what things their mind is focused on, into an commodity for exploitation by corporations.
Torrents of propaganda and misinformation
The flip side of being able to talk to anyone in the world is that anyone can talk to you, even psychopaths who want to manipulate you and thousands of people like you for their own personal gain.
And we see how easy it is, especially for people who have really
fallen through the cracks of modern society, who already sympathize
with hateful, bigoted ideologies, and look for solace in communities
on the Internet. For a bad actor trying to exploit these vulnerable
people, it is so easy to start a rumor of some horrible injustice in
an online community, and everyone in the circle repeating the rumor
among the circle gives the impression that the rumor is true and that
everyone in the world is concerned about it — this is
the echo chamber
. And of course, the narrative of the rumor
concludes with the assertion that those evil other
people
have cleverly made it impossible for justice to ever
be served. We see time and again how this leads to stochastic
terrorism and mass killing incidents.
The solution is easy to state, but not easy to do: that is simply that we should never let people fall through the cracks of society. A healthy, happy person can easily resist the lure of hateful, bigoted ideologies. So create a world where no one ever becomes amenable these ideologies. It sounds impossible, but if we all work on it together, it can be done.
Walled garden software
You use software, but software uses you. The relationship can be symbiotic, or parasitic. If the goal is to exploit people for their personal data, (to be parasitic), software that contains all the secret ingredients to do so is the magic by which this exploitation happens. A symbiotic relationship with software requires the user (or a person who they trust) know everything about how that software works, this is what free/libre open source software (FLOSS) provides, and is defined as the antithesis of walled-garden proprietary software.
Abundance encourages waste
The problem of dependency hell is really hard to solve, so instead of solving it, the standard industry practice is to just use the vast bandwidth of modern computers to cover up the problem. For example, when software companies use Docker, they throw up their hands and declare the problem unsolvable, and they just ship the full state of the software developer's computer to the customer, consuming an egregious amount of bandwidth in the process. And most of the software industry accepts this as a de-facto standard practice nowadays. Software like Nix and Guix actually do solve this problem, but theses solutions introduce their own problems as well — that said, Nix/Guix is clearly the way we should all be developing and delivering software, but very few people do.
What I hope never changes:
These are the fundamental truths of computers: things that have always been true about computers, are still true today, and I hope will always be true.
FLOSS, Creative Commons
This is a philosophy of community, sharing, honesty (not keeping secrets), mutual trust and respect, but applied to the relationship between the software developer and their end user. Creative Commons is similarly in that it is a mutually respectful relationship between an artist and their fans.
Lisp REPLs
A Read-Eval-Print Loop (REPL) gives one the ability to have a conversation with your computer as you describe what you want and how you want a problem to be solved. Lisp just happens to be the best computer language for programming a software in a REPL. Other languages have REPLs too, but they tend to fall short of the features that Lisp REPLs provide.
Also, there is a minimalist elegance and beauty to the Lisp language that cannot be replicated in other languages — if it is replicated in another language, that language becomes a member of the Lisp family by it's very nature.
Mechanical keyboards
Touch typing will always be the most efficient way to use a computer. Mouse or touch screen input will never come close to the rate of communication from a human to a computer that you can achieve with a keyboard, and voice recognition is not as private as typing, and not as practical either, especially when writing code where there may be no easy way to express syntax or symbols as spoken language.