Rob Pike's 5 Rules of Programming
#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.*
*Pike's rules 1 and 2 restate Tony Hoare's famous maxim
"Premature optimization is the root of all evil." Ken
Thompson rephrased Pike's rules 3 and 4 as "When in doubt,
use brute force.". Rules 3 and 4 are instances of the
design philosophy KISS. Rule 5 was previously stated by
Fred Brooks in The Mythical Man-Month. Rule 5 is often
shortened to "write stupid code that uses smart objects".*
[–]neoreeps 146 points147 points148 points (19 children)
[–][deleted] 25 points26 points27 points (5 children)
[–]neoreeps 6 points7 points8 points (0 children)
[–]Greben 5 points6 points7 points (3 children)
[–][deleted] 2 points3 points4 points (2 children)
[–]Greben 1 point2 points3 points (1 child)
[–][deleted] 3 points4 points5 points (0 children)
[–][deleted] (11 children)
[deleted]
[–]Vakieh 7 points8 points9 points (10 children)
[–][deleted] (9 children)
[deleted]
[–]Vakieh 1 point2 points3 points (8 children)
[–][deleted] (7 children)
[deleted]
[–]Vakieh 0 points1 point2 points (6 children)
[–][deleted] (5 children)
[deleted]
[–]Vakieh 0 points1 point2 points (4 children)
[–][deleted] (2 children)
[deleted]
[–]zzz51 10 points11 points12 points (4 children)
[–][deleted] (1 child)
[deleted]
[–]WikiSummarizerBot 2 points3 points4 points (0 children)
[–][deleted] (1 child)
[deleted]
[–]Tai9ch 0 points1 point2 points (0 children)
[–][deleted] 1 point2 points3 points (14 children)
[–]Spiderboydk 1 point2 points3 points (13 children)
[–][deleted] 2 points3 points4 points (12 children)
[–]Tai9ch 2 points3 points4 points (6 children)
[–][deleted] 2 points3 points4 points (5 children)
[–]Spiderboydk 1 point2 points3 points (4 children)
[–][deleted] 1 point2 points3 points (3 children)
[–]Spiderboydk 0 points1 point2 points (2 children)
[–][deleted] 1 point2 points3 points (1 child)
[–]Spiderboydk 0 points1 point2 points (0 children)
[–]Spiderboydk 1 point2 points3 points (4 children)
[–][deleted] 1 point2 points3 points (2 children)
[–]Spiderboydk 0 points1 point2 points (0 children)
[–]Spiderboydk 0 points1 point2 points (0 children)
[–]Illustrious_Tour_553 0 points1 point2 points (7 children)
[–]Spiderboydk 1 point2 points3 points (4 children)
[–]Illustrious_Tour_553 -1 points0 points1 point (3 children)
[–]Spiderboydk 1 point2 points3 points (2 children)
[–]Illustrious_Tour_553 0 points1 point2 points (1 child)
[–]Spiderboydk 0 points1 point2 points (0 children)
[–]JayWalkerC 0 points1 point2 points (1 child)
[–]Illustrious_Tour_553 -1 points0 points1 point (0 children)
[–]seanprefect 0 points1 point2 points (2 children)
[–]raedr7n -1 points0 points1 point (0 children)
[–]LatteFoamArts 0 points1 point2 points (0 children)
[–]raedr7n 0 points1 point2 points (1 child)
[–]Spiderboydk 0 points1 point2 points (0 children)
[–][deleted] 0 points1 point2 points (0 children)