This book focuses on human aspects of software engineering. The rationale for writing this book stems from the fact that the more the software world is developed, the more the software engineering community accepts that the people involved in software development processes, not the processes or technology, deserve more attention. In this spirit, this book attempts to highlight the world of software engineering from the perspective of the main actors involved in software development processes: the individual, the team, the customer, and the organization. Indeed, the code and technology are main actors in this process as well, and are discussed in this book. However, when code and technology are addressed, the discussion is conducted from the human perspective.
Goals of This Book
This book is written for software developers, whether university students or practitioners in the software industry. It aims to increase software team members awareness of the various facets of the human aspects of software engineering. The idea is neither to cover all the available material about the human aspects of software engineering nor to supply a comprehensive and exhaustive list of references about the topic. Rather, our goals in writing this book are
To illustrate the richness and complexity of the human aspects of software engineering.
To increase readers awareness of problems, dilemmas, questions, and conflicts that might be raised with respect to the human aspect of software engineering during the course of software development.
To achieve these goals the book aims to inspire three meta-concepts: awareness, reflection, and abstraction. The idea is to increase software engineers awareness of their development environment, by applying on-going reflection with respect to topics whose complexity can be characterized by different levels of abstraction . The importance of these three concepts results from the uniqueness of software development environments and processes and the cognitive and social complexities that characterize them.
Rationale of This Book
If you ask a group of software engineers what software engineering is, you will probably come up with more than one definition, each emphasizing different facets of the discipline. This phenomenon is also reflected in the definitions of software engineering described in professional literature. Indeed, software engineering is a multifaceted discipline. The rationale for this book stems from the fact that software engineering s human aspect, we believe, does not get the attention it deserves .
Software engineering is a young and evolving discipline. The name software engineering was popularized by the 1968 NATO Conference in Garmisch, Germany. This conference aimed at discussing the problems associated with the evolving complexity of computing systems, and the acknowledgment of human limitations to cope with this evolved complexity. Indeed, the complexity of software development is acknowledged from the first days of the discipline. For example, [Zelkowitz, Shaw, and Gannon79] explain in the introduction to their book that it is not possible to totally describe in one book all the facets and aspects of software development so that its complexity can be fully understood and appreciated. Interestingly, the nature of the discipline is still questioned today. Sometimes, it is addressed as an art. For example, Knuth, in his book The Art of Computer Programming [Knuth97], explains the attractive nature of the process of preparing programs by comparing it to composing poetry or music (this is not surprising, since both music and software engineering have a common core in mathematics). Other perspectives of software engineering emphasize the engineering aspects of the discipline, focusing on software development processes.
The multifaceted nature of software engineering is also expressed by different approaches that aim at describing the structure of the discipline. The following are three examples of professional organizations that suggest a mapping of the discipline s body of knowledge:
The Software Engineering Institute (SEI) at Carnegie-Mellon University ( http://www.sei.cmu.edu/ )
The SWEBOK (Software Engineering Body Of Knowledge) ( http://www.swebok.org/ )
The CCSE (Computing Curricula Software Engineering) joint initiative of the IEEE-CS and the ACM ( http://sites.computer.org/ccse/ )
Recently, human aspects of software engineering have gotten more and more attention. Awareness of this component of software engineering appeared in Brooks book The Mythical Man-Month [Brooks75], first published in 1975 and revised in 1995. In the Preface to the 20th Anniversary Edition, Brooks writes that he is surprised that The Mythical Man-Month is popular even after 20 years . His statement indicates how difficult it is to apply software development lessons learned to future software development projects. This difficulty may be explained by the multifaceted nature of the discipline and the uniqueness of software development processes. This book addresses this complexity.
We believe that now is the ideal time to discuss the human aspects of software engineering. The high-tech bubble has burst, and it seems that the software engineering community is ready to learn the lessons from that era. It also seems to be the right stage of the evolution of software engineering to consider more closely the people involved in software development processes.