Books That Transformed My Perspective on Software Engineering
Written on
Chapter 1: My Journey into Software Engineering
Since my high school years, I was aware that a career in Software Engineering awaited me. Following conventional advice, I pursued a Bachelor's degree in Computer Science. While I grasped the essential principles, my programming experience primarily revolved around academic assignments, culminating in an internship opportunity.
Photo by Markus Spiske on Unsplash
It was during my time at a small non-profit organization practicing Extreme Programming that my passion for coding truly ignited. Collaborating with exceptionally skilled engineers, I absorbed best practices and witnessed their enthusiasm for creating high-quality, enjoyable software consistently. Throughout my career, numerous books have impacted my approach, but five, in particular, have resonated deeply with me.
(Links below are affiliate links)
Section 1.1: Book #1 - Clean Code
Clean Code: A Handbook of Agile Software Craftsmanship
Amazon.com: Clean Code: A Handbook of Agile Software Craftsmanship (Audible Audio Edition): Robert C. Martin, Theodore…
amzn.to
Clean Code was one of the first recommendations I received, packed with valuable insights for Software Engineers seeking practical guidelines. Robert Martin is candid about his views on writing software, a perspective I found invaluable early in my career. Key takeaways include:
- Prioritize meaningful naming for classes, functions, and variables
- Simplify your software as much as possible
- Ensure functions are concise, focusing on a single task
- Maintain consistency across your codebase
- Favor polymorphism over conditional statements
- Implement dependency injection
- Write tests that are fast, independent, readable, and repeatable
Section 1.2: Book #2 - Growing Object-Oriented Software
Growing Object-Oriented Software, Guided by Tests
Growing Object-Oriented Software, Guided by Tests [Freeman, Steve, Pryce, Nat] on Amazon.com. FREE shipping on…
amzn.to
This book emphasizes Test Driven Development (TDD) and the importance of building quality from the outset. Traditionally, teams would wait until project completion to deploy, but this book encourages the construction of a “walking skeleton,” essentially launching a basic application to mitigate risks early on.
Implementing this approach has significantly reduced the stress associated with going live; launch days feel more like celebrations rather than stressful events filled with anxiety about potential issues.
Photo by Anthony DELANOIX on Unsplash
Additional principles I learned include:
- Favor telling over asking
- Apply the Law of Demeter to avoid long method chains
- Understand the Testing Pyramid (Unit, Integration, End-to-End)
- If a failing test is challenging to write, consider redesigning the system
Chapter 2: Key Readings
The first video, 5 Books that changed the way I think about Software Engineering, delves into the transformative literature that has reshaped my approach to coding and software development.
The second video, 6 Books That Changed My Life (As A Software Engineer), explores additional influential readings that have impacted my professional journey.
Section 2.1: Book #3 - Refactoring
Refactoring: Improving the Design of Existing Code (2nd Edition)
Refactoring: Improving the Design of Existing Code (2nd Edition) (Addison-Wesley Signature Series…
amzn.to
Understanding refactoring can be daunting for those starting in Software Engineering. This book articulates what refactoring entails and how to implement it effectively to maintain clean codebases over time. The concept of refactoring refers to restructuring code without altering its functionality.
The joy of writing tests to verify behavior before simplifying code is immensely rewarding. This practice enhances test-writing skills while ensuring that passing tests confirm code functionality.
The latter half of the book, while dense, offers clear “recipes” for various refactoring techniques based on different code smells, encouraging critical thinking about when to refactor.
Section 2.2: Book #4 - 99 Bottles
99 Bottles - Sandi Metz
We are practical people. We love beautiful code but we're committed to getting things done. 99 Bottles of OOP enables…
sandimetz.com
I was fortunate to attend a workshop led by Sandi Metz, where I had the opportunity to engage deeply with the material in her book. This work focuses on effective Object-Oriented Programming (OOP) and refactoring, covering key principles such as SOLID.
The unique exercise of performing one-line refactors—modifying only a single line of code at a time—encourages a thoughtful approach to keeping tests passing while adhering to a specific methodology.
Section 2.3: Book #5 - Extreme Programming Explained
Extreme Programming Explained: Embrace Change, 2nd Edition
Extreme Programming Explained: Embrace Change, 2nd Edition (The XP Series)
amzn.to
This book revolutionized my perspective. Previously, my role as a Software Engineer involved working independently, focusing solely on meeting deadlines and maintaining quality. My days were often spent isolated, merging my work into the main codebase only for future deployments.
However, after joining a small team practicing Extreme Programming, I experienced a collaborative environment that accelerated my learning. We maintained various systems with a compact group, employing practices like writing tests first, discussing architecture, and pair programming, which transformed our workflow.
Key takeaways from this book include:
- Emphasis on communication
- A focus on simplicity
- The value of feedback
- The necessity of courage and respect
Practices promoted include:
- Pair programming
- Test Driven Development (TDD)
- Continuous Integration/Continuous Deployment (CI/CD)
- Small, frequent releases
- Relentless refactoring
- Adhering to a 40-hour workweek
- Collective code ownership
If you found this article insightful, consider subscribing to my Medium posts! I'm eager to hear about books that have influenced your approach to Software Engineering—let’s share our reading lists! If this topic resonates with you, check out my YouTube channel as well. Wishing you a fantastic day!