Writes large correct programs (2008)

As software systems grow, many engineers argue that the real challenge is not just writing “correct” code, but organizing it so complexity, change, and maintenance remain manageable over years. Commenters contrast theory-heavy computer science education with practical software engineering skills like version control, testing, architecture, and incremental refactoring, noting that many graduates can’t build or modify substantial systems with confidence. They also highlight structural issues in the industry — from non-coding “architects” and process-heavy management roles to weak incentives for paying down technical debt — as reasons large codebases often become fragile and hard to evolve.

Role of Software Architects

  • Disagreement over whether “software architect” should be a distinct non-coding role.
  • Some argue good developers naturally do architecture; “architect” titles often mask jargon-heavy, low-skill roles.
  • Others note that strong architecture skills, while distinct from coding, are often best exercised by hands-on developers.
  • Frustration that many titled architects don’t write or never wrote code, compared to “chess coaches who don’t play.”

Maintainability, Tests, and Refactoring

  • Many value maintainability over initial correctness; real systems must evolve.
  • “We don’t dare change it” is interpreted as “we don’t understand it and lack tests.”
  • Fixing legacy “warts” is technically straightforward but socially hard: needs time, buy-in, cross-team coordination, and carries career risk if refactors cause incidents.
  • Testing and refactoring are framed as a social/organizational challenge more than an algorithmic one.
  • Good tests, asserts, and crash dumps are seen as core tools to keep large programs correct over time.

Education, CS Degrees, and Real-World Skills

  • Repeated stories of CS/engineering graduates unable to build non-trivial software, use version control, or start projects without scaffolding.
  • Some universities heavily emphasize theory (theorems, proofs) with almost no practical programming.
  • Others highlight rigorous “learn-by-building” curricula (e.g., simplified OS from scratch) as more aligned with software engineering.
  • Observations that many academics and CS grads write fragile, one-off code, while industry rewards those who can deliver robust systems.

Computer Science vs Software Engineering

  • Common analogy: CS : SWE :: Physics : Civil Engineering.
  • CS is about theory and algorithms; SWE is about delivering reliable, maintainable systems under constraints.
  • Many companies hire CS grads but expect engineering skills; this mismatch is blamed for shoddy code and poor predictability.
  • Debate over whether “software engineering” is truly an engineering discipline yet, or still mostly a craft.

Process, Roles, and Organizational Complexity

  • Some see project managers, process owners, scrum masters, and certain “architects” as pseudo-jobs that slow delivery.
  • Others report that good PMs/product roles are “worth their weight in gold” for coordination at scale.
  • Side discussion on pseudo-jobs as a byproduct of current labor markets, and whether UBI would reduce or increase such roles.