The Philosophy of Software Architecture

The Philosophy of Software Architecture

Amit Goel (RMIT University, Australia)
Copyright: © 2010 |Pages: 12
DOI: 10.4018/jwp.2010100103

Abstract

Computer Software Intensive systems have become ingrained in our daily life. Apart from obvious scientific and business applications, various embedded devices are empowered with computer software. Such a diverse application of Computer Software has led to inherent complexity in building such systems. As civilizations moved forward, the concept of architectural thinking and practice was introduced to grapple with the complexity and other challenges of creating buildings, skyscrapers, townships, and cities. The Practice of Software Architecture is an attempt to understand and handle similar challenges in Software Intensive Systems. This paper introduces software architecture and the underlying philosophy thereof. This paper provokes a discussion around the present and future of Software Architecture. The authors discuss skills and roles of Software Architect.
Article Preview

Introduction

The invention of automated machines dates back to seventeenth century. These automated machines were run by mechanical and electrical control mechanisms and performed simple tasks. The advent of electronics based computing machines increased the potential of these machines making them complex. The concept of software has manifested in all forms of computing machines whether mechanical, electrical or electronic, being the lifeline thereof.

As the computer systems became more powerful and smaller in size, their usage diversified from scientific computations to business systems. It wasn’t long before they were used to automate various devices such as Phones, Airplanes and Cruise Control Systems in cars. Today most of our devices are embedded with a computer of one kind or another. The diverse usage, heterogeneous systems and structure of computers systems lead to further complexity for software, which has now become the essential part of any computer system, large or small.

In order to manage complexity, a journey of abstractions was observed which passed through machine language (language of 0 and 1), assembly language (language of instructions and mnemonics such as add, load), high level languages the (C, C++, Java) and fourth generation (4GL) or domain specific languages (DSL). From another viewpoint this complexity was being addressed by using concepts such as top-down and bottom-up software development approach. The theory of software design and design patterns was formed during these developments. As the complexity increased, the need was felt to make decisions at much higher levels of abstraction, and to make strategic decisions before making tactical (as in design) or operational decisions (as in code). The theory of Software Architecture started taking shape in order to manage the complexity at higher levels of abstraction and to embed strategic decision making in the building of software systems.

In this paper we explore few fundamental thoughts on software architecture to provoke discussion around some basic questions. We start by discussing the meaning and definition of the term ‘Software Architecture’ in section 2. We ask “Why do we need to do Software Architecture?” in section 3 and hence outline the rationality for doing the software architecture. Section 4 discusses what skills and qualities are required by a software engineer engaged in the practice of software architecture. Section 5 discusses the software architecture metaphor and how is it similar to or different from art, engineering and science. This section leads us to think whether software architecture is an art, science or engineering or a mix of these. We conclude by providing a summary and future direction.

This paper covers few key issues about philosophy of software architecture in breadth. Hence the discussion is brief. However, we point the reader to various references to dive deeper into details of various concepts presented in this paper.

Complete Article List

Search this Journal:
Reset
Open Access Articles: Forthcoming
Volume 11: 2 Issues (2019): 1 Released, 1 Forthcoming
Volume 10: 2 Issues (2018)
Volume 9: 2 Issues (2017)
Volume 8: 1 Issue (2016)
Volume 7: 2 Issues (2015)
Volume 6: 4 Issues (2014)
Volume 5: 4 Issues (2013)
Volume 4: 4 Issues (2012)
Volume 3: 4 Issues (2011)
Volume 2: 4 Issues (2010)
Volume 1: 4 Issues (2009)
View Complete Journal Contents Listing