09 - Programming Concepts & Paradigms
Software Design & Architecture
Relevant DSS-P Skills
- 3. Technology > 3.1 Software Development > Software Design Methodology
Design Principles
- Orthogonality and DRY principle - The principle that every piece of knowledge must have a single, unambiguous, authoritative representation within a system
- Separation of concerns - A design principle for separating a computer program into distinct sections
- Design by Contract - An approach for designing software that prescribes formal, precise and verifiable interface specifications for software components
- Law of Demeter - A design guideline for developing software, particularly object-oriented programs
- SOLID - The principle of OOD - A mnemonic acronym for five design principles intended to make object-oriented designs more understandable, flexible, and maintainable
- Single responsibility
- Open–closed
- Liskov substitution
- Interface segregation
- Dependency inversion
- The Reactive Manifesto - A coherent approach to systems architecture where applications are responsive, resilient, elastic and message driven
- Unix philosophy - A set of cultural norms and philosophical approaches to software development
- KISS principle - A design principle which states that most systems work best if they are kept simple rather than made complicated
Design Best Practices
- Resource acquisition is initialization (RAII) - A programming idiom where the life cycle of a resource is bound to the lifetime of an object
- Rob Pike's 5 Rules of Programming - A set of rules about where to focus optimization efforts, emphasizing measurement and the importance of data structures
- The Zen of Python - A collection of 19 guiding principles for writing computer programs that influence the design of the Python programming language
- The twelve-factor app - A methodology for building software-as-a-service apps that are suitable for deployment on modern cloud platforms
Design Patterns
- Software design pattern - A general, reusable solution to a commonly occurring problem within a given context in software design
- Entity–control–boundary - An architectural pattern used in software design and analysis that helps in structuring the responsibilities of classes in an object-oriented system
- Command Query Responsibility Segregation - A pattern that separates read and update operations for a data store
- Fluent interface - A method for designing object-oriented APIs based on method chaining with the goal of making the readability of the source code close to that of ordinary written prose
- Model-view-controller pattern - A software design pattern commonly used for developing user interfaces that divides the related program logic into three interconnected elements
- Dependency injection - A design pattern in which an object or function receives other objects or functions that it depends on
Architectural Styles
- Three-tier architecture - A client–server architecture in which presentation, application processing, and data management functions are logically separated
- Microservices architecture - An approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms
- Event-driven architecture - A software architecture paradigm promoting the production, detection, consumption of, and reaction to events
- Resource-oriented architecture - A style of software architecture and programming paradigm for designing and developing software in the form of a network of resources
- Background processing - The execution of tasks in the background, allowing the main application to remain responsive
Architecture Description
- System - A group of interacting or interrelated elements that act according to a set of rules to form a unified whole
- Systems architecture - The conceptual model that defines the structure, behavior, and more views of a system
- 4+1 architectural view model - A view model used for "describing the architecture of software-intensive systems, based on the use of multiple, concurrent views"
- The C4 model - An easy to learn, developer friendly approach to software architecture diagramming
- UML - The graphical language for visualizing, specifying, constructing, and documenting the artifacts of a software-intensive system
- Flowchart - A type of diagram that represents a workflow or process
- Conway's law - An adage stating that organizations design systems that mirror their own communication structure
- Systems architecture - The conceptual model that defines the structure, behavior, and more views of a system
- Related Standards
- ISO/IEC/IEEE 42010 (Architecture description) - An international standard for architecture descriptions of systems and software
Domain-Driven Design (DDD)
- Domain-driven design - A major software design approach, focusing on modeling software to match a domain according to input from that domain's experts
- Object-oriented analysis and design - A technical approach for analyzing and designing an application, system, or business by applying object-oriented programming, as well as using visual modeling throughout the software development process
- Use case - A list of actions or event steps typically defining the interactions between a role (known in the Unified Modeling Language as an actor) and a system to achieve a goal
- Ontology - A representation, formal naming and definition of the categories, properties and relations between the concepts, data and entities that substantiate one, many or all domains of discourse
- Semantic network - A knowledge base that represents semantic relations between concepts in a network
- WordNet - A large lexical database of English
- Semantic network - A knowledge base that represents semantic relations between concepts in a network
- Database design - The organization of data according to a database model
Core Programming Concepts
Relevant DSS-P Skills
- 3. Technology > 3.1 Software Development > Computer Science
Language Mechanics & Execution
- Source code - A collection of code, possibly with comments, written using a human-readable programming language, usually as plain text
- Statement - A syntactic unit of an imperative programming language that expresses some action to be carried out
- Expression - A syntactic entity in a programming language that may be evaluated to determine its value
- Operator and Operand
- Literal - A notation for representing a fixed value in source code
- Template string or literal
- Heredoc - A file literal or input stream literal representing a section of source code that is treated as if it were a separate file
- Constant - A value that cannot be altered by the program during normal execution
- Variable - An abstract storage location paired with an associated symbolic name, which contains some known or unknown quantity of information referred to as a value
- Scope - The region of a computer program where the binding of a name to an entity (name binding) is valid
- Data type - A collection or grouping of data values, usually specified by a set of possible values and allowed operations
- Primitives - A data type provided by a programming language as a basic building block or one not defined in terms of other data types
- Nominal type system - A major class of type systems, in which compatibility and equivalence of data types is determined by explicit declarations and/or the names of the types
- Structural type system - A major class of type systems in which type compatibility and equivalence are determined by the type's actual structure or definition
- Duck typing - An application of the duck test determining type compatibility based on the presence of certain methods and properties
- Union type - A data type definition that specifies which of a number of permitted primitive types may be stored in its instances
- Type variance - The relationship between subtypes of a composite type and the subtypes of its components
- Type safety - The extent to which a programming language discourages or prevents type errors
- Reference - A value that enables a program to indirectly access a particular datum in the computer's memory or other storage device
- Null pointer - A value saved for indicating that the pointer or reference does not refer to a valid object
Memory Management
- Reference counting - A programming technique of storing the number of references, pointers, or handles to a resource
- Garbage collection - A form of automatic memory management where the collector attempts to reclaim memory occupied by objects no longer in use
- Smart pointer - An abstract data type that simulates a pointer while providing added features, such as automatic memory management or bounds checking
- Memory safety - The state of being protected from various software bugs and security vulnerabilities when dealing with memory access
Control Flow Structures
- Control flow - The order in which individual statements, instructions or function calls of an imperative program are executed or evaluated
- Continuation - A data structure that represents the rest of a program's computation at a given point
- call-with-current-continuation - A control flow operator, notably in the Scheme programming language, used to capture and invoke continuations
- Exception handling - The process of responding to the occurrence of exceptions during the execution of a program
- Finite-state machine - A mathematical model of computation representing an abstract machine that can be in exactly one of a finite number of states at any given time
Foundational Techniques & Properties
- State - The stored information, at a given instant in time, to which a computer program or system has access
- Function - A sequence of program instructions that performs a specific task, packaged as a unit
- Parameter - A special kind of variable used in a subroutine or function to refer to one of the pieces of data provided as input
- Anonymous function - A function definition that is not bound to an identifier
- Immutable object - An object whose state cannot be modified after it is created
- Generic Programming - A style of computer programming in which algorithms are written in terms of types to-be-specified-later that are then instantiated when needed
- Assertion - A statement that a predicate (a Boolean-valued function) is expected to always be true at that point in the code
- Autovivification - The automatic creation of a new variable or data structure as required when it is first used
Module Structure & Organization
- Cohesion - The degree to which the elements inside a module belong together
- Coupling - The degree of interdependence between software modules, a measure of how closely connected two routines or modules are, and the strength of the relationships between modules
Programming Paradigms
Relevant DSS-P Skills
- 3. Technology > 3.1 Software Development > Computer Science
Object-oriented Programming
- Object-oriented Programming - A programming paradigm based on the object - a software entity that encapsulates data and function(s)
- Abstraction - The process of hiding the complexity of a system by modeling classes appropriate to the problem and working at the most relevant level of detail
- Encapsulation - The bundling of data with the methods that operate on that data, or the restricting of direct access to some of an object's components
- Polymorphism - The provision of a single interface to entities of different types
- Dynamic dispatch - The process of selecting which implementation of a polymorphic operation (method or function) to call at run time
- Inheritance - The mechanism of basing an object or class upon another object or class, retaining similar implementation
- Class - An extensible program-code-template for creating objects, providing initial values for state and implementations of behavior
- Interface - An abstract type that contains no data, but defines behaviors as method signatures
- Method - A procedure associated with an object, and implicitly acting upon that object
- This keyword - A keyword used in many object-oriented programming languages to refer to the object associated with the current function or method call
- Prototype-based programming - A style of object-oriented programming in which behavior reuse is performed via a process of reusing existing objects that serve as prototypes