# Software Engineering Design patterns, principles, data structures, and concepts.[^1] ## Principles and Patterns <!-- keep-sorted start case=no --> - [[Composition vs Inheritance]] — is-a vs has-a, when to use each - [[Complex Systems]] — Gall's Law on evolving from simple systems - [[Design Patterns]] — Gang of Four: creational, structural, behavioral - [[GNU Conventions]] — GNU standards for CLI argument syntax - [[OOP]] — four pillars of object-oriented programming - [[Rubber Duck Debugging]] — debug by explaining code out loud - [[SOLID]] — five OOP design principles - [[The Elements of Programming Style]] — 56 Kernighan/Plauger maxims - [[Web Development Stack]] — modern landscape and common stacks - [[Zen of Zig]] — Zig's design principles, universally applicable <!-- keep-sorted end --> ## Data Structures and Algorithms <!-- keep-sorted start case=no --> - [[Bloom Filters and FM Sketches]] — probabilistic data structures <!-- keep-sorted end --> ## Concurrency <!-- keep-sorted start case=no --> - [[Compare-and-Swap]] — CAS instruction, ABA problem, hardware support - [[Double-Checked Locking]] — thread-safe lazy initialization pattern - [[Initialization-on-demand Holder Idiom]] — Bill Pugh Singleton via class loading <!-- keep-sorted end --> ## Databases <!-- keep-sorted start case=no --> - [[ACID]] — transaction guarantees: Atomicity, Consistency, Isolation, Durability - [[Blind Write]] — writing without reading, implications for serializability - [[Database Schemas]] — how schemas vary across PostgreSQL, MySQL, Oracle, SQLite - [[Database Transaction Schedule]] — serializability, recoverability, concurrency control - [[Materialized View]] — precomputed query results stored on disk - [[Write-Write Conflict]] — lost update problem and prevention methods <!-- keep-sorted end --> ## Testing <!-- keep-sorted start case=no --> - [[Test Case Writing Patterns]] — GWT, AAA, table-driven, property-based - [[Types of Software Testing]] — comprehensive taxonomy and testing pyramid <!-- keep-sorted end --> [^1]: This page is maintained manually. Once Obsidian Publish supports Bases, replace with a Base.