HACKER Q&A
📣 minzi

What Are the Laws of Software?


I was reading the article "A Few Rules" that was posted yesterday and Housel brings up the idea that most fields only have a few laws. This idea in the context of another recently posted article titled "People expect technology to suck because it actually sucks" have me wondering whether some core laws might be beneficial to software engineering. Sorry if the question is naive. I am only an undergraduate and I study more math than cs.


  👤 scott31 Accepted Answer ✓
Rule 1. You can't tell where a program is going to spend its time. Bottlenecks occur in surprising places, so don't try to second guess and put in a speed hack until you've proven that's where the bottleneck is.

Rule 2. Measure. Don't tune for speed until you've measured, and even then don't unless one part of the code overwhelms the rest.

Rule 3. Fancy algorithms are slow when n is small, and n is usually small. Fancy algorithms have big constants. Until you know that n is frequently going to be big, don't get fancy. (Even if n does get big, use Rule 2 first.)

Rule 4. Fancy algorithms are buggier than simple ones, and they're much harder to implement. Use simple algorithms as well as simple data structures.

Rule 5. Data dominates. If you've chosen the right data structures and organized things well, the algorithms will almost always be self-evident. Data structures, not algorithms, are central to programming.


👤 smoyer
If this isn't the canonical source, then improve the list by submitting issues and/or pull-requests! - https://github.com/dwmkerr/hacker-laws

👤 jessehorne
I'll give it a go. Here's some "commandments" I just came up with.

1. Thou shalt not skip out on proper documentation, otherwise you and your comrades will suffer the consequences within time.

2. Thou shalt use appropriate standards developed by yourself, your team and the community surrounding your tools.

3. Thou shalt take breaks

4. Thou shalt understand the problem in full before approaching a solution

5. Thou shalt value the time of yourself and your users

I could keep going...


👤 atsaloli
“The Primary Law of Software Design” is relevant here.

https://www.codesimplicity.com/post/the-primary-law-of-softw...


👤 kazinator
Software that is maintained only increases in size until it is no completely unusable on the original hardware. Each successive update leaves less flash space and RAM for the user's payload.

👤 greenyoda
How do you define "law"? Do you mean statements about the fundamental nature of physical reality, like the laws of motion or the laws of thermodynamics, or do you also include rules of thumb like Moore's Law?

👤 ericb
The book "The Mythical Man-Month" has some of those laws built in.

👤 brudgers

👤 AnimalMuppet
The most general problem cannot be solved.