I was reading The Realities of 21st Century Defense Contracting1, and I was struck by an observation that seems obvious in hindsight: the command line is basically always cheaper than a graphical interface. A couple of quotes from that article that put this into perspective for me:
Why can’t I program a bomb like I use my iPhone? …
Writing good software is difficult, expensive, and time-consuming. As consumers, we are spoiled by how easy our phones are to use. Critics expect the military to have software as capable as our phones.
If you examine the numbers, it quickly becomes apparent that the military can’t afford iPhone-level software. Apple, Google, Microsoft, and Facebook had combined operating expenses of over $600 billion in 2021. The military’s total budget is around $750 billion.
The mass of all the physical products these companies sell is probably less than one Ford-class aircraft carrier, and the number of SKUs is relatively limited. And remember, a defining feature of the software business is that marginal cost is near zero. It costs about the same to design high-quality software for 100 F-35s as for 200 million copies of the plane.
Yikes.
And:
A better approach is to ditch the user customization. You can give soldiers something akin to a “big red button” requiring fewer inputs using modern software (like neural nets) and information derived from the protocol to calculate or fill in the rest. Specialists can still make changes using universal interfaces like the command line and command line code editors. And no self-respecting military would deploy something like an artillery piece without manual controls and troops trained to do basic ballistics calculations.
(Emphases mine.)
Interfaces for niche users
This low price unlocks the ability to serve smaller groups of users, or even write software for just a sinlge user. This is really exciting!
I love software that amplifies the power of an individual. A GUI might be nicer all else being equal, but a CLI is the only way some software can be built at all.
- It is much easier to add functionality to the command-line. Contrast the functionality crammed into the Excel user interface with the power available in SQL. Excel is surely easier to use and even more surely easier to learn. How much did it cost Microsoft to accomplish that?
- It’s much easier to design a command-line. An individual developer can follow some basic patterns and get a decent command line interface working right away; even a prototype graphical interface can take days or weeks. Graphical icons is one reason, and the infinite canvas is another. The command line is a perfect combination of unlimited power and finite design space, making development very fast.
- When building something for yourself, you rarely need a graphical interface. If you are enough of an expert to build it, you definitely have the expertise to operate a command line interface to it. This means that designers scratching their own itch isn’t as powerful as developers with the same motivation.
- Designing a command line interface by committee is much less of a disaster than designing a graphical interface by committee. This is a really useful feature for both bureaucratic corporations and open source do-ocracies.
-
I recently discovered https://austonvernon.site. I can’t believe the wealth of information on hard tech and engineering projects it offers. Everything I’ve read there has been excellent; if I had to pick a single article to recommend, it would be Can Nuclear Power Manage Another Comeback?, which is about not just an answer to the titluar question but an incredibly exciting exploration of new nuclear power startups and what might happen in the near future. ↩︎