Excellent analysis.<p>I'd like to add that "growth over time" also solves the "No Silver Bullet"[1] paradox: while Brooks's analysis[2] seems obviously correct, we also obviously have code that seems orders of magnitude larger than it has any business being[3].<p>As far as I can tell, Brooks doesn't consider cumulative effects of growth over time, but only a single iteration of analysis → development. So a 20% difference in efficiency is just a 20% difference in outcome. However, that same 20% inefficiency per iteration yields a 40x difference in outcome over 20 years. Compound interest.<p>[1] <a href="https://en.wikipedia.org/wiki/No_Silver_Bullet" rel="nofollow">https://en.wikipedia.org/wiki/No_Silver_Bullet</a><p>[2] "there is no single development, in either technology or management technique, which by itself promises even one order of magnitude [tenfold] improvement within a decade in productivity, in reliability, in simplicity.<p>[3] MS Office is >400MLOC. Xerox PARX had "personal computing" in ~20KLOC. Even assuming MS Office is 100x better at "officing", that leaves 99.5% of the code unaccounted for. Similar analyses can be done for web browser (WWW.app, 5KLOC, Mozilla 15MLOC) and other operating systems etc.
Code inflation nicely cancels out gains from Moore's law. But there's also another interesting phenomenon seen in embedded <i>hardware</i> - it seems that each generation of devices has more (exponentially more?) computing power on-board, while the user-facing functionality stays the same or even slightly degrades. For example, the functionality of today's fridges, kettles and washing machines is equivalent to those made 20 years ago, but today's versions will break down faster and in ways nigh impossible to fix by yourself.<p>We're about to have <i>Android</i> running on toasters. And I can't stop myself from asking the question - <i>why</i>?
Some days I'm inclined to rant about software bloat. I've often quoted or paraphrased a bit of dialogue from the Scott Meyer novel _Off to Be the Wizard_ that's kind of funny but also pretty sad:<p>Phillip (time traveler from 1984): What on earth can a person do with 4 gigabytes of RAM?<p>Martin (from 2012): Upgrade it immediately.<p>But on the other hand, some of what might be perceived as bloat is really useful, even <i>necessary</i>, to someone. For example, show me a "light" desktop operating system, Unix desktop environment, or web browser, and I'll probably tell you that many of my friends couldn't use it, because they're blind. (As for me, I'm legally blind, but I have enough sight to read a screen up close, so I don't <i>need</i> a screen reader, but I often use one.) Accessibility requires extra code. In Windows 10, UIAutomationCore.dll is about 1.3 MB, and will no doubt get bigger as Microsoft continues to improve the accessibility of Windows. But you can't write that off as bloat.<p>Elsewhere on this thread, there was some discussion of microcontroller software versus Android. A user interface written for a microcontroller with a screen is inaccessible to a blind person, except by memorizing a sequence of button presses, if the UI is simple enough and the device has physical buttons in the first place. But if the device is running Android, the infrastructure for accessibility is there; just add a text-to-speech engine and TalkBack (edit: and make sure the application follows accessibility guidelines). That ain't gonna fit in 1 MB or less of flash and 512K or less of SRAM. So sometimes we may be inclined to rant about bloat, but there's actual progress, too.
There is a small irony here in the author's use of histogram plotting that performs meaningless perspective rendering - one of the features that has contributed to document-creation software bloat.
> It sometimes seems as if [software] has just gotten bigger, but not safer. So why is that?<p>The premise for the article. But it provides no proof of it. And I can just as well say "for me it seems software in general have gotten much safer over the years, because I barely remember a time a program crashed."
Results of code review of false.c:<p>* Use of undocumented magic numbers (1)<p>* No use of getter/setter pattern<p>* Inflexible design (datatype of result is fixed, no template pattern implemented)<p>* Manual memory management (no garbage collection used)<p>* No infrastructure for automated testing included<p>* No unit tests available<p>* Code has not changed for Years (code smell!); Probable stale code, to be removed in next release.
The article briefly mentions <i>cat</i>, but there's more to say there: <a href="https://news.ycombinator.com/item?id=11341175" rel="nofollow">https://news.ycombinator.com/item?id=11341175</a>
<i></i>TLDR<i></i><p>Author rants about how the size of the executable for the Unix `true` command has increased "exponentially" from 0 to 22KB over ~30 years, for no apparent reason other than "because it can", referring to cosmology, of course.<p>"...true and false commands also don’t need an option that can invert the result, or one that would allow it to send its result by email to a party of your choice."<p>The article is humorous in nature, but not without a point.<p>OP, thanks for sharing the article.