What’s Software Engineering
TL;DR: A scientific approach to creating Software. Full of information on how to master learning and handle complexity in our field.
Modern Software Engineering Book
-
Software Engineering applies a scientific approach to finding solutions to problems.
-
Engineering is stuff that works!
-
Software development is the process of discovering and learning, so we need to become experts at learning and handling complexity.
-
Software Engineering practices must allow us to build software faster and better. If not, it is just a waste of time.
-
Software is not a Production problem (physical things with a high cost of replication). Then we need to use different tools for the job such as testability, experiments, and continuous delivery remember that our real focus is learning and discovery.
-
Our Aim as software engineers is to create systems with high Stability and High Throughput (Measuring Performance)
Stability = Change Failure Rate + Recover Failure Time High Throughput = Lead time + Frequency of Deployment
Optimize for Learning
Learning is a fundamental factor in our job as professionals, and also key in the discovery process of our systems.
- Iterative
- Incremental
- Empiricism
- Feedback
- Experimental
The main idea is to focus on small steps gathering feedback and adjusting.
- Work in a way that allows us to make mistakes
- Explore the problem and make experiments controlling the variables
- We need to learn from previous experiences
Optimize for handling complexity
Edsger Dijkstra said The art of programming is the art of handling complexity
- Cohesion
- Coupling
- Separation of concerns
- Modularity
- Information hiding and abstraction
The main idea is to focus and keep things simple.
Remember that Simple != Easy
Tools to support engineering in Software
- Testability
- Deployability
- Controlling the variables
- Continuous delivery
One of the main takeaways for me in this chapter was tackling problems from: Business Vision, Goals > Technical Architecture > Process > Organizational Structure
instead of
Organization Structure> Business Vision, Goals > Technical Architecture > Processes
Conclusion: this book provides valuable insights about Software Engineering and the practices that allow us to work on a Scientific approach.