HN
Today

Learning Software Architecture

This post dissects software architecture, arguing that hands-on experience trumps theoretical learning, and social dynamics often dictate technical design. The author uses rust-analyzer as a case study to illustrate how incentive structures shape development. It offers practical advice and key resources, making it a valuable read for anyone navigating complex software projects.

53
Score
1
Comments
#1
Highest Rank
2h
on Front Page
First Seen
May 12, 10:00 AM
Last Seen
May 12, 11:00 AM
Rank Over Time
11

The Lowdown

Responding to an inquiry about learning software design from a physicist's perspective, the author argues that true understanding comes from 'doing,' not formal training. They emphasize that software architecture is profoundly shaped by an organization's social structure and incentive systems, often more than by pure technical knowledge.

  • Practical Experience is Key: Formal design courses are likened to 'kindergarteners playing firefighters'; real learning and leadership emerge from hands-on projects and solving actual problems.
  • Conway's Law Reigns Supreme: The author posits that the perceived differences between industrial and scientific software stem from differing incentive structures, not just technical ability. They suggest that software genesis reflects social architecture.
  • Adapt or Nudge Incentives: While occasionally one can influence project incentive structures (like TIGER_STYLE), more often, one must adapt to existing constraints, making the best possible decisions given the circumstances.
  • rust-analyzer Case Study: The project's design demonstrates adapting to social realities. Key decisions, such as a stable build and independent features with catch_unwind guards, were made to attract a diverse contributor base, from dedicated experts to 'weekend warriors'.
  • Resource Recommendations: A curated list of influential works is provided, including Gary Bernhardt's 'Boundaries' talk, the author's own 'How to Test' insights, ØMQ guide and Pieter Hintjens' writings, Jamii's 'Reflections on a decade of coding,' and Ted Kaminski's blog. While 'Software Engineering at Google' and 'The Philosophy of Software Design' are mentioned, no single book is deemed a definitive source.

Ultimately, the piece champions practical application, a keen awareness of social dynamics, and a curated approach to learning as the cornerstones of effective software architecture, while providing a roadmap for continued self-education.