Ask HN: 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.
14 comments
[ 3.2 ms ] story [ 43.5 ms ] threadAnd that's before we talk about cross uses. Your web browser can't also be a good IDE. Your DB can't also be a good general-purpose OS. And so on.
https://www.codesimplicity.com/post/the-primary-law-of-softw...
https://cpsc.yale.edu/epigrams-programming
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...
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.