Software frameworks offer standardized preconstructed structures, helping software developers to build and deploy software systems in distributed environments and provide generalizible and reusable issues and components of the software development environment, such as libraries of source code, compilers, tool sets, application programming interfaces (APIs), etc. The goal is to reduce complexity and the amount of working hours, by a high degree of standardization, automatisation and formalization of recurring, repeating, often used, proved, performant, stable and relevant structures and processes. Software frameworks help you to reuse or generate the „best“ code possible for a specific requirement, instead of doing all the work for yourself. Of course, you can do some macho coding and prove to everybody, that you can also do it without, but you’d waste your time and energy. 20-30 years ago developers were brainstorming at the coffee machine about programming languages, nowadays they do it about software frameworks.
Software frameworks are the new programming languages. The strategy and operational activities of programming have changed. Strategically it´s all about the architecture, operationally it’s all about method knowledge, framework knowledge and tool know-how. The relevancy of language syntax is decreasing, since more intuitive ways of „programming“ are arising. Syntax is disappearing more and more along with upcoming visual languages, such as Graphical-User-Interface (GUI) builders demonstrate, by using WYSIWYG (What-you-see-is-what-you-get)-Code in any language to implement a graphical widget. Nowadays, developers work on higher abstraction layers and most of the coding is consisting of API calls and architecture comes before syntax. The main task today is to get correctly implemented algorithms. Software frameworks provide pre-defined and pre-implemented algorithms and the collective knowledge on software architectures. A detailed definition on software frameworks can be found here.
Thus, it’s helpful to separate software frameworks from software IDEs (Integrated Development Environment) or CASE (Computer-aided Software Engineering)-Tools, discussed in the next article.
Types of Software Frameworks
It’s a hard job to sort out different categories of software frameworks, due to a fast growing, highly diversified, rapidly changing, often short-lived software framework market with different concepts, approaches, system landscapes, programming languages, libraries of code, etc., put together for numerous purposes in different versions, distributions, environments, etc. A possible way of categorizing software frameworks for a better understanding is given below with examples for each type listed:
- Software Development Frameworks
- IT-Layer-based Typology
- Backend Frameworks
- Web MVC: AngularJS
- Data processing: Apache Spark, Hadoop, Kafka
- DevOps, Containarization, Deployment, Docker (Build), AndroidBuilder
- Examples: Ruby on Rails, Mojolicious, Xamarin, AndroidBuilder, Spring MVC, Ruby on Rails, Laravel, Django, Sails.js, ASP.NET Core, Zend Framework, Catalyst, Mojolicious, node.js, angular.js, React, .NET Core, Django, TensorFlow, Xamarin, Cordova, Torch/ PyTorch
- Frontend Frameworks
- Examples: Bootstrap, Backbone.js, AngularJS, Angular, EmberJS, ReactJS and Vue.js, CSS Frameworks, including HTML, JS documents etc.
- Backend Frameworks
- Language-based Software Framework typology
- Java Collections Framework (JCF)
- Enterprise Java: Spring Boot
- Torch/ PyTorch
- Zend Framework
- ASP.NET Core
- .NET Core
- Object-Oriented Frameworks
- Model-View Controller
- Spring MVC
- Microsoft Foundation Classes
- Test Automation Frameworks
- Unified Functional Testing (formerly QTP)
- Machine Learning Frameworks
- Python Anaconda
- Application runtime frameworks:
- Mac’s Cocoa Runtime
- Windows Common Language Runtime
- Java Runtime Environment
- IT-Layer-based Typology
- Project Management Frameworks
- Agile Frameworks
- CPM, CCPM, XPM, PERT, Adaptive, Theory of Constraints, Six sigma etc.
- Agile Frameworks
- Governance-Risk-Compliance (GRC)-Frameworks
- Micro framework
- W3C frameworks (Resource Description Framework (RDF), etc.)
- E-Business-Frameworks (SAP etc.)
Software frameworks of the backend provide a set of folders and files, including libraries with access to databases, pre-setting template structures, controlling the session management, etc., which is representing the programmers layer / application layer / logical layer. Frontend frameworks offer a set of folders and files including libraries as well, in order to face the UI requirements, addressing the presentation or design layer.
As discussed before, software libraries are a core component of software frameworks and reusable, adaptable and extensible components with source code. The usage of software libraries is a critical success factor in the software market, regarding the software development efficiency and quality. Numerous code repositories in the internet (Github, Bitbucket, CloudForge, Gitlab, GNU Savannah, SourceForge, findjar.com, Apache Maven repository, etc.) enable software teams to decrease their time-to-market, by reusing code components. The challenge for current developers consists in accomplishing the complexity of the library APIs and to capture the functionality of the library.
„Software libraries are collections of code entities, typically with well-defined and documented interfaces, intended to be reused. In contrast to reuse by design and code scavenging, software libraries are reused “as is”. The internals are hidden to the reuser and no modifications are applied to the reusable artifact. This form of reuse is also referred to as black-box reuse.“ (Heinemann 2012, S. 14)
Stack Overflow, a platform Where Developers Learn, Share, & Build software projects is performing a yearly survey with developers. In 2017, a historically high amount of 64,000 developers were asked from the platform about programming languages, libraries, databases, etc. According to the survey, the most used software library is node.js (47,1%), followed by angularJS (44,3%), .NET Core (33,4%), React (19,5%), Cordova (11,0%), Firebase (9,8%), Xamarin (8,3%), Hadoop (5,7%), and Spark (4,7%) (Vgl. Stack Overflow 2017 in fossbytes 2017).
In this section you´ll get to know, which programming languages I prefer(red) and how I use them. At the end of the ’90’s, I started to program in Java that was 20 years ago and Java is still in the game:
On the server-side I`ve changed from Java to the python platform due to several reasons, to name a few: the intuitive language design, the usability of data science, and artificial intelligence (AI) libraries, such as Python Anaconda and PyTorch.
Heinemann, L. (2012): Effective and Efficient Reuse with Software Libraries. Technische Universität München. Dissertation. Univ.-Prof. Dr. Daniel Cremers.
Stack Overflow in Fossbytes (2017): Most Popular Programming Languages, Frameworks, Libraries, And Databases | 2017