2023 was the year I had my second shoulder surgery (torn rotator cuff). This prevented me from doing a lot of things this year, including reading books. I didn’t get a good night’s sleep for about 6 months after the surgery. I found it hard to concentrate on reading in the evenings (when I normally read) because I was too damn tired.

Here is the list of the books I did manage to read and a brief mention of the effect they had on me.

The Scientific Method: A Guide to Finding Useful Knowledge, J. Scott Armstrong, Kesten C. Green 2022
In the beginning of 2023 I wanted to explore the scientific method more. The motivation was to show how the work of a software engineer is driven by the same factors as the scientific method. What this book opened my eyes to was how much of what I thought I knew about the scientific method was incomplete. The main takeaway for me from the book was how challenging it is to embrace the scientific method when developing software. But to move towards a true software engineering approach, the scientific method plays a crucial role. So I have a lot of work to do!

Eureka! Discovering Your Inner Scientist, Chad Orzel 2014
I picked up this book to help me better understand my own journey to be a better practitioner of the scientific method. I admit, I didn’t finish this book. It was long on stories about science and how people can use the scientific method in every day life. But it was short on ideas I could apply to my software development work.

Working Effectively with Legacy Code, Feathers, Michael C. 2005
This book had long been on my reading list but for whatever reason I hand’t purchased a copy and read it. I was glad to have finally the chance to do so this year. The primary focus of the book is to present techniques to safely change ‘legacy’ code– code that does not have covering unit tests. I feel I have encountered many of the situations the author describes. I would have benefited from the book’s guidance if I had read it sooner in my career. But the lessons I learned in dealing with changes to legacy code have been fantastic and have made me a better programmer. While I am glad that I got to read it, and I’d recommend it to anyone struggling with these types of scenarios, I don’t regret not reading it sooner.

Five Lines of Code, Christian Clausen 2021
I watched a YouTube video with the author of this book and it made me want to delve into the ideas deeper. The title of the book is a rule presented in the book that states that no function should be longer than 5 lines. The book take a fresh look at how to refactor your code. The author presents a series of rules to help you make better design decisions, and then demonstrates how to refactor code towards those ideals. There are coding examples explaining each of the refactoring steps. I followed along, making all the refactoring changes myself, to get a sense of how the refactoring steps felt. Overall I liked the book. The rules made sense, as did the refactoring steps, many of which didn’t require supporting unit tests, as the compiler would let you know if something went wrong.

Functional Programming in C#, Second Edition, Enrico Bueonanno. 2022
I read the first edition of this book a couple of years ago and enjoyed it very much. This newer edition is much better, mostly because the C# language has much better support for functional ideas. Functional programming is a paradigm I am constantly trying to adopt and use in my day-to-day programming. Even if I write a lot of object-oriented code, the ideas of immutability, avoiding exceptions and null values serve me well. I suspect this isn’t the last time I read this book.

Modern Software Engineering, Dave Farley 2022
One of several books I re-read this year. This is a fantastic book. It really helps frame the work I do and the best practices for being a software engineer. This second time through, I could see where I had started to incorporate several of Farley’s ideas in my day-to-day work. However, I still don’t feel like I can call myself a software engineer. I still don’t follow enough of the practices, but I am improving. One day.

Unit Testing: Principles, Practices, and Patterns, Vladimir Khorikov 2019
I was working on a project this year where the unit tests were not as good as I would have liked. I felt that they were not focused as much on ‘observed behavior’ as they were on ‘implementation details’. I picked up this book to help re-familiarize myself with some of the principles and motivations. But after a hour of reading I ended up jumping around to a bunch of other aspects of unit testing the book discusses. And before I knew it, I was re-reading the entire book. I can’t recommend this book enough.

Grow Your Soil!, Diane Miessler 2020
A bit of a departure from my usual reading topics, I re-read this book to better appreciate managing the soil in my garden. My gardening hobby is struggling these days and I need to re-evaluate my approach. It was equal parts inspiration and instruction. Can’t wait to get back at it this coming spring!

Adaptive Code, Second Edition, Gary McLean Hall 2017 I’ve been reading this book on and off for a few years now. It is a great reference to pick up when it is needed. A bit dry to read cover to cover.

C# Class Design Handbook, Conway, Duynstee, Hyrman, Rowland, and Speer 2003
I haven’t looked at this book in a long time. But I wanted to re-discover some of the core principles of C# from its beginnings. So much of the language seems to be different these days, I wanted to make sure I really understood the .NET runtime, the data types, and the ‘soundness’ of the language. Always good to make sure you know what you are talking about!

The Books I Read in 2022