Friday, October 2, 2009

On Software Life & Career

Here we will discuss about advices and recommendations that may have influence on the lives and careers of software professionals.
  • Discuss personal experiences related to this topic.
  • Recommend books that describe personal experiences on careers related to software development.
  • ...

On Software Pyschology and Sociology

This cathegorization includes topics related to techniques coming from the psychology or social sciences that allow to achieve a better performance when defining or constructing software. This includes:
  • Techniques to improve communication in a group of persons.
  • Techniques to avoid procrastination.
  • Techniques to increase the creativity.
  • Social patterns that can be applied to software projects.
  • ...

On Software Quality & Economics

This section discusses topics related to:
  • Software quality and assurance.
  • Metrics for different software areas and phases.
  • The influence of economics in software development.
  • ...

On Software Philosophy

Topics falling under this section will discuss the different approaches (philosophies) that exists or arise when constructing software. Examples of topics are:
  • New methodologies for software construction.
  • Traditional/heavy-weight methodologies/processes (e.g. waterfall/cascade, Unified Process etc.) versus agile methodologies/processes (Lean, SCRUM, XP etc.).
  • Discussions on programming paradigms: Structured, Object-oriented, Functional etc.
  • Pros and cons of top-down versus bottom-up approaches in different scenarios.
  • ...

On Software Languages

This section will include comments on:
  • The language as a communication tool in software projects.
  • The importance of the language on software implementation.
  • The pros and cons of the different programming languages.
  • Domain-specific languages.
  • ...

On Software Art

Here we will talk about:
  • Well-known techniques to build software.
  • Tips and tricks to develop better software.
  • ...

On Software Aesthetics and Design

In this section we will disscuss about the following topics:
  • The importance of design phase for software construction as intermediate phase between the definition of the architecture of the system and its implementation.
  • Design patterns as a way to define beautiful code.
  • Influence of design and aesthetics on software.
  • Bidirectional association between software design and software usability.
  • ...

On Software Science

In this section we will cathegorize the blog entries commenting relevant papers/technical reports published in the main scientific conferences related to different areas of software:
  • Software engineering.
  • Operating systems.
  • Database and transactional systems.
  • Distributed systems.
  • ...
Scientific books, news or studies related to other disciplines or multidisciplinary knowledge areas are also welcome here because they may have a potential impact on the process of building software.

On Software Engineering

Under this umbrella, we will deal with topics related to engineering such as:
  • Engineering processes/techniques that can be adapted to software design and construction.
  • State-of-the-art in software engineering.
  • New interesting tools for the software cycle.
  • ...

On Software Architecture

In this section we will deal with the following topics:
  • Offer our own opinions and reflections on software architectures.
  • Describe our vision of the main problems that arise in the definition of software architectures and offer guidelines to find possible solutions.
  • Show the influences of other disciplines (architecture, arts, engineering, etc.) on software architectures (e.g. setting up parallelisms with the civil architecture domain).
  • Architectural patterns.
  • ....

Thursday, October 1, 2009

On Software Construction
(Or How to Build Castles in the Sky)

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.