Post by account_disabled on Sept 12, 2023 6:32:00 GMT -5
In 1991, I was listening to a presentation at a software development conference about a new concept called component-based development (CBD), or application development using reusable and interchangeable elements.
The presenter compared this concept Phone Number List to the manufacturing industry. When we build a car, we use pre-made components such as the steering system, engine, and drivetrain rather than making each part from scratch.
Additionally, these components are often used interchangeably in other types of cars and trucks. It was a compelling story. As a C coder at the time, I was writing most of the code from scratch. Wouldn't it be great if we built software the same way we build cars?
Component-based development proposes a structured approach to building software systems by breaking the software system into reusable independent modules, that is, components. It was a good idea, at least conceptually. However, from a practical point of view, it was very difficult to put it into practice. As a technology, there were no standards for what the components should be and no common interfaces. Looking back now, 30 years later, I think it probably took this long to do that.
Evolution of good ideas
Since then, the industry has actually implemented this idea. Software development has moved slowly but meaningfully toward CBD methodologies, driven by the need for modularity, reusability, and increased efficiency. This change comes with object-based development, distributed object-based development, service-oriented architecture (SOA), now cloud computing and containers, and industrial clouds. It has expanded to many technology trends, including certain cloud services available on demand.
Let’s take a look at this process of expansion and evolution. This is an important part of the story. Modularity in software development has always been an enviable concept, even back in the 1980s when I first became a coder. Early developers attempted to split applications into logical modules to improve code organization and maintainability.
Modules are typically designed to encapsulate specific functionality and are often created as part of a monolithic application. Back then, we thought about components and modularity only within a single application domain. This was the core of structured programming, which was popular at the time.
CBD takes modularity one step further by introducing the concept of reusable software components. Components encapsulate both functionality and data and provide a well-defined interface for interaction with other components or applications that act as containers (not containers as we call them these days).
In the 1990s, as the industry focused on component-based development and accelerated the adoption of component-based development, CBD frameworks such as JavaBeans, COM/DCOM, and CORBA emerged in response. These “frameworks” provided standardized methodologies and tools for building, integrating, and reusing components across multiple platforms and languages. Developers can now create components that conform to platform-neutral interfaces and execute reusable operations accessed using standard APIs, promoting interoperability and code reuse.
There was a lot of interest in component-based development and new component standards like Kova, but at the time this technology was only a stepping stone to many other, more effective concepts. While some may have had more positive experiences, I have concluded that applications using these standards are more expensive to create and much more difficult to deploy and maintain. It was a complete failure.
However, since then, as the demand for highly scalable and loosely coupled systems has increased, component-based architectures such as SOA and microservice architecture have rapidly emerged. An architecture like this requires independent, self-sufficient components that communicate through well-defined interfaces. By using the SOA approach, which breaks down complex systems into smaller, autonomous components, companies have been able to achieve real-world agility, scalability, and resilience. This is where today's cloud computing began.
“Have we arrived yet?”
As a result, component-based development is advancing rapidly today. The forces driving this development are containerization and cloud native technologies. Container platforms such as Docker and Kubernetes provide a standardized and portable runtime environment for components, enabling easy deployment, scaling, and management. Cloud native development further expands the concept of components by adopting cloud services, serverless functions, and APIs as building blocks of component-based applications.
It appears to be much more effective than many previous concepts, but one key element missing is an inventory of specific, useful components. However, the situation is changing in this area as well. I expect that the development of the components I am talking about now will explode in 2024.
In fact, recently, great interest and investment has been focused on industry-specific cloud services (industrial clouds), which are analogues of components. For example, a suite of supply chain optimization services built for a furniture manufacturer, or a derivatives trading system that can be used as a microservice for banks in a specific country. The remaining task is to use an easy-to-access, well-defined interface and, above all, to provide useful services that speed up productivity and innovation.
In summary, CBD has come a long way from its modular early days to today's reusable and extensible software components, i.e. true services. A focus on modularity, reusability, and well-defined interfaces has paved the way for technologies that 'just work'. As was the ideal 30 years ago, it is now possible to create systems just like making cars, and better methods will emerge in the future.
The presenter compared this concept Phone Number List to the manufacturing industry. When we build a car, we use pre-made components such as the steering system, engine, and drivetrain rather than making each part from scratch.
Additionally, these components are often used interchangeably in other types of cars and trucks. It was a compelling story. As a C coder at the time, I was writing most of the code from scratch. Wouldn't it be great if we built software the same way we build cars?
Component-based development proposes a structured approach to building software systems by breaking the software system into reusable independent modules, that is, components. It was a good idea, at least conceptually. However, from a practical point of view, it was very difficult to put it into practice. As a technology, there were no standards for what the components should be and no common interfaces. Looking back now, 30 years later, I think it probably took this long to do that.
Evolution of good ideas
Since then, the industry has actually implemented this idea. Software development has moved slowly but meaningfully toward CBD methodologies, driven by the need for modularity, reusability, and increased efficiency. This change comes with object-based development, distributed object-based development, service-oriented architecture (SOA), now cloud computing and containers, and industrial clouds. It has expanded to many technology trends, including certain cloud services available on demand.
Let’s take a look at this process of expansion and evolution. This is an important part of the story. Modularity in software development has always been an enviable concept, even back in the 1980s when I first became a coder. Early developers attempted to split applications into logical modules to improve code organization and maintainability.
Modules are typically designed to encapsulate specific functionality and are often created as part of a monolithic application. Back then, we thought about components and modularity only within a single application domain. This was the core of structured programming, which was popular at the time.
CBD takes modularity one step further by introducing the concept of reusable software components. Components encapsulate both functionality and data and provide a well-defined interface for interaction with other components or applications that act as containers (not containers as we call them these days).
In the 1990s, as the industry focused on component-based development and accelerated the adoption of component-based development, CBD frameworks such as JavaBeans, COM/DCOM, and CORBA emerged in response. These “frameworks” provided standardized methodologies and tools for building, integrating, and reusing components across multiple platforms and languages. Developers can now create components that conform to platform-neutral interfaces and execute reusable operations accessed using standard APIs, promoting interoperability and code reuse.
There was a lot of interest in component-based development and new component standards like Kova, but at the time this technology was only a stepping stone to many other, more effective concepts. While some may have had more positive experiences, I have concluded that applications using these standards are more expensive to create and much more difficult to deploy and maintain. It was a complete failure.
However, since then, as the demand for highly scalable and loosely coupled systems has increased, component-based architectures such as SOA and microservice architecture have rapidly emerged. An architecture like this requires independent, self-sufficient components that communicate through well-defined interfaces. By using the SOA approach, which breaks down complex systems into smaller, autonomous components, companies have been able to achieve real-world agility, scalability, and resilience. This is where today's cloud computing began.
“Have we arrived yet?”
As a result, component-based development is advancing rapidly today. The forces driving this development are containerization and cloud native technologies. Container platforms such as Docker and Kubernetes provide a standardized and portable runtime environment for components, enabling easy deployment, scaling, and management. Cloud native development further expands the concept of components by adopting cloud services, serverless functions, and APIs as building blocks of component-based applications.
It appears to be much more effective than many previous concepts, but one key element missing is an inventory of specific, useful components. However, the situation is changing in this area as well. I expect that the development of the components I am talking about now will explode in 2024.
In fact, recently, great interest and investment has been focused on industry-specific cloud services (industrial clouds), which are analogues of components. For example, a suite of supply chain optimization services built for a furniture manufacturer, or a derivatives trading system that can be used as a microservice for banks in a specific country. The remaining task is to use an easy-to-access, well-defined interface and, above all, to provide useful services that speed up productivity and innovation.
In summary, CBD has come a long way from its modular early days to today's reusable and extensible software components, i.e. true services. A focus on modularity, reusability, and well-defined interfaces has paved the way for technologies that 'just work'. As was the ideal 30 years ago, it is now possible to create systems just like making cars, and better methods will emerge in the future.