19 comments

[ 2.9 ms ] story [ 52.0 ms ] thread
Good list. If only project management people read this, maybe then sky would be brighter on programming horizon.
...where is this purported data?
I'm intrigued by the one law (unless I missed something) that he says definitely no longer applies:

> Wirth's Law

> Software performance gets slower faster than hardware speed gets faster.

> This law was formulated by Niklaus Wirth during the days of mainframes and seemed to work for them. However, for networked microprocessors and parallel computing, the law no longer seems to hold.

Certainly it holds for some things. My first computer (late 1970s) started up in less than a second. A decade later I had to wait perhaps 20 seconds. Today waiting a full minute for a computer to get to a usable state is not at all unusual. On the other hand, we have Google, which, in a fraction of a second, can do things undreamed of only a few years ago.

This leads to what I think is an interesting line of inquiry. What kids of software does this law still apply to? Why does it apply there and not elsewhere? And what can we do about it?

It applies to the bloat in software development nowadays with layers on top of layers that seldom add any real value to the product.
That is definitely the myth, where is the non-anecdotal evidence that this statement is actually true?
"Spending Moore's Dividend" was a 2009 CACM article (paywalled):

http://cacm.acm.org/magazines/2009/5/24648-spending-moores-d...

Microsoft Research has a version of the article (not exactly identical):

http://research.microsoft.com/pubs/70581/tr-2008-69.pdf

I also discuss this in my (unfinished) book, with lots of data:

http://www.amazon.com/Objective-C-Performance-Tuning-Develop...

The whole book is / will be (well, the manuscript is) full of examples of techniques that are 2x, 10x or even 100x slower than necessary, but now "recommended practice", often for no discernible benefit.

Nothing in the Larus article states that extra software overhead is just wasted without any real benefit; we do get benefits from it:

* Increased functionality

* Increased programmer productivity (programmers are often more scarce than available CPU cycles)

* The bottlenecks have changed

The thesis being challenged in grandparent (pjmlp):

> It applies to the bloat in software development nowadays with layers on top of layers that seldom add any real value to the product.

implies that we are just being wasteful for no real benefit, but we are obviously getting more functionality in or writing more software via increased programmer productivity. Now that power is more of an issue for mobile, we are seeing programmers be more thrifty again, but that is not without a cost in productivity.

For example:

- Compiling to a VM + JIT instead of AOT compilation

- Running a programming language VM with an OS agnostic runtime, on a OS VM running on a hypervisor, instead of running the said programming language VM on top of the hypervisor directly

- Use of data structures and algorithms that take much more memory and are slower, because many developers lack proper knowledge to use the right ones and use whatever first result comes on their IDE completion suggestions

Just a few examples out of my head.

> Compiling to a VM + JIT instead of AOT compilation

Sun tried this and the code actually got slower.

> Running a programming language VM with an OS agnostic runtime, on a OS VM running on a hypervisor, instead of running the said programming language VM on top of the hypervisor directly

Flexibility to run on a VM is a huge time saver.

> Use of data structures and algorithms that take much more memory and are slower, because many developers lack proper knowledge to use the right ones and use whatever first result comes on their IDE completion suggestions

Cheaper (less skilled) programmers means more code can get written (for better or worse).

> Sun tried this and the code actually got slower.

Who is speaking about Java here?

Optimizing compilers for other languages are a proof that AOT compilation at the end wins.

> Flexibility to run on a VM is a huge time saver.

Of course it is, we just don't need the huge amount of layers the current VM cakes have. Software needs to go to the gym.

> Cheaper (less skilled) programmers means more code can get written (for better or worse).

Ergo less quality that leads to software bloat like Wirth states.

Your original point was that the layers served no value, but you are agreeing that they do serve value, just not the value that you particularly appreciate.

Worse is better. At least better than nothing.

I said VM concept is useful, after all it is how all modern operating systems are implemented, by making use of virtual resource management.

Other than that, I stand by my point that modern software has lots of bloat of useless layers.

>Certainly it holds for some things.

Two points: 1) at one point in time, I triple booted between Windows, BeOS (yes it's a long time ago) and Linux: Linux and Windows booted far slowly than BeOS (don't remember exactly but it was >1min while BeOS was 14sec) and afterwards felt less responsive than BeOS.. BeOS is dead though (yes, I know about Haiku).

2) Buy a SSD and you won't have to wait anymore 'a full minute' to have your computer in an usable state..

> Ward Cunningham's technical debt concept is a great metaphor, but not such a great metric. Technical debt omits projects canceled due to poor quality. Since about 35% of large systems are never finished, this is a serious omission.

In my experience, projects large and small are typically cancelled because executive management changes their minds, not because of poor quality.

Certainly there are lots of famous examples of projects that crumble under their own weight, but I really don't think it's anything like 35%.

Business goals change (for better or for worse), market conditions change, egos change, etc.

One cultural difference seems to be that a CEO of a Fortune 500 company who writes off a billion dollar investment due to a change in business strategy is a visionary who makes brave decisions, but anyone who writes off a project/division due to a billion dollars in technical debt is going to be tarred and feathered for blundering.

While this list is certainly educational, remember that most of these "laws" are heuristics based on personal experience.

The discipline of software development is about as rigorous as parapsychology. To learn what we really know about software, I recommend Making Software: What Really Works & Why We Believe It[1], The Leprechauns of Software Engineering[2], and browsing It Will Never Work in Theory[3].

And no matter what languages, testing frameworks, or methodologies you use, always remember:

Every "bug" or defect in software is the result of a mismatch between a person's assumptions, beliefs or mental model of something (a.k.a. "the map"), and the reality of the corresponding situation (a.k.a. "the territory").[4]

If you want your map to reflect the territory accurately, you'll need more than a few "laws" handed down as gospel.

1. https://www.amazon.com/Making-Software-Really-Works-Believe-...

2. https://leanpub.com/leprechauns

3. http://neverworkintheory.org/

4. http://lesswrong.com/lw/2rb/why_learning_programming_is_a_gr...

That's what struck me: the use of the word "laws" to describe what are, at best, "principals", seems particularly inappropriate and pretentious.

I have the image of a self-titled "software engineering consultant" trying to gain prestige (and funding) by using lots of big words (i.e. bullshitting).

Pretty sure the word choice was for effect -- like Murphy's Law.
Article seems nice, but without data it's rather hollow.
Google doesn't seem to know about "Hartree’s law" outside of this article...