Programming Paradigms (Principles of Programming) Software Architectural Patterns (Flow and execution of a large system) Software Design Patterns (Flow and execution of a single component) Idioms (Language Specific Patterns)