This document discusses principles of C# programming including:
- Favoring the most general interface like IEnumerable<T> and method chaining to favor fluency.
- Avoiding side effects by keeping methods pure and encapsulating state.
- Favoring declarative code using initializers, null-coalescing and LINQ.
- Striving for functional cohesion through high cohesion, single responsibility and helper classes/extension methods.
- Favoring extension methods and interfaces over inheritance.