amcneil36.github.io

In this post I am keeping track of all the books I have read and am documenting which of these books I feel are the best books to read for people who are working in software development. I started keeping track of these books in 2019 so I haven’t included any books that I read prior to then. Most of these books will be specific to software development. The remaining books will be on topics that are indirectly useful for software development like professionalism, presentation skills, social skills, etc. If I read any book that is not beneficial to software development, I will not include it on this list. Some of these books will only be relevant to software engineers and others will be relevant to all people on a software development team.

Completed Reading List

  1. Kerievsky, Joshua. Refactoring to Patterns. Addison-Wesley, 2004.
  2. Martin, Robert. Clean Code: A Handbook of Agile Software Craftsmanship. Prentice Hall, 2009.
  3. Fowler, Martin and Beck, Kent. Refactoring: Improving the Design of Existing Code. Addison-Wesley, 1999.
  4. Martin, Robert. Clean Architecture: A Craftsman’s Guide to Software Structure and Design. Prentice Hall, 2018.
  5. Mancuso, Sandro. The Software Craftsman: Professionalism, Pragmatism, Pride. Pearson Education, 2015.
  6. Beck, Kent. Test-Driven Development By Example. Addison-Wesley, 2003.
  7. Bloch, Joshua. Effective Java. Pearson Education, 2018.
  8. Myers, Glenford. The Art of Software Testing. Word Associations, 2012.
  9. Feathers, Michael. Working Effectively with Legacy Code. Pearson Education, 2005.
  10. Hunt, Andrew and Thomas, David. The Pragmatic Programmer, From Journeyman to Master. Addison-Wesley, 2000.
  11. McConnell, Steve. Code Complete: A Practical Handbook of Software Construction. 2004.
  12. Bain, Scott. Emergent Design, The Evolutionary Nature of Professional Software Development. Addison-Wesley, 2008.
  13. Sterling, Christ and Barton, Brent. Managing Software Debt. Addison-Wesley, 2011.
  14. Cohn, Mike. Succeeding With Agile: Software Development Using Scrum. Addison-Wesley, 2013.
  15. Cohn, Mike. User Stories Applied For Agile Software Development. Addison-Wesley, 2004.
  16. Beck, Kent. Extreme Programming Explained, Embrace Change. Addison-Wesley, 2012.
  17. Rubin, Kenneth. Essential Scrum: A Practical Guide To The Most Popular Agile Process. Addison-Wesley, 2013.
  18. Brechner, Eric. Agile Project Management with Kanban. Microsoft Press, 2015.
  19. Axelrod, Arnon. Complete Guide to Test Automation, Techniques, Practices, and Patterns for Building and Maintaining Effective Software Projects. Apress, 2018.
  20. Humble, Jez and Farley, David. Continuous Delivery: Reliable Software Releases Through Build, Test And Deployment Automation. Addison-Wesley, 2010.
  21. Fowler, Martin. Patterns of Enterprise Application Architecture. Addison-Wesley, 2003.
  22. Ingeno, Jospeh. Software Architect’s Handbook, Become a successful software architect by implementing effective architecture concepts. Packt, 2018.
  23. Duvall, Paul et al. Continuous Integration, Improving Software Quality and Reducing Risk. Pearson Education, 2007.
  24. Narayan, Sriram. Agile IT Organization Design: For Digital Transformation And Continuous Delivery. Addison-Wesley, 2015.
  25. Gregory, Janet and Crispin, Lisa. More Agile Testing. Addison-Wesley, 2014.
  26. Goldstein, Ilan. Scrum Shortcuts without Cutting Corners, Agile Tactics, Tools, & Tips. Addison-Wesley, 2014.
  27. Wiegers, Karl and Beatty, Joy. Software Requirements. Microsoft Press, 2013.
  28. Kim, Gene, et al. The DevOps Handbook: How to Create World-Class Agility, Reliability, and Security in Technology Organizations. IT Revolution, 2016.
  29. Forsgren, Nicole, et al. Accelerate, The Science of Lean Software and DevOps: Building and Scaling High Performing Technology Organizations. IT Revolution, 2018.
  30. Wolff, Eberhard. A Practical Guide to Continuous Delivery. Addison-Wesley, 2017.
  31. Pathania, Nikhil. Learning Continuous Integration with Jenkins: A Beginner’s Guide to Implementing Continuous Integration and Continuous Delivery Using Jenkins 2. Packt, 2016.
  32. Gruver, Gary, et al. A Practical Approach to Large-Scale Agile Development: How HP Transformed LaserJet FutureSmart Firmway. Addison-Wesley, 2015.
  33. Swartout, Paul. Continuous Delivery and DevOps – A Quickstart Guide, Start your journey to successful adoption of CD and DevOps. Packt, 2018.
  34. Crispin, Lisa and Gregory, Janet. Agile Testing, A Practical Guide for Testers and Agile Teams. Addison-Wesley, 2008.
  35. Markus Gärtner. ATDD by Example, A Practical Guide to Acceptance Test-Driven Development. Addison-Wesley, 2013.
  36. Shore, James and Warden, Shane. The Art of Agile Development. O’Reilly Media, 2008.
  37. Cohn, Mike. Agile Estimation and Planning. Pearson Education, 2006.
  38. Freeman, Steve. Growing Object-Oriented Software, Guided by Tests. Addison-Wesley, 2012.
  39. Boyde, Joshua. A Down-To-Earth Guide To SDLC Project Management, Getting your system/software development life cycle project successfully across the line using PMBOK adaptively. 2014.
  40. Pichler, Roman. Agile Product Management With Scrum. Addison-Wesley, 2010.
  41. Beck, Kent and Fowler, Martin. Planning Extreme Programming. Addison-Wesley, 2004.
  42. Lacey, Mitch. The Scrum Field Guide, Agile Advice for Your First Year and Beyond. Addison-Wesley, 2015.
  43. Appelo, Jurgen. Management 3.0: Leading Agile Developers, Developing Agile Leaders. Addison-Wesley, 2011.
  44. Craig Larman and Bas Vodde. Practices for Scaling Lean & Agile Development: Large, Multisite, and Offshore Product Development with Large-Scale Scrum. Addison-Wesley, 2012.
  45. Craig Larman and BasVodde. Scaling Lean & Agile Development: Thinking and Organizational Tools for Large-Scale Scrum. Addison-Wesley, 2008.
  46. Larman, Craig. Vodde, Bas. Large-Scale Scrum: More with LeSS. Addison-Wesley, 2014.
  47. Pearl, Mark. Code with the Wisdom of the Crowd: Get Better Together with Mob Programming. The Pragmatic Programmers, 2018.
  48. Reinertsen, Donald. The Principles of Product Development Flow: Second Generation Lean Product Development. Celeritas Publishing, 2009.
  49. Poppendieck, Mary and Poppendieck, Tom. Lean Software Development: An Agile Toolkit. Addison-Wesley, 2015.
  50. Poppendieck, Mary and Poppendieck, Tom. Implementing Lean Software Development, From Concept to Cash. Addison-Wesley, 2015.
  51. Mary and Tom Poppendieck. Leading Lean Software Development: Results Are Not The Point. Addison-Wesley, 2009.
  52. Williams, Laurie and Kessler, Robert. Pair Programming Illuminated. Addison-Wesley, 2002.
  53. Denning, Stephen. The Age of Agile. Amacom, 2018.
  54. Grosse, Alexander and Loftesness, David. Scaling Teams, Strategies for Building Successful Teams and Organizations. O’Reilly Media Inc., 2017.
  55. Leffingwell, Dean. Agile Software Requirements, Lean Requirements Practices for Teams, Programs, and the Enterprise. Addison-Wesley, 2011.
  56. Sonmez, John. The Complete Software Developer’s Career Guide. Simple Programmer, 2015.
  57. Catlin, Karen. Vijayashanker, Poornima. Present! A techies guide to public speaking. 2015.
  58. Sonmez, John. Soft Skills: The software developer’s life manual. Manning Publications, 2015.
  59. Highsmith, Jim. Agile Project Management, Creating Innovative Products. Addison-Wesley, 2004.
  60. Cote, Michael. Monolithic Transformation: Using DevOps, Agile, and Cloud Platforms to Execute a Digital Transformation Strategy. Pivotal Software, 2019.
  61. Crockford, Douglas. JavaScript: The Good Parts, Yahoo! Inc. 2008.
  62. Sefanov, Stoyan. JavaScript Patterns: build Better Applications with Codign and Design Patterns. Yahoo!, Inc. 2010.
  63. Wampler, Dean. Functional Programming for Java Developers. O’Reilly Media Inc., 2011.
  64. Haverbeke, Marijn. Eloquent JavaScript. No Starch Press, 2011.
  65. Herman, David. Effective JavaScript: 68 Specific Ways To Harness The Power Of JavaScript. Addison-Wesley, 2013.
  66. Nolasco, Fabio. Professional Front-End Architecdture: Helping Front-End Development Reach Its Full Potential. 2018.
  67. Davis, Jennifer and Daniels, Ryn. Effective DevOps: Building a Culture of Collaboration, Affinity, and Tooling at Scale. O’Reilly media, Inc. 2018.
  68. Lopp, Michael. Being Geek: The software Developer’s Career Handbook. O’Reilly, 2010.
  69. Klaus, Peggy. The Hard Truth About Soft Skills: Workplace Lessons Smart People Wish They’d Learned Sooner. 2010.
  70. Anderson, Jonathan et al. Effective UI: The Art of Building Great User Experience in Software. O’Reilly, 2010.
  71. Grant, Will. 101 UX Principles. Packt Publishing, 2018.
  72. Ou, Andrew. The Tao of Design and User Experience: The Best Experience is no Experience. 2017.
  73. Canziba, Elvis. Hands On UX Design For Developers: Design, Prototype, and Implement compelling user experiences from scrtch. Packt Publishing Ltd, 2018.
  74. Glass, Robert. Facts and Fallacies of Software Engineering. Addison-Wesley, 2002.
  75. Derby, Esther and Larsen, Diana. Agile Retrospectives: Making Good Teams Great. The Pragmatic Programmers, 2006.
  76. Ford, Neal. Functional Thinking. O’Reilly Media Inc, 2014.
  77. Wall, Richard. Agile Project Management: A Step by step guide to understanding the agile project management lifecycle for beginners. 2017.
  78. Gruver, Gary And Mouser, Tommy. Leading The Transformation: Applying Agile and DevOps Principles at Scale. IT Revolution, 2015.
  79. Adkins, Lyssa. Coaching Agile Teams. Addison-Wesley, 2010.
  80. Tyler, Josh. Building Great Software Engineering Teams. Apress, 2015.
  81. Lopp, Michael. Managing Humans: Biting and Humorous Tales of a Software Engineering Manager. Apress, 2016.
  82. Hesselberg, Jorgen. Unlocking Agility: An Insider’s Guide to Agile Enterprise Transformation. Addison-Wesley, 2019.
  83. Berg, Cory. Software ++: Must-Have Skills for Software Engineers. 2015.
  84. Unger, Russ and Chandler, Carolyn. A Project Guide to UX Design: For user experience designers in the field or in the making. New Riders, 2012.
  85. DeMarco, Tom and Lister, Tim. Peopleware: Productive Projects and Teams. Addison-Wesley, 2014.
  86. Brooks Jr., Frederick P. The Mythical Man-Month, Anniversary Edition: Essays On Software Engineering. Addison-Wesley, 2010.
  87. Richardson, Jared and Gwaitney, William A. Ship it!: A Practical Guide to Successful Software Projects. The Pragmatic Programmers, 2011.
  88. Brown, William H et al. Anti Patterns: Refactoring Software, Architectures, and Projects in Crisis. John Wiley & Sons. Inc, 1998.
  89. Rasmusson, Jonathan. The Agile Samurai: How Agile Masters Deliver Great Software. The Pragmatic Programmers, 2010.
  90. Newman, Sam. Building Microservices: Designing Fine-Grained Systems. O’Reilly Media, Inc., 2016.
  91. Carnegie, Dale. How To Win Friends and Influence People. 1936.
  92. Shalloway, Allan and Beaver, Guy. Lean-Agile Software Development: Achieving Enterprise Agility. Addison-Wesley, 2010.
  93. Cummings, Glenn. Emotional Intelligence: The Most Complete Blueprint to Develop And Boost Your EQ. Improve Your Social Skills, Emotional Agility and Discover Why it Can Matter More Than IQ. Carol Brown, 2019.
  94. Goleman, Brandon. Emotional Intelligence: For a Better Life, success at work, and happier relationships. Improve Your Social Skills, Emotional Agility and Discover Why it Can Matter More Than IQ. 2019.
  95. Coleman, Dan. Emotional Intelligence : Improve Your EQ For Business And Relationships. 2018.
  96. Coleman, Mark. Emotional Intelligence Practical Guide: How to Retrain Your Brain to Win Friends, Influence People, Improve your Social Skills, Achieve Happier Relationships, and Raise Your EQ . 2019.
  97. Ousterhout, John. A Philosophy of Software Design. Yaknyam Press, 2018.
  98. Fields, Jay. Working Effectively with Unit Tests. Lean Publishing, 2014.
  99. Tuhovsky, Ian. Communication Skills Training: A Practical Guide to Improving Your Social Intelligence, Presentation, Persuasion and Public Speaking. 2015.
  100. MacLeod, Chris. The Social Skills Guidebook: Manage Shyness, Improve Your Conversations, and Make Friends, Without Giving Up Who You Are. 2016.
  101. McConnell, Steve. Software Estimation: Demystifying the Black Art. Microsoft Press, 2006.
  102. Fournier, Camille. The Manager’s Path. A Guide for Tech Leaders Navigating Growth & Change. O’Reilly Media, 2017.
  103. Bentley, Jon. Programing Pearls. Addison-Wesley, 1986.
  104. Dorch, Patricia. Professionalism: New Rules for Workplace Career Success. 2012.
  105. White, Paul. The Vibrant Workplace: Overcoming the Obstacles to Building a Culture of Appreciation. Northfield Publishing, 2017.
  106. Perez, Patti. The Drama-free Workplace: How you can prevent unconscious bias, sexual harassment, ethics lapses, and inspire a healthy culture. 2019.
  107. Mcintyre, Marie G. Secrets To Winning At Office Politics: How to Achieve Your Goals and Increase Your Influence at Work. 2005.
  108. Kleppmann, Martin. Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, And Maintainable Systems. 2017.
  109. Slatkinn, Brett. Effective Python: 90 Specific Ways to Write Better Python. Addison-Wesley. 2020.

