Programming Is Mostly Thinking (2014)
Nature of Programming Work
- Many agree programming is largely thinking: understanding problems, designing solutions, and deciding what not to build.
- Several distinguish “programming” (design, reasoning) from “coding” (typing, boilerplate, CRUD scaffolding).
- Others argue most industry work is glue/integration and routine changes, so the “90% thinking” framing fits only a subset of jobs.
- Debugging, reading code, and building mental models are described as central, high‑effort activities.
Planning vs Iteration
- Strong tension between heavy up‑front design (especially in safety‑critical and regulated domains) and iterative, exploratory coding.
- Some claim extensive specs, diagrams, and reviews are essential before any code; others say that leads to brittle plans and fear of change.
- Many describe a hybrid: sketch the architecture and risky parts, then iterate in code, often rewriting 2–3 times as understanding improves.
- Writing code (including prototypes and tests) is frequently framed as part of thinking, not separate from it.
Simplicity, Abstraction, and DRY
- Multiple comments emphasize maintainability over cleverness: simple, decoupled code, minimal abstraction, and “dumb but durable” designs.
- DRY is often misapplied: people abstract similar‑looking code that represents different concepts, leading to brittle, over‑general frameworks.
- Performance‑aware design (appropriate data structures, avoiding quadratic patterns) is seen as both a simplicity and correctness tool.
Domain Knowledge and Communication
- Domain understanding (finance, medical, etc.) is seen as crucial; you can’t reason well about systems you don’t conceptually grasp.
- Good engineers are compared to translators: they bridge business language and technical implementation, often via diagrams and discussions.
- Some note non‑compete clauses and politics can disincentivize deep domain specialization.
Tools, LLMs, and Copilot
- Copilot and similar tools are said to compress the “typing” portion, making the thinking proportionally more dominant.
- Commenters stress that LLMs help with syntax and boilerplate but not with “wisdom”: architecture, trade‑offs, and domain reasoning.
- Debate persists over whether LLMs “think” at all; participants describe them as probabilistic text engines that can simulate algorithmic reasoning but also hallucinate.
Productivity, Interruptions, and Metrics
- Frequent interruptions are widely reported as devastating to deep work; long, quiet stretches (often at home or at night) are seen as vastly more productive.
- LOC as a performance metric is heavily criticized; tiny diffs may represent days of valuable analysis or debugging.
- Stories of lost work due to bad version control or bosses deleting code support the claim that re‑typing is fast compared with the original design/debug effort.