We need your comments! Please get a login here if you haven't got one and leave a comment.
Software Engineering Essentialized
You now have in front of you a book that will teach you modern software engineering on the one hand in a systematic, universal and generic way, however different from how the subject has been taught since its infancy. On the other hand it stands on the shoulders of the experience we have gained in the last 50 years or more.
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 key aspects that 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 is not just done by the authors of this book but by an international standard group called Object Management Group that gave rise to the Essence standard.
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 a complex discipline, software engineering. Even if you are not a student you will relearn 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 are coming into play. There is nothing wrong with that. Part of our profession is continual improvement and we encourage and expect that to go on forever.
The Focus of this Book
However, the latest technologies, practices and methods are not the focus of this book. This book is about learning a foundation that underlies all practices and methods that came and went during the last 50 years, and all that will likely come and go over the next 50 years.
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 is 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, so 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 a little bit about 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.
- What you learn from this book you can take with you and it will continue to help you grow throughout your software engineering career.
To be clear the practices you will learn are light versions of practices that you would need to use in a commercial production environment. To learn such practices 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. It is normally not enough to study by yourself. You may need training and coaching to really get up to speed on new practices.
Our Approach to Teaching in this Book
We also want to share with you a little bit about our approach to teaching software engineering that we use in this book. While we do share some history of software engineering in part 1 and in an appendix, our general approach throughout the book is a bottom up approach instead of a top down. The “user” is a young student and he/she is presented more and more advanced use cases of software development – from small systems to large systems. Or said in another way we will present the essence of software engineering through the eyes of a young student as he/she moves from the introductory courses to industry. This approach will help you understand how software engineering is often first viewed by new software developers and how their perceptions and understanding of software engineering grows with their experiences.
So with this brief introduction you are now ready to start your exciting journey toward “software engineering essentialized”. During the journey you will pass through the following:
- Part 1 - The Essence of Software Engineering. In this part we introduce the student to software engineering and to the Essence standard.
- Part 2 – Applying Essence in the small. In the first chapter of this part Essence is used to carry out some simple, small, but very useful practices. They are so small that they could be called mini-practices, but we call them games – serious games. They are highly reusable when carrying out practices resulting in for instance software products.
Then in the rest of this part we advance the problem and consider building some real, but rather small software. We make the assumption that the teams have worked together before so they have tacit knowledge about the practices they use and don’t need any additional explicit guidance in the form of described practices.
- Part 3 – Small Scale Development with Practices. We use practices defined on top of the kernel to provide further guidance to small teams.
- Part 4 – Large Scale Complex Development. To describe how to develop large software systems is far too complex for a textbook of this kind. However, we do explain the impact large teams and organizations have on the practices needed and how they are applied.
- Appendix - A brief History of Software Engineering.
On our website http://semat.org/web/book/ you are provided with additional training material and exercises associated with each part of the book. This website will be continually updated and will provide you with additional insight. As you gain experience, hopefully you will also be able to contribute to this growing body of knowledge.
 Essence has been likened to the DNA of software engineering or the periodic table in chemistry.