This list will be sorted from best to worst in terms of how much I recommend reading it. That being said, any book that makes this list is terrific. Many of the books that did not make this list were also very good but I wanted to keep this list small because throwing too many books at people might discourage them.

1. Fowler, Martin and Beck, Kent. Refactoring: Improving the Design of Existing Code. Addison-Wesley, 1999.

My favorite part about this book is that it talks about when to refactor code and when to leave it alone. I have worked on projects in the past where I later realized I made sub-optimal design decisions and was wondering when or if it would ever be appropriate to refactor the code I had written. This book is also very good at explaining different refactorings that can be done to improve the quality of the code. This book has helped my software development career more than any other book that I have read.

2. Martin, Robert. Clean Code: A Handbook of Agile Software Craftsmanship. Prentice Hall, 2009.

This book helped me write code that is easier to read. It communicated the importance of explaining yourself in code. It talks about how to document your code and where to document your code. It talks about setting up your code to follow the single responsibility principle. This book was written in a way that is easy for beginners to understand. I think all software engineers should read this book early in their career.

I have read a couple different books on scrum but this was the most complete one. This book goes really far in-depth on scrum. It talks about all of the recurring scrum meetings and what to do in the meetings. This book also talks about the various roles on the scrum team. You don’t have to read multiple books on scrum. You can get everything you need to know about scrum from this book. You do not have to be a software engineer to read this book. Anyone on a scrum team can benefit from reading this book.

