Rob Pike’s Rules of Programming (1989)

Rob Pike’s 1989 “Rules of Programming” are used here to reexamine how developers should think about performance, simplicity, and design in modern software. Commenters largely agree that premature micro-optimizations and complex algorithms are harmful, arguing instead for simple code, measurement-driven tuning, and especially careful choice of data structures—echoing related ideas from Knuth, Brooks, Perlis, and Torvalds. Many see the “data dominates” rule as the most enduring insight, with particular relevance to large systems, databases, and AI-assisted coding where naive data modeling can quietly become the real bottleneck.

Rule 5 and the Primacy of Data Structures

  • Strong consensus that “data dominates”: good data structures and schemas make algorithms and control flow almost obvious.
  • Multiple references to data-first design in practice: start from DB schema or types, then layer UI, business logic, and queries on top.
  • Several argue that most hard refactors and performance wins come from rethinking data layout, not clever code.
  • Others note the emotional difficulty: you often know your data model isn’t right yet, but you must still ship and iterate.

Perlis, Pike, and “One Data Structure, Many Functions”

  • Debate over whether Perlis’s “100 functions on one data structure” aligns with Pike’s rule and Brooks’s “show me your tables”.
  • One side reads it narrowly: a single central representation per domain concept (e.g., one driver-license record type), not a universal mega-structure.
  • Critics warn that too-general data structures cause poor fit, complex algorithms, and loss of separation of concerns.
  • Functional and Clojure-style ecosystems are cited as examples of leaning into a small set of rich, generic data types.

Premature Optimization, Performance, and Simplicity

  • Rules 1–4 are linked to the famous “premature optimization” dictum; many complain that a decontextualized version has been used to justify slow, bloated systems.
  • Others defend the original intent: avoid micro-optimizations and contorted control flow before measuring, but do care about algorithmic complexity and obvious hot paths.
  • Disagreement over how often one can “predict” bottlenecks: some claim experienced engineers usually can; others insist profiling routinely contradicts intuition.
  • Several note that today’s real problems are premature abstraction and architecture-for-hypothetical-futures more than premature optimization.

AI-Assisted Development and Data Design

  • Multiple commenters report that codegen models tend to choose naive data structures, elaborate control flow, and poor documentation unless explicitly guided.
  • A common workflow: humans design core data models and module boundaries; AI fills in straightforward code and later assists with refactors.
  • Some see AI as useful for exploring alternative designs; others judge it poor at navigating design space compared to learning a functional language or C.

Databases, Relationships, and Documentation

  • Relational databases are praised for forcing explicit relationships and making systems understandable via schemas.
  • Good schema and key design are described as central to correctness, performance, and maintainability.
  • When using AI on legacy codebases, focusing prompts on key data structures and data flow yields far better documentation than module-by-module summaries.