DEV Community

Shuwen
Shuwen

Posted on

Learning as a Software Engineer Is Not About Reading — It’s About Applying

I’ve read many software engineering books over the years, but one idea keeps repeating itself in different forms:

Learning only matters when it changes how you work.

This idea appears clearly in :contentReference[oaicite:0]{index=0}, and it shows up again—from a different angle—in :contentReference[oaicite:1]{index=1}.

Recently, while working on a real production system, I realized I wasn’t just reading these ideas anymore—I was actively applying them.


From Reading to Doing: What Changed in My Daily Work

Over the past months, I’ve been refactoring and evolving a system that spans multiple microservices. Instead of adding features blindly, I started applying what I had learned:

  • Refactoring services using Clean / Hexagonal Architecture
  • Separating domain logic from infrastructure
  • Introducing distributed tracing to make invisible dependencies visible
  • Designing around use cases, not frameworks
  • Treating observability as a learning tool, not just a debugging aid

None of these came from copying code snippets from a book.

They came from:

  • Reading
  • Reflecting
  • Applying
  • Observing results
  • Adjusting again

This is exactly what The Pragmatic Programmer emphasizes:

knowledge has value only when it is exercised.


Clean Architecture Was Not the Goal — Understanding Was

When I first read about Clean Architecture, it sounded elegant. But elegance alone doesn’t survive contact with production systems.

The real value appeared only when I applied it to:

  • Reduce coupling between services
  • Make refactoring safer
  • Improve testability
  • Clarify ownership of business rules

At that point, architecture stopped being a diagram.

It became a tool for thinking.

That shift—from concept to practice—is learning.


Tracing: Learning the System by Observing It

Another turning point was introducing distributed tracing.

Before tracing:

  • Debugging meant guessing
  • Logs were fragmented
  • Cross-service failures felt like finding a needle in a haystack

After tracing:

  • Service dependencies became visible
  • Execution paths were explicit
  • Failures told a story

Tracing didn’t just help debugging—it taught me how the system actually behaves, not how I assumed it behaved.

Observability became a way to learn the system, not just fix it.


Broad Knowledge Matters More Than We Think

This brings me to a personal experience that changed how I think about seniority.

The Plumber Story

Several months ago, we had a water-dripping issue in our house.

We hired a plumber.

He drilled holes, checked pipes, and looked everywhere inside the house—but found nothing. No solution.

Later, on a rainy night, we noticed water dripping along the bricks. The real issue was outside:

  • Rusted nails on the roof
  • Water entering from above
  • Gravity doing the rest

The plumber wasn’t incompetent.

He was too narrow in perspective.

An experienced plumber might have asked:

  • “Does this only happen when it rains?”
  • “Could the source be outside?”
  • “Let’s check the roof first.”

That moment immediately reminded me of Staff Engineer.


The Staff Engineer Mindset: Depth + Breadth

Staff Engineer makes a simple but powerful point:

A staff engineer is deep in one or two areas,

but broad enough to see the whole system.

That’s the difference between:

  • Fixing symptoms
  • Understanding systems

In software, this means:

  • Deep expertise in your core domain
  • Broad understanding of:
    • Infrastructure
    • Networking
    • Observability
    • Data flow
    • Human and organizational workflows

Without breadth, we drill holes in the wrong place.


Continuous Learning Is About Expanding Vision

Looking back, I realized something important:

I didn’t become better by reading more.

I became better by connecting what I read to real problems.

  • Architecture books helped me refactor safely
  • Observability taught me how systems actually fail
  • Broader technical exposure helped me ask better questions

This is continuous learning:

  • Not chasing trends
  • Not memorizing tools
  • But expanding how you see problems

Final Thought

A strong software engineer is not defined by:

  • How many books they read
  • How many frameworks they know

But by:

  • How they adapt what they learn
  • How they apply it to real systems
  • How wide their perspective becomes over time

Just like an experienced plumber,

the best engineers don’t just know where to drill.

They know where not to.

Top comments (0)