7 old school books each Software engineer must read to reach solid Engineer 2 level
Overview
In this article I want to talk with you on what Software Engineer 2 / Middle / Regular Engineer can do to enhance his coding skills, by mastering well-established techniques, methodologies and patterns focused on the “Single Component” development area.
Further on, let’s try to breakdown this topic by using Golden Circle Model (Why, How, What)
Why?
Let’s first observe the modern Software engineer career ladder
US / EU software engineers primary titles classification:
Then there are 2 distinct possibilities to grow your career further, either go by technical (Staff Engineer, Senior Staff Engineer, Principal or Architect) or managerial path (4 more titles, which are out of scope of this article).
Typical Engineer II responsibilities and expectations are pretty straightforward, but let’s underline most important of them, in terms of day-to-day coding activities:
As you might see I’ve intentionally emphasized multiple activities here, which requires Engineer II to be a good team-player, otherwise team productivity
The other motivators and drives, besides enhancing coding skills
We’ll limit the scope of this article to the software engineers, who are working with Java, Python, Javascript, PHP, C#, C++, Swift etc stack, developing web-based, desktop or mobile applications. We’ll overview only well established coding practices, proven by time, which will help you build better software products increasing their maintainability, supportability, and extensibility.
How?
There are several ways to grow your engineering skills and be a “better coder”. The obvious question engineers are facing here is “how to identify what should I learn, what sources should I trust, and what should I focus on first?”. Well, in this case you should ask your more senior fellows a question like “What should be my individual career growth plan
I personally find books, articles and text-graphical guides most productive, evaluating by time/value proposition, for Engineers I and II. Of course you might find multiple online-trainings and free Youtube videos, which will explain the same stuff you can get from books, in a more “entertaining” way, but, as you might guess - the old school prefers books, produced by the original authors and receiving the information from the origins. I’m not against video content, but it might not be as efficient as text/graphical representation.
The methodology behind compiling this list is simple - first of all I’ve gone through learning, applying and teaching each of those methodologies previously in my career, by going through a full technical career ladder, starting at junior position ending with Principal Eng. and CTO position, in different companies during the past 17 years. Second - I’ve battle-tested all of them with multiple engineering teams I’ve supported and happily observed how dozens of engineers grew their skills dramatically, to become better craftsmans.
Where to find time for an education? Well, first ask your manager what education framework you have in the company, but generally that should be your non-working hours solely or combined with a limited, pre-defined, amount of time dedicated for skills improvement.
How to measure that you’ve really improved your skills and not just wasted time? There are several common methodologies I use for different types of company, management, and external factors:
What?
How to read the list below
Below you’ll find a well-known list of patterns, practices and methodologies, grouped by their name. The same template would be used for each topic.
Design Patterns (GoF)
Original source
Amazon book rating: 4.7 based on 2400+ reviews
Google book rating: 96%
Published in: 1994
Precaution: This book is 30 years old, so the environment which was actually used at the time it was written is sort of irrelevant as of today. But, the key design patterns are still relevant, like 30 years ago. So my personal recommendation - is to either use interactive design patterns catalog from list below or find a programming language specific book of your choice. Throughout your career you might use some of the patterns more often than others.
Key concepts
Object-oriented design techniques, Program to an interface, not an implementation, Composition over inheritance, dynamic binding, polymorphism, inheritance.
Creational patterns (Abstract factory, Builder, Factory method, Prototype, Singleton)
Structural patterns (Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Private Class Data, Proxy)
Behavioral design patterns (Chain of responsibility, Command, Interpreter, Iterator, Mediator, Memento, Null Object, Observer, State, Strategy, Template method, Visitor)
Supplemental materials
A few GoF Design Patterns language-flavored adaptation books, with additional OOD topics:
Agile Software Development Principles, Patterns, and Practices
Original source
Agile Software Development, Principles, Patterns, and Practices: Pearson New International Edition 1st (first) Edition by Martin, Robert C. published by Pearson 2013, which is an updated version of "Agile Software Development, Principles, Patterns, and Practices First Edition, 2002"
Amazon book rating: 4.6 based on 110+ reviews
Published in: 2002, 2013
Key concepts
SOLID - SRP: The Single-Responsibility Principle, OCP: The Open-Closed Principle, LSP: The Liskov Substitution Principle, DIP: The Dependency-Inversion Principle, ISP: The Interface-Segregation Principle, GoF patterns reviewed
Supplemental materials
Clean Code
Original source
Amazon book rating: 4.7 based on 5800+ reviews
Google book rating: 95%
Recommended by LinkedIn
Published in: 2008
Key concepts
Meaningful naming in code
Supplemental materials
Specific language-oriented adaptations of Clean Code with an additional topics:
Refactoring
Original source
Amazon book rating: 4.7 based on 950+ reviews
Google book rating: 90%
Published in: 1999 1st edition / 2019 2nd edition
Key concepts
Refactoring definition, When and how to do a refactoring, Code smells list, Refactorings / Refactoring methods list
Supplemental materials
Refactoring related books:
Test Driven Development (TDD)
Original source
Amazon book rating: 4.3 based on 500+ reviews
Google book rating: 96%
Published in: 2002
Precaution: This book might be have mentions of outdated technologies and programming languages, which are not widely used nowadays. The main idea here is to catch the concepts. It’s recommended to go through the original book as fast as possible and then catch up with resources from the Supplemental materials section. The “Learning Test-Driven Development: A Polyglot Guide to Writing Uncluttered Code“ might be a good sibling book to be used together with the original.
Key concepts
Test Driven Development definition, Red-Green-Refactoring cycle, Test pyramid, Unit tests, Integration tests, End to end tests, Acceptance tests, Test doubles, Test reports
Supplemental materials
TDD Related and inspired books:
A few TDD language-flavored adaptation books:
Pragmatic Programmer / Clean Coder
Original source(s)
Published in: 1999 / 2019
Amazon book rating: 4.8 based on 2700+ reviews
Google book rating: 93%
Published in: 2011
Amazon book rating: 4.6 based on 2000+ reviews
Google book rating: 92%
Key concepts
Engineer Responsibility, Software ownership, Time management, Estimation, Team communication and collaboration skills, Mentoring, Coding standards, Law of Demeter, DRY, KISS, YAGNI, Non Functional constraints, Debugging, Design by contract, Metaprogramming, Orthogonality, Coupling, Requirements Pit, Ubiquitous automation, Testing, Tools
Supplemental materials
2 books mentioned in this secion are pretty self-contained, and equally complement to each-other
Conclusion
If you’d ask me - what is my favorite set of practices and patterns, from the list above - I’ll say “all of them”. Literally, they’re all covering different aspects of being a “better”, more productive, pragmatic industrial coder, so I can’t say that some are more important than others. If you’re looking for professional growth and want to stay in-line with de-facto industry standards, the compilation above might be a good start for the beginning.
The time allocated for this collection varies hugely depending on what your educational skills level and how quick you can consume and process information. My observation shows that it takes between 9 and 12 months for an average engineer to master all 6 topics, depending on motivation and spare time availability.
Please feel free to add your thoughts and recommendations on the article subject, in the comments below.
Open to new opportunities
1yMost of design patterns in GOF are useless, dead or antipatterns nowadays. IMHO the top 7 should contain enterprise/cloud design patterns.
Certified Scrum Master & Product Manager | Lean Six Sigma Black Belt | Agile Transformation Leader | 10+ Years of Experience
1yIt is a fantastic collection of books