4. Humble, Jez and Farley, David. Continuous Delivery: Reliable Software Releases Through Build, Test And Deployment Automation. Addison-Wesley, 2010.

Despite the title not mentioning continuous integration, this book is heavy on continuous integration (in addition to continuous delivery). This was the most in-depth and complete book on continuous integration and continuous delivery that I have read. This book is written in a way that is language and technology independent so anyone wanting to learn about ci/cd could read it. This book talks about various stages of the deployment pipeline and what goes into doing a release. It talks heavily about what all should happen when a ci-server builds your project. This book also talks a lot about recommended practices for all different types of automated tests. It also talks about recommended branching strategies for version control which is a very interesting subject that every team needs to decide how they want to handle.

5. Cohn, Mike. Agile Estimation and Planning. Pearson Education, 2006.

This is a book that anyone on a development team could read. I would not say that it has everything that you need to know about estimation and planning. I would recommend reading multiple books on estimation and planning. However, I consider this to be the best book on estimation and planning that I have read. This book talks about how to plan your sprints as well as how to plan your releases. It also talks about different ways to estimate, including a comparison of story points versus ideal days. Mike Cohn is one of the original contributors to the scrum framework and really knows his stuff.

6. Carnegie, Dale. How To Win Friends and Influence People. 1936.

