newsfilter.io
Interview

Bjarne Stroustrup: Journey to C++ from Fortran, Algol, Simula, and C

  • The speaker identifies their first programming language as "Sixty" (likely referring to ALGOL 60), followed by "Snowball."
  • The speaker explicitly states they did not fall in love with Fortran or Pascal, finding Pascal's type system obstructive.
  • The speaker's first significant engagement with low-level programming occurred with Assembler and Microcode.
  • Assembler and Microcode were used to fund the speaker's master's degree.
  • Simula is identified as the language that introduced the speaker to object-oriented programming (OOP), including inheritance and runtime polymorphism.
  • Simula, created by mathematicians Christen Nygaard and Ole Johan Dahl, extended ALGOL 60 primarily for simulation but fundamentally changed how program complexity scales.
  • The speaker notes that Simula taught that program problems could grow linearly with program size rather than quadratically through modularization.
  • A key advantage of Simula over Pascal was its extensible type system, allowing users to build domain-specific languages and custom type relations.
  • The speaker argues that all languages using the term "class" for user-defined types are descendants of Simula.
  • Fortran is credited as the first major improvement in programming history for introducing portability by translating mathematical formulas for engineers and physicists.
  • Fortran achieved portability by allowing code to be written in human-readable terms while a translator converted it to machine-specific needs.
  • ALGOL is described as a technical breakthrough that introduced precise notions of type and scope, though it was initially deemed useless for commerce due to inflexibility and inefficiency.
  • The speaker recounts learning OOP principles directly from Christen Nygaard during a visiting professorship in Aarhus in the late 1960s or 1970s.
  • Nygaard and Dahl conceptualized types as "classes" based on sets and classes of elements rather than traditional type systems.
  • The speaker cites a 1960s Norway simulation of emergency services vehicles as an early use case for inheritance and polymorphism to handle diverse vehicle types (bicycles, cars, fire engines) within a unified base class.
  • Runtime polymorphism is highlighted as essential for avoiding massive if/case statements when new object types are introduced.
  • The speaker distinguishes their professional preferences from dynamic languages like Lisp, citing constraints of performance, reliability, hardware cost, and deployability in critical infrastructure (e.g., telephone switches).
  • The speaker notes the impossibility of finding immediate debugging support for critical, deployed systems in remote locations, favoring robust, static typing over flexibility.
  • While acknowledging the beauty of Lisp, Smalltalk, ML, and Haskell, the speaker emphasizes that these languages are less relevant to environments requiring long-term operational stability under severe constraints.
  • The speaker maintains a philosophy of extracting valuable concepts from all encountered languages to improve solutions for constrained, high-reliability problems.
  • The speaker views C++ and Simula as favorite languages, specifically appreciating C++'s ability to offer flexible, efficient, and user-defined types.