Ask HN: What are your current programming pet peeves?
Documentation, Search, and Learning Curve
- Strong frustration that in 2025 it’s still hard to find clear docs for basic features; search is dominated by SEO farms, AI sludge, bootcamp blogspam, and outdated answers.
- Python splits opinion: some say the built-in
help()and official docs are excellent once you learn their structure; others find them dense, spec-like “walls of text” and want concise quick-reference tables instead. - PEPs are praised as good references but criticized as serving as de‑facto user docs.
- Similar issues in other ecosystems (Ruby, Free Pascal/Lazarus): official docs often only list arguments without explaining meaning, use, or design.
- W3Schools/GeeksForGeeks are called out as high-ranking but shallow and incomplete; MDN-style docs are considered far more informative.
- Frequent complaint about libraries lacking READMEs that explain audience, context, and realistic examples.
- Several people wish API docs explained high-level design and rationale, not just tautological method descriptions.
Shells, Terminals, and Tooling
- One thread laments that shells still look the same and asks for a Python-like shell experience.
- Others defend traditional shells (bash/zsh/fish) as better suited for process orchestration and pipelines than Python; Python as a login shell is described as clumsy.
- Alternatives like xonsh and nushell are suggested as “Python-ish” or more structured shells.
- Debate over whether using a shell counts as “programming.”
Churn, Deprecation, and Ecosystem Instability
- Major peeve: libraries/frameworks constantly deprecating APIs; even projects untouched for months feel “ancient,” especially in NPM/Node ecosystems.
- Old browser JS still works, but modern build chains (Gatsby/Node) often won’t build without painful upgrades.
- Complaints about moving targets in both tech and product requirements; developers feel forced to chase shifting APIs and specs.
- Monorepos are said to complicate documentation and deployment, requiring extra tooling layers.
- Some want drastic simplification (e.g., dropping legacy x86 modes).
Types, Config, and Abstraction Choices
- Static typing sparks strong disagreement:
- One side finds complex type systems overbearing and misaligned with how they think and work.
- Others say most bugs in dynamic-language codebases are effectively type errors and prefer static or gradual typing.
- Preference expressed for inferred, non-ornate type systems (Hindley–Milner-like) over “do everything in the type system” designs.
- Frustration with poor domain modeling: objects full of optional fields, or logic expressed via untyped hash maps/dicts and YAML configs.
- YAML DSLs in particular are criticized as fragile, hard to tool, and harder for LLMs to handle compared to real scripting languages.
AI, Code Generation, and Developer Experience
- Mixed views on LLMs:
- They’re seen as useful for navigating bad documentation, dependency hell, and obscure errors.
- But AI-generated code from colleagues is described as overengineered, subtly buggy, and poorly understood by its “authors.”
- Some argue AI should focus more on reviewing human code than generating it.
- Worry that improving public docs just feeds training data; predictions of more paywalled/“paid web” content.
- Annoyance at AI tools that don’t auto-retry failed requests and that lag behind current language versions.
Product Websites, Process, and Social Frictions
- Strong irritation with developer-product sites aimed at executives: buzzwords instead of clearly stating “what it does” and “what it costs.”
- Dislike of being forced to provide contact info to get technical details, which signals an unpleasant sales funnel.
- Complaints about bug reporting: project-specific trackers, rigid templates, and stale bots closing issues. Idea floated for an independent, cross-product bug tracker curated by users.
- Social/process peeves dominate for some: moving requirements, pressure to estimate and then compress timelines, and being responsible for both defining and building evolving products.
Miscellaneous Pet Peeves
- Odd indentation widths; unpleasant large legacy C codebases with nonstandard styles and heavy macro/makefile usage.
- Git is seen by some as overcomplicated and overdue for a more intuitive replacement; alternatives like fossil and jj are mentioned positively.
- Node/JS ecosystem churn, function coloring, JS vs TS debates (with some asserting TS + LLMs is now the clear choice for serious work).
- Complaints about debugging multiprocessing, opaque build systems (e.g., CMake), null-terminated strings, ambient-privilege OSes, fragile web-app build pipelines, AI service UX (e.g., Gemini quirks), and even specific syntax like
elseif.