Since two or three decades ago, almost everyday product contains software in its internals. Software helps in providing the main functionalities of tens of thousands of products; phones and smartphones, TV sets, video and photo cameras, dishwashers, GPS systems, cars, sports watches…
and, of course, computers.
In computer science, software is presented as something intangible. It is something logical, not physical. Software is like consciousness for a human being. The intelligence for a brain. And for computers, the soul of the hardware. However, software also presents features of physical objects. An important requirement for software also present in physical things is that it must have a well-defined structure.
However, the structure of things depends on what is going to be built. For example, regarding architecture, it is not the same for an architect to design an apartment than designing a hospital. This has to do with the requirements of both types of buildings regarding usability, location, services, etc. The requirements for designing houses are totally different from the requirements for building hospitals. This is also applicable to software. Moreover, depending on how the structure is defined, software can present other physical properties such as being "ductile" and "malleable" (adaptable). So, a question arises here:
But, how can we build appropriate, useful and adaptable structures using an intangible element such as software? That is, how can we build castles in the sky? Or shacks, apartments, villas, townhouses, skyscrappers etc. All the possible answers that are driven to provide a solution for this question pretend to form the contents of this blog:
The objective of this set of essays is to offer our comments and points of view about different parts of the software design and construction process and the related state-of-the art. At the same time, we aim to collect personal experiences about software development and show how several techniques used in surrounding disciplines such as architecture, engineering or arts and crafts influence/impact either directly or indirectly the software development process. The surrounding disciplines identified are used to cathegorize the blog entries in different sections. The following is the initial set of sections we have identified:
- On Software Architecture
- On Software Engineering
- On Software Science
- On Software Aesthetics and Design
- On Software Art
- On Software Languages
- On Software Philosophy
- On Software Quality and Economics
- On Software Psychology and Sociology
However, the sections above are not limited to this initial set of disciplines and can be extended when required.
There is also a final section that pretend to include reflections/recommendations about the life and career of a software professional:
- On Software Life & Career
The next blog entries will introduce the disciplines and how are related to the software construction process in the context of this blog.