Frameworks
Software that helps you write other software
According to Wikipedia (retrieved 2018-12-27), a Software Framework (itemization added):
- is “an abstraction in which software providing generic functionality can be selectively changed by additional user-written code, thus providing application-specific software”.
 - “provides a standard way to build and deploy applications.
 - “is a universal, reusable software environment that provides particular functionality as part of a larger software platform to facilitate development of software applications, products and solutions.
 - “may include support programs, compilers, code libraries, tool sets, and application programming interfaces (APIs) that bring together all the different components to enable development of a project or system.”
 
Three distinguishing features (still from Wikipedia (retrieved 2018-12-27))
- 
    
inversion of control: In a framework, unlike in libraries or in standard user applications, the overall program’s flow of control is not dictated by the caller, but by the framework.
 - 
    
extensibility: A user can extend the framework – usually by selective overriding – or programmers can add specialized user code to provide specific functionality.
 - 
    
non-modifiable framework code: The framework code, in general, is not supposed to be modified, while accepting user-implemented extensions. In other words, users can extend the framework, but should not modify its code.
 
Examples
C++:
- Unreal Engine (game engine)
 - QT: (Gui development)
 
Java:
- Spring, and Spring Boot (web app development)
 
Python:
- Flask (web app development)
 - Django (web app development)
 - Pygame (game development)