Glossary
Last modified by chrisby on 2024/09/19 10:50
The explanations given here do not claim to be complete. They merely serve as a brief description to give an idea of the respective term. For more detailed information, the Internet should be consulted. Note that some of these technical terms are fuzzy, overlap with other terms, or have different meanings depending on the context or the people using them. This Glossary is an attempt to structure these terms in a concise manner. Be open to variations as you talk and work with other developers.
Term | Explanation |
Abstraction | 1) The counterpart of 'concreteness', it refers to interfaces and abstract classes that define behavior (function signatures) but leave the internal implementation of those functions undefined. 2) Duplicated logic can often be merged by creating an 'abstraction' - an additional variable/function/... containing the duplicated code. |
Abstraction Level | For example, with functions, the level of abstraction refers to how general or specific the function is, with higher levels of abstraction representing broader, more general functionality and lower levels of abstraction representing more detailed, specific operations. |
Acceptance Test | See link. |
Agile | See link. |
Assertion | An assertion function, a crucial part of testing. If the input values don't satisfy a certain condition, the test containing the assertion fails. Example: assertEquals(expectedResult, actualResult). |
Awareness | A class A is aware of class B if it contains a reference to class B in its source code. If no such reference exists, class A is unaware of class B. |
Behavior | Counterpart to implementation. It refers to the externally visible actions performed by a component. For example: A class may have the public method sort(Collection: SomeCollection), which says what it does, but no implementation details like what concrete sorting algorithm or private methods are used. |
Best Practices | Widely accepted guidelines designed to enhance programming productivity and code quality. Adherence can prevent many potential issues. |
Business | Non-technical decision makers in the organization developing the software. |
Business Value | The worth of a feature in terms of its benefit to the business. |
Clean Code | A term coined by Robert C. Martin, see book recommendations. It means code that is readable, which means easy to understand and also maintainable, which means easy to change. |
Compile Time | The period when the code is compiled. Often used to distinguish from runtime. |
Concretion | The counterpart to 'abstraction'. Concretion is also known as 'implementation'. In OOP, it refers to non-abstract classes that implement the methods of interfaces or abstract classes. A concretion provides the 'concrete' code defining the workings of these abstract functions. |
Constructor Injection | A type of dependency injection in which dependencies are provided to an object through constructor arguments. |
Command-Line Interface (CLI) | "[...] a means of interacting with a computer program by inputting lines of text [...]".[src] For example, tools/commands used when working with a (Linux) terminal have a CLI. |
Commitment | A binding promise from one person to another to complete a specific task within a specified period of time. |
Component | Often used to refer to a set of units, modules, or "architectural" components without a clearer specification. In software architecture, it refers to a module capable of independent operation, often compiled or packaged into an executable such as a .jar or .exe file. |
Continuous Integration (CI) | See link. |
Customers | Individuals who use the software product, focusing on the value it provides to meet their needs. |
Daemon | A program running in the background of a system, often without a GUI. |
Data Structure | A class primarily meant to hold data and provide basic operations to access and manipulate that data. May contain only public fields, or private fields with associated getter and setter methods. |
Definition of Done | See link. |
Dependency | In context of classes, a dependency is an object required by another object to perform its functions. Often, dependencies are provided via dependency injection. |
Dependency Cycle | A situation where two or more classes depend on each other to be instantiated. This situation creates a circular dependency that makes object creation impossible. The dependency graph should be a directed acyclic graph rather than a cycle. |
Dependency Injection (DI) | A technique where an object's dependencies are provided from outside, rather than being created within the object itself. |
Developer | Skilled programmer with advanced technical knowledge in areas such as software design, coding best practices, technical concepts, etc. |
Dirty (Code) | Code that is messy, unreadable, or poorly designed. |
Distribution | A version of an OS packaged with specific software and configurations, designed for specific use cases. Examples: Ubuntu, Fedora, and Arch Linux, all based on Linux. |
Dyad | A function with two arguments. |
Dynamic | Behaviors/properties determined at runtime. Examples: dynamic dependencies can be replaced at runtime; dynamically-typed languages determine an object's type at runtime. |
Entity | 1) In the OOP context, this means that two separately constructed objects of the same type, even with identical field values, are still distinct entities. 2) In software architecture, refers to classes representing application data models and core business logic. A banking application might have entity classes like Account, Order, Customer, or Employee with methods like myCustomer.executeOrder(someOrder). |
Estimates | Intelligent guesses about the resources needed to complete a user story. It is not a binding promise as opposed to a commitment. |
Field Injection | A type of dependency injection where a dependency is injected directly into an object's field via reflection, bypassing encapsulation. |
Flag Argument | A flag argument is a boolean parameter passed to a function, signaling it to perform a specific operation or change its behavior based on the flag's true or false value. |
Functionality / Feature | An operation that a system can perform from the user's point of view. For example, the "login" functionality/feature on a website. |
Graphical User Interface (GUI) | A user interface that allows users to interact with the system through graphical elements like icons, buttons, windows, and menus. |
Input / Output (I/O) | Refers to the communication between a software and the outside world, typically involving data transfer with the file system and networking. I/O operations are typically much slower compared to in-memory operations. |
Isolation/Isolated | The opposite of integration. Isolation is the separation of a unit or component from the rest of the system in order to test, develop or understand it independently and ensure that it works correctly without external interference. For example, in unit testing, a single unit is usually tested independently of other units and is isolated from them. |
Iteration | See link. |
Implementation | The counterpart to behavior. It refers to the internal code that achieves a desired behavior of a component. For example, a sorting function might be implemented with a QuickSort algorithm. |
Integration/Integrated | 1) The opposite of isolation. Integration is the process of combining different software units or components to work together as a single, cohesive system. For example, component testing is more integrated than unit testing because it involves multiple units working together. Integration testing tests the interaction between two components. 2) (Code) Integration, another term for merging code, usually into the main branch. See also 'Continuous Integration'. |
Inversion of Control (IoC) | A design principle that encourages the delegation of application unit wiring to a computer algorithm that facilitates dependency injection, rather than the developer implementing this logic manually. |
Module | A distinct part of a software that encapsulates specific implementation details, such as functions, data structures, classes, interfaces, or even other modules. It exposes a concise API designed to perform specific tasks. These modules are typically crafted for reusability and improved code organization, thereby promoting a modular design. Many languages provide modularization features such as Go modules or Java modules. |
Monad | A function with one argument. |
Layer | Level of abstraction in a system where related functionality is grouped together. For example, in a horizontally layered architecture, there is a controller layer consisting of controllers that are technically similar because they translate HTTP requests into data structures and vice versa. |
Logic | A set of instructions that determines how a program operates based on given inputs or conditions. Thus, basically any source code can be considered logic. |
Logical | The counterpart to physical. The abstract representation of something in software. For example, deleting a file from the desktop only logically deletes it, but actually moves it to the Recycle Bin, while the file physically remains on disk until the Recycle Bin is emptied. |
Magic | Code that performs complex tasks while abstracting away the complexity, presenting a simple interface to the user. |
Manager | Individuals responsible for planning, organizing, leading, and controlling a software project's resources, schedule, and deliverables to meet stakeholder expectations. |
Object | A distinct entity that encapsulates data and behavior while providing an API for operations or indirect interaction with its data. Often an object is constructed from a class that has private fields while providing some private methods and some public functions for interaction. For example: board = new ChessBoard(); board.printPossibleMoves(); board.doMove(...); |
Operating System (OS) | The foundational system software that manages and coordinates all computer resources. Examples are Windows, MacOS and Linux. |
Overloading | Some programming languages offer the feature of overloading, which means that two operators with the same name can still be distinguished if they have different signatures. For example, these two functions are overloaded: tripleNumber(n: float) and tripleNumber(n: int). |
Pain | An unpleasant experience caused by unnecessary efforts that could have been mitigated with better design of the original code. |
Pair Programming / Pairing (up) | See link. |
Performance Optimization | Modifying code to enhance its execution speed, which may involve trade-offs at the expense of code quality. It is a subtype of 'Restructuring'. |
Physical | The counterpart to "logical". Refers to hardware. For example, physically deleting a file means removing it from the disk. |
Points / Story Points | A unit of measure used to estimate the effort required to complete a user story. See also here. |
Problem Domain | The language/terminology used to describe the software requirements ("the problems") from the perspective of non-technical stakeholders. |
Production Code | Code that comprises the functioning part of an application, as opposed to test code. |
Programmer | Someone who writes and tests code. The knowledge level of a beginner. |
Refactoring | Modifying code to improve its quality without changing its functionality. It is a subtype of 'Restructuring'. |
Requirement | Statement of what a software must be capable of doing, often outlining features, constraints, and success criteria. |
Resources | Refers to the assets used in the project, including time, money, staff, and effort. |
Restructuring | Modifying code to change its functionality, or to improve its quality ('refactoring') or performance ('performance optimization'). |
Return of Investment (ROI) | The ratio of the business value gained from implementing a story to the effort/cost involved. A higher ROI means that something is more worth implementing than something with a low ROI. |
Rollback | The act of returning a system or data to a previous state, often using a snapshot. |
Rotting Code | Code that is increasingly difficult to maintain due to multiple changes that accumulate technical debt by not following best practices. |
Runtime | The period when the code is being executed. Often used to distinguish from compile time. |
Scope / Project Scope | The extent of features that must be implemented to deliver a project. |
Security | Measures implemented to protect systems from threats, unauthorized access, and vulnerabilities. This includes, but is not limited to, authentication, authorization, and encryption. |
Self-Containment | The ability of software to operate independently, without dependence on external services or factors. This characteristic ensures that its results are determined solely by its source code, which promotes stability and consistency. |
Separation of Concerns | A design principle suggesting that each module or component should have a single responsibility or concern, enhancing clarity and maintainability. |
Setter Injection | A type of dependency injection where a dependency is provided to an object through a setter method. |
Snapshot | A saved state of a system or data at a specific point in time. Can be used for rollbacks. |
Software Engineer | Technical expert with in-depth knowledge in many areas, including high-level topics such as software architecture and system design. |
Solution Domain | The language/terminology used by technical experts to describe the technical solutions to the software requirements defined by the problem domain. |
Specification | A detailed technical description of the requirements under which a user story is considered complete. Much more detailed than the original user story. |
Stakeholders | Individuals with an interest in the success of a software project, which may include customers, developers, investors, externals and others who are affected by the projects outcome. |
Static | Behaviors/properties determined before or at compile time. Examples: static code analysis tools inspect source code; statically-typed languages determine an object's type at compile time. |
Story-Driven Development | See link. |
Story / User Story | See link. |
Story Card | A physical card containing a user story and other relevant information such as an effort estimate and a business value. See also here. |
Story Deck | A collection of story cards for capturing the requirements of a project. See also here. |
System | A set of software components designed to work together effectively in a production environment. It often refers to the software as a whole that can be utilized by end users. |
Technical Debt | The implicit cost of additional rework caused by choosing an easy solution now instead of using a better approach that would take longer. Often the result of poor design, testing, and refactoring. |
Test Code | Code that tests the functionality of production code. Does not contribute to the operational aspects of an application. |
Test-Driven Development (TDD) | A development approach where code is written in small increments, with tests defining functionality written at the beginning of each coding iteration. |
Test Suite | The sum of all the test code used to check that a system meets its requirements. |
Testability | Code is testable, or has good testability, if it is easy to write tests for. |
Triad | A function with three arguments. |
Unit | The smallest testable part of an application. This is often a single class, but can also be a single function, or a small cluster of tightly coupled classes or functions that together perform a specific task. |
Velocity | See link. |
Virtual Machine (VM) | A software emulation of a physical computer, able to run its own OS and applications as if it were a separate physical machine. |
Waterfall | See link. |
Whispers | Vague comments in the source code that imply code problems without clearly explaining or addressing them. |
Wiring | The process conducted by the IoC container to create and inject dependencies, facilitating application startup. |