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
      • Test your prediction
  • 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