This is one of those books that will indirectly help anyone who is working in software development. In fact, it will pretty much help anyone in any industry. It mentions ways to talk to people in such a way that will make it easier to become friends with people. I think that a lot of software engineers struggle with communication skills and I think this book makes a lot of great points that they could benefit from. Having effective communication skills can allow for a team to be significantly more productive.

7. Beck, Kent. Test-Driven Development By Example. Addison-Wesley, 2003.

Kent Beck is considered to be the founder of test driven development. So who better to read a book on TDD from than him? This book contains a lot of high quality information on how to use TDD. It includes writing test scenarios, choosing which scenarios to test first, and different strategies for making a test pass. The only downside of this book is that it is primarily just talking about using TDD for unit testing and does not cover Acceptance Test Driven Development (ATDD). That is OK though because there is a book on this list that covers ATDD.

8. Freeman, Steve. Growing Object-Oriented Software, Guided by Tests. Addison-Wesley, 2012.

This has some overlap with Kent Beck’s TDD book in that it also talks about TDD for unit tests. However, this book also talks about using TDD for acceptance tests (ATDD). It talks about combining TDD for unit tests and acceptance tests in something referred to as ‘double loop TDD.’ I felt that this book did a very good job explaining how to come up with acceptance test cases and strategies for making the acceptance tests pass.

