A bunch of programming advice I'd give to myself 15 years ago

Scope and Audience of the Advice

  • Many feel the article’s advice is strong but skewed toward people already working as devs, not absolute beginners.
  • Several argue novices need more concrete, low‑level guidance (write more code, fewer tutorials; don’t over‑optimize; expect to be bad at first).
  • Others say high‑level posts are still useful as “sensitization”: you won’t fully apply them early, but they shorten the learning curve later.

Shipping Fast, “Bad Code,” and Complexity

  • Strong support for prioritizing shipping and learning over perfectionism, especially for juniors; perfection can paralyze.
  • Counterpoint: “stop caring about quality” is seen as dangerous if taken literally; better framing is “aim for clean within constraints and accept imperfections.”
  • The “bad code gives you feedback, perfect code doesn’t” idea resonates with people who struggled with over‑engineering.
  • The heuristic “if you can’t easily explain why something is difficult, it’s incidental complexity” is praised by some, but heavily criticized by others as wrong for genuinely hard problems; risk of blaming yourself instead of recognizing inherent difficulty.

Users, Business Value, and Criticality

  • Broad agreement: users care about outcomes, UX, and performance, not tech stacks or purity.
  • Several contrast “NASA/medical/financial” contexts (where rigor is crucial) with internal tools or low‑risk apps where speed matters more.
  • Some worry that “bugs are fine in 99% of web apps” underestimates hidden user pain when feedback channels are weak.

Learning, Fundamentals, and Experience

  • Repeated themes: less tutorial consumption, more building; reading others’ code is valuable but not a substitute for doing.
  • Many endorse learning fundamentals (data structures, networking, OS, security, Unix, math) and even low‑level concepts, though not necessarily coding in C/asm for a career.
  • Experience with consequences (staying in a role long enough, being on call) is viewed as irreplaceable for forming sound opinions.

Tooling, Editors, and Typing

  • Split views:
    • One camp: deep editor mastery, shell skills, and typing speed are huge long‑term multipliers; “sharpen the axe” pays off.
    • Other camp: endless editor tweaking is disguised procrastination; modern defaults (e.g., VS Code) are “good enough” and thinking dominates typing time.
  • Some nuance: learning a few high‑leverage shortcuts and automation can save years of small delays; diminishing returns after that.

Team Dynamics, Questions, and Org Constraints

  • Many value “ask instead of suffering alone,” but stress showing initiative first (read code/docs 10–30 minutes, then ask specific questions).
  • Fixing bugs “one layer deeper” and investigating history are seen as hallmarks of seniority—but often clash with management pressure for quick patches.
  • Several note that such process improvements only work in organizations willing to change; otherwise, leaving may be the rational choice.

Testing and Design

  • Multiple commenters argue integration and end‑to‑end tests on core flows often provide more real confidence than high unit‑test coverage.
  • Unit tests are seen as essential for core libraries, less so for typical product teams.
  • Simplicity, “dumb” consistent code, and clear data‑first thinking are widely encouraged over clever abstractions and premature design patterns.

Career, Impostor Syndrome, and Wellbeing

  • Impostor syndrome is common; some frame it as natural while you’re still learning, others reject normalizing incompetence in critical domains.
  • Advice recurs to separate identity from job, avoid toxic environments, and prioritize health, family, and life outside code.