The Essentials of Modern Software Engineering. Ivar Jacobson
Чтение книги онлайн.
Читать онлайн книгу The Essentials of Modern Software Engineering - Ivar Jacobson страница 6
In a manner of speaking, one might say that the essence of Essence is its powerful mastery of the fundamental abstractions of software engineering. I saw in Ivar the seeds of Essence in the early days of working with him and Jim on the UML, and so now it is wonderful to see this work in its full flowering. What you hold in your hands (or on your computer or tablet, if you are so inclined) represents the deep thinking and broad experience of Ivar; information that you’ll find approachable, understandable, and—most importantly—actionable.
Enjoy the journey; it will make a difference for the good.
Grady Booch
IBM Fellow, ACM Fellow, IEEE Fellow, recipient of the BCS Ada Lovelace Award, and IEEE Computer Pioneer.
Preface
We have developed software for many years, clearly more than 50 years. Thousands of books and manymore papers have been written about how to develop software. Almost all teach one particular approach to doing it, one which the author thinks is the best way of producing great software; we say each author has canned his/her method. Most of these authors have some interesting ideas, but none can help you in all the circumstances you will be faced with when you develop software. Even the most modern books take this approach of presenting and selling “the one true way” of doing it. Unless you are a world leader ready to impose your own true way of doing it, all other top experts in the world seem to be in agreement that this proprietary approach is not the way to teach software development to students.
You now have in front of you a book that will teach you modern software engineering differently from how the subject has been taught since its infancy. On one hand, it stands on the shoulders of the experience we have gained in the last 50 years or more. On the other hand, it teaches the subject in a universal and generic way. It doesn’t teach you one particular way of developing software, but it teaches you how to create one way of working that matches your particular situation and your needs. The resulting way of working that you create is easy to learn (intuitive), easy to adopt (by a team), easy to change (as you learn more), and fun to work with thanks to its user experience being based on games and playing cards.
It is worth repeating: This book does not primarily teach you one particular way of developing great software; rather, it teaches you how to create such a way of working that should result in great software.
How This Book Is Different from Other Software Engineering Textbooks
On the surface this book looks like most other books in software engineering (and there are many of them; some are excellent books). It describes many important aspects of software engineering and how a typical software engineering initiative resulting in a new or improved software product takes place. However, underneath the surface, this book is fundamentally different. The things being described are selected because they are prevalent in every software engineering initiative. They are the essential things to work with, the essential things to do, and the essential competencies needed when you develop software. They are not just examples of things or typical things. They are selected because they are the things that underpin all recognized ways of developing software. The selection has been made by a group of experts from around the world representing academia, research, and industry, under the auspices of an international group called Object Management Group that gave rise to the Essence standard.1
Essence addresses, first and foremost, a number of serious challenges we have in the software industry today, one of which is that for 50 years we have had a war between the canned methods (but there are many more challenges, which we will discuss in the book). In addressing these issues, Essence has made it possible to systematically improve the way we work, which should result in better software—faster and cheaper. However, this will have to wait to be discussed until you have gone deeper into the book.
Finally, the following summary can be repeated over and over again.
• Essence supports people when working with methods and it helps people while they actually work developing software.
• Essence is not yet another method. It is many things but not a method competing with any other method.
• It is a foundation to be used to describe methods effectively and efficiently.
• It is a thinking framework to be used when creating your method or using your method, whether it is explicit or tacit.
• It can help you in a method-agnostic way to measure progress and health in your endeavor.2
• It can help you, if you have challenges, to find root causes of the problems with your endeavor.
How This Book Can Help Students
If you are a student, this book will play a significant role in your career, because from this book you will learn the fundamentals of the complex discipline of software engineering. Even if you are not a student, you will rediscover your discipline in a way you never expected. This is no ordinary software engineering textbook. What you will learn from this book you can take with you wherever you go, for the rest of your software engineering career.
Other books will help you learn the latest technologies, practices, and methods. While you will need that kind of information as you go through your career, their value will fade over time as new technologies, practices, and methods come into play. There is nothing wrong with that. Part of our profession is continuous improvement and we encourage and expect that to go on forever.
What You Will Learn from This Book
So that you have the right expectations, we want to tell you what you can expect to learn from this book.
• You will learn what are the essentials of software engineering presented as a common ground.
• You will learn a simple, intuitive language by which you can describe specific ways of working, called practices, using the common ground as a vocabulary.
• You will learn how the common ground can be used to assess the progress and health of your software development endeavors no matter how simple or complex.
• You will learn “lite” versions of a number of practices that are popular at the time of writing this book, but they are only meant as examples to demonstrate how to use the common ground and the language to describe practices.
• You will learn how to improve your way of working by adding or removing practices, as and when the situation demands.
• You will learn how to improve communication with your teammates.
To be clear, this is what you won’t learn from this book.
• You will not learn any fully developed practices to be used in a real endeavor (in a commercial production environment), since what we teach here is not intended for that purpose. To learn practices that will work in such an environment, you need to go to practice libraries such as the Ivar Jacobson International practice library (https://practicelibrary.ivarjacobson.com/start) or, if the practices are not yet essentialized, you will have to go to books or papers written about these practices.
• You will