hn-classics/_stories/1989/15265356.md

35 lines
1.8 KiB
Markdown
Raw Permalink Normal View History

---
created_at: '2017-09-16T16:35:55.000Z'
title: Rob Pike's Rules of Programming (1989)
url: http://users.ece.utexas.edu/~adnan/pike.html
author: tosh
points: 383
story_text:
comment_text:
num_comments: 112
story_id:
story_title:
story_url:
parent_id:
created_at_i: 1505579755
_tags:
- story
- author_tosh
- story_15265356
objectID: '15265356'
2018-06-08 12:05:27 +00:00
year: 1989
---
2018-02-23 18:19:40 +00:00
[Source](http://users.ece.utexas.edu/~adnan/pike.html "Permalink to ")
### 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".