9. Craig Larman and Bas Vodde. Practices for Scaling Lean & Agile Development: Large, Multisite, and Offshore Product Development with Large-Scale Scrum. Addison-Wesley, 2012.

This book talks about large scale software development which is something that there is not a lot of books on. It talks about effective ways to take large organizations that have many teams working on the same product and maximize the amount of value delivered. It talks about taking a large feature and breaking it down to smaller features and assigning features to feature teams. It also talks about cross-team dependencies and when to combine sprint retros/sprint reviews with other teams. It also talks about how many people of which role there need to be.

10. Catlin, Karen. Vijayashanker, Poornima. Present! A techies guide to public speaking. 2015.

This book would be good for anyone who wants to improve their public speaking skills. It talks about how to make a presentation and how to prepare for your presentation. Many people can become nervous prior to giving a presentation so this book also presents some ways to calm you down. My favorite aspect of this book is that they try to get you in the mindset of having your presentation being a conversation with your audience. You can present the information you have researched and then talk with people in the audience during the Q&A session about the topics you discussed. It creates for a great learning opportunity. Reading this book changed the way I viewed presentations. I now view presentations as a fun opportunity to talk with others about topics that interest me.

11. Bloch, Joshua. Effective Java. Pearson Education, 2018.

I generally try to leave technology or language specific books off my recommended reading lists because these types of books target a smaller audience. However, this book was written so well that I decided to put it on my list. I consider it to be the single best book to read for people wanting to learn Java best practices. The only downside to this book is that it is very difficult for beginners to read. When I first read this book, I had less than one year of experience and only understood half of the book. I went on to read the book again two years later and finally understood most of it.