The Montreal problem: Why programming languages need a style czar
Role and value of style consistency
- Many argue basic consistency (indentation, brace placement, avoiding giant style-only diffs) clearly helps readability and maintenance, especially in large teams.
- Others say style has little impact compared to design, naming, and architecture; you can write unreadable yet perfectly “styled” code, and good engineers should read any reasonable style.
- Some note that inconsistent style forces extra cognitive effort (“is this different for a reason or just style?”) and that style violations often co-occur with bugs.
Arguments for automated formatting and style guides
- Supporters see auto-formatters (gofmt, rustfmt, Black, etc.) as a way to:
- Eliminate bikeshedding and PR nitpicks.
- Make codebases visually uniform and faster to scan.
- Let humans focus reviews on logic, not whitespace.
- Language-provided, non-configurable or narrowly-configurable formatters are praised for ending unproductive debates.
- Linters and “idiomatic” guidance are viewed as especially valuable in large, long-lived codebases.
Arguments against rigid standards and “style czars”
- Some strongly dislike style guides and rigid tooling, seeing them as arbitrary impositions that don’t guarantee readability and can even harm it.
- Complaints include:
- Formatters destroying deliberate alignment, “tables,” or DSL-friendly layouts.
- Overly opinionated rules (e.g., extreme lints, banning constructs) and style wars (e.g., semicolons in JS, Rubocop rules).
- Cultural trend toward tool-enforced rules over core engineering judgment; “McDonald’s processes” vs “knowing how to cook.”
Language flexibility, idioms, and large projects
- Highly flexible languages (Scala, Perl, Lisp) are said to encourage divergent idioms, making large codebases feel like multiple dialects.
- More opinionated languages with built-in formatters and lints (Go, Rust, Elixir, Dart) are cited as examples where community convergence reduces this “Montreal effect.”
- There is disagreement over whether a global “style czar” per language is desirable; many prefer per-codebase or per-community conventions.
Tooling, representation, and alternatives
- Several ecosystems already use style and architecture tools (PHP’s phpcs/phpstan/phpat, Rust’s clippy, Elixir/Dart formatters) with generally positive reports.
- Some propose moving beyond raw text to AST-based storage so each developer can render code in their preferred style, though practical issues (errors, verbosity, tooling) are noted.
- Others emphasize that real long-term risk is architectural inconsistency (e.g., concurrency models, abstractions), not superficial formatting.
Montreal analogy
- Many readers find the “Montreal problem/effect” metaphor weak or misleading, since architectural and cultural diversity is a strength of the actual city.
- The analogy is seen as low-value or confusing, though some accept it as a colorful way to describe multi-era, multi-style codebases.