I recently finished the book “The missing README“. This is a fantastic book for those who want to understand how to be an effective software engineer outside of the code writing itself. It covers such topics as how to work with legacy code, doing code reviews and how to think about how to build software that is able to evolve.
As an introductory book, it covers many topics at a relatively high level. And recommends a range of books to dig deeper into the topics covered in each chapter. To keep
Chapter 2 – Getting to conscious competence
- Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman
- All You Have to Do Is Ask: How to Master the Most Important Skill for Success
- Extreme Programming Explained: Embrace Change
Chapter 3 – Working with code
- Working Effectively with Legacy Code
- The Legacy Code Programmer’s Toolbox
- The Mythical Man-Month: Essays on Software Engineering
Chapter 4 – Writing operable code
- Code Complete: A Practical Handbook of Software Construction (Chapter 8)
- Clean Code: A Handbook of Agile Software Craftsmanship (Chapters 7 & 8)
- Building Secure and Reliable Systems: Best Practices for Designing, Implementing, and Maintaining Systems
- Site Reliability Engineering: How Google Runs Production Systems
Chapter 6 – Testing
- Unit Testing: Principles, Practices, and Patterns
- Test-Driven Development: By Example
- The Pragmatic Programmer: From Journeyman to Master
- Explore It!: Reduce Risk and Increase Confidence with Exploratory Testing
Chapter 8 – Delivering Software
- Git for Teams: A User-Centered Approach to Creating Efficient Workflows in Git
- Continuous delivery
- Site Reliability Engineering: How Google Runs Production Systems
- Release It!: Design and Deploy Production-Ready Software
Chapter 9 – Going on call
Chapter 10 – Technical Design Process
- The Elements of Style
- On Writing Well: The Classic Guide to Writing Nonfiction
- Managers Schedule essay
Chapter 11 – Creating Evolvable Architectures
- A Philosophy of Software Design
- Building Evolutionary Architectures: Support Constant Change
- Implementing Domain-Driven Design
- A Philosophy of Software Design
- Elements of Clojure
- Data Mesh: Delivering Data-Driven Value at Scale
- Designing Data-Intensive Applications