Modern Software Engineering
1 minute read
Modern Software Engineering
Authors
How to buy the book
Parts and Chapters
- Part I - What is Software Engineering?
- Introduction
- What is Engineering?
- Fundamentals of an Engineering Approach?
- Part II - Optimize for Learning
- Working Iteratively
- Feedback
- Incrementalism
- Empiricism
- Being Experimental
- Part III - Optimize for Managing Complexity
- Modularity
- Cohesion
- Separation of Concerns
- Information Hiding and Abstraction
- Managing Coupling
- Part IV - Tools to Support Engineering in Software
- The Tools of an Engineering Discpline
- The Modern Software Engineer
Introduction
- Software development is a process of discovery and exploration; to succeed at software development software engineers must become experts at learning
- The best approach to learning is science, software engineers need to adopt the techniques and strategies of science and apply them to software development
- The scientific method is described as:
- Characterize
- Make an observation of the current state
- Hypothesize
- Create a description, a theory that may explain your observation
- Predict
- Make a prediction based on your hypothesis
- Experiment
- David Farley’s working definition of software engineering:
- Software Engineering is the application of an empirical, sceintific approach to finding efficient, economic solutions to practical problems in software
- Software engineers must become experts at learning and experts at managing complexity
- Five techniques that form the base of the focus on learning:
- Iteration
- Feedback
- Incrementalism
- Experimentation
- Empiricism
- Five elements that form the base of the focus on managing complexity:
- Modularity
- Cohesion
- Separation of Concerns
- Abstraction
- Loose Coupling
- Five ideas to use as tools to steer software development:
- Testability
- Deployability
- Speed
- Controlling the variables
- Continuous delivery
- This book “Modern Software Engineering” is about what it means to apply scientific-style reasoning to our discipline and so achieve something that we can genuinely refer to as software engineering
Tony’s Detailed Notes
Detailed Notes