Modern software engineering (Category Management)
I recently finished reading this book by David Farley, who has been talking about optimizing development processes for years. Whole. 15 years ago, David Farley and Jez Humble ("Accelerate" co-author) published a bookContinuous DeliveryIt was a breakthrough for its time. In his new book, David decided to summarize the experience and talk in general about software engineering. I read this book for 3 I could not read more than a month in a day. 10 Pages in a row - the author writes too boring and slow. But the material itself is interesting enough to study. Dave has a popular one. YouTube channelwhere most of the clips are long 10 or 15 minutes, i.e. an acceptable dosage of boring is selected:) Let me tell you a little about the content of the book, which consists of 4- parts
1. What is software engineering This part deals with this existential question:) Dave’s main message is that “engineering is the practical application of science,” and then he shows why software is engineering. It is interesting that he once sank for software craftmanship and his manifestoThat was against the engineering approach, but now Dave's for engineering.
2. Optimize for learning The author points to the fact that we operate in a rather unpredictable environment, creating software, so we need to be experts in learning. That is, we must effectively gain knowledge from our actions. To do this, the author focuses on the following things, which he analyzes in separate chapters:
- Working iteratively - we need to work in iterations:) In this chapter, Dave struggles with his version of waterfall, which he has no feedback between the stages.
- Feedback The importance of feedback in all aspects of software creation is highlighted: code writing, design, architecture, product design. And that feedback should be received as early as possible.
- Incrementalism The importance of modularity and limiting the impact of change
- Empiricism Unlike mathematicians, engineers must rely on reality to create their creations, so we must start from facts and reality, not fiction.
- Being experimental The author describes an experimental approach from science. I recommend Trustworthy Online Controlled Experiments. told
3. Optimize for managing complexity The author explains how we can deal with complexity in software development. Here the author describes the basic principles to which individual chapters are devoted. Modularity – the concept of modularity has been actively discussed since the time of Parnassus and his article. 1972 yearOn the criteria to be used in decomposing systems into modules" Cohesion is defined as “degree to which the elements inside a module belong together” and then as a design principle. Separation of concerns – stories about dependency injection, DDD, port & adapters, and how TDD helps in sharing responsibility
- Information hiding and abstraction - concept It was also introduced by Parnassus in the aforementioned article. Managing coupling: First, the author defines Wikipedia as “the degree of interdependence between software modules” and then begins to discuss how to manage coupling. I recommend watching Vlad Hononov’s performance from ArchDays Confa. 2023 "Complexity and modularity are two sides of the same coin" told earlier
4. The tools of an engineering discipline The author tells in detail about the tools for achieving engineering excellence: testability, deployability, speed, controlling the variables. (repeatability), continuous delivery. The most powerful software development process is the greatest. told. And in the last chapter, he describes a modern software engineer, which is similar to what he described. friend
In general, the book was interesting and useful.
#Management #Software #Engineering #SoftwareDevelopment #Processes #Devops #SRE