This book provides a unique examination of the software development process, arguing that discipline, still dominated by methods conceived in the framework of older technologies, must undergo a fundatmental reexamination of its guiding principles in order for significant progress to take place. To gain fresh insights into how we ought to direct future research, the author begins with a search for first principles. The book begins with an exploration of the scientific foundations of computer technology, then examines design from the perspective of practitioners. The book also offers a critique of the methods employed in software development and an evaluation of an alternate paradigm that has been used successfully for 14 years. The concepts reviewed here comprise a set of core readings for understanding the research and development challenges that will confront computer technology in the 21st century and will be of great interest to computer science researchers and educators, graduate students, and software engineers.
Inasmuch as there is a prologue that describes the objectives and structure of this book, I am using this preface to present its goals in a personal context. I begin by observing that I enjoy writing the preface to a book. The preface is the last part that I write; it is a signal that, except for the editor's suggested changes, the book is finished. In this case, the preface is even more satisfying. In a matter of weeks I will retire. After thirty-plus years of work in computing, I am about to try something different. Thus, this book comes at a watershed in my life. As I hope to show, it also comes at a time of fundamental change in the way in which software systems are developed.
In part, the preparation of this book has been an act of closure. It constitutes the fulfillment of my obligation as a government-funded researcher to present coherently the results of my long investigation of the software process. But I am not so self-centered that I would write an entire book just for my own gratification. (If that were my intent, I certainly would have made it shorter!) What new-found wisdom, then, has my research uncovered that justifies this book? Simply stated, it is the observation that we now develop software within a framework of obsolescent concepts. Continued reliance on this framework, moreover, constrains both process improvement and the scope of our applications. I conclude, therefore, that a shift in the software development paradigm is necessary. In the words of the title, I propose that we move beyond programming.