Part I: The C# Design Process
Anders Hejlsberg discusses the process used by the team that designed C#, and the
relative merits of usability studies and good taste in language design.
Part II: The Trouble with Checked Exceptions
Anders Hejlsberg discusses versionability and scalability issues with checked exceptions.
Part III: Delegates, Components, and Simplexity
Anders Hejlsberg discusses delegates and C#'s first class treatment of component concepts.
Part IV: Versioning, Virtual, and Override
Anders Hejlsberg explains why C# instance methods are non-virtual by default and why
programmers must explicitly indicate an override.
Part V: Contracts and Interoperability
Anders Hejlsberg discusses DLL hell and interface contracts, strong names, and the
importance of interoperability.
Part VI: Inappropriate Abstractions
Anders Hejlsberg and other members of the C# team discuss the trouble with distributed
systems infrastructures that attempt to make the network transparent, and
object-relational mappings that attempt to make the database invisible.
Part VII: Generics in C#, Java, and C++
Anders Hejlsberg compares C#'s generics implementation to Java generics and C++
templates, describes constraints in C# generics, and describes typing as a dial.
Part VIII: CLR Design Choices
Anders Hejlsberg discusses IL instructions, non-virtual methods, unsafe code, value
types, and immutables.