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.
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.