DEV Community

Cover image for Software Engineering: Do You Concur?
raddevus
raddevus

Posted on

Software Engineering: Do You Concur?

Reading A Great New Book

I just added the book, Modern Software Engineering: Doing What Works to Build Better Software Faster to my bookshelf & began reading it last night.

Authors With Great Ideas, Who Clearly Express Them

I am so amazed by this clear, clean, lucid explanation (& I'm always excited to find people/authors who think this way) that I had to share it.

Two Main Principles of Software Engineering

These ideas of the foundation of what Software Engineering really is are what I've thought about building software for many years but have never been able to express them this way.

Great Content From the Introduction (my emphasis)

Software development is a process of discovery and exploration; therefore, to succeed at it, software engineers need to become experts at learning.

When we organize our thinking this way and start to make progress on the basis of many small, informal experiments, we begin to limit our risk of jumping to inappropriate conclusions and end up doing a better job.

Software engineering is the application of an empirical, scientific approach to finding efficient, economic solutions to practical problems in software.

This means that we must manage the complexity of the systems that we create in ways that maintain our ability to learn new things and adapt to them.

So, we must become experts at learning and experts at managing complexity.

There are five techniques that form the roots of this focus on learning. Specifically, to become experts at learning, we need the following:

  • Iteration
  • Feedback
  • Incrementalism
  • Experimentation
  • Empiricism

This is an evolutionary approach to the creation of complex systems.
Complex systems don’t spring fully formed from our imaginations. They are the product of many small steps, where we try out our ideas and react to success and failure along the way. These are the tools that allow us to accomplish that exploration and discovery.
To become experts at managing complexity, we need the following:

  • Modularity
  • Cohesion
  • Separation of Concerns
  • Abstraction
  • Loose Coupling

I really love this initial explanation.

Two Main Strengths To Understand Building Software

We need two main strengths:

  1. An expert understanding of Learning
  2. Deep understanding of how to manage complexity

Always Learning

We'll never attain these entirely, but as we become better at both of those our ability to create elegant solutions grows by leaps & bounds.

Complex Systems Only Arise From Simple Ones

Also, really like that the author includes the idea of incrementalism.
Complex systems can only be built from simple ones.

What do you think about these concepts?

Top comments (0)