What I'm Reading
I Like to Read
Ask any of my colleagues, and they’ll confirm that I have an insatiable hunger for books. More specifically: I have an insatiable hunger for knowledge, and I personally find that books are the fastest way to absorb this knowledge. Simply put, I spend far more time with my face in a book, than I do on Facebook.
I’ve been on a marathon race towards Agile principles, so you’ll see a tendency towards books/titles supporting the Agile principles, but there are also some in here that are good for any developer looking to hone their tools.
Essentials – “Must Reads”
This list includes titles essential to anyone in the application development discipline. I own many copies of the books on this list, so that I know I have copies to share/loose. If they don’t make it back to me, then I know it’s doing someone else good too. Additionally, you want a copy of these within reach at all times, as you’ll find yourself going back to them time and again.
- Something Inspirational – For me, I prefer the Living Word of God. Find something to keep you grounded, and to remind you that there is a world outside of software development. Read a little of your “something inspirational” at least weekly, with a goal of daily.
- Pragmatic Programmer – By Andrew Hunt and David Thomas, an excellent book for juniors, leads or managers. Aptly subtitled, “from journeyman to master”, this book is most useful for people early to the software development discipline, but is a great reminder for those of us who have been on a death march or two. After your something inspirational, this is a good place to start.
- Code Complete – By Steve McConnell. The first part of the book covers much of the SDLC, from the fuzzy front-end and into construction/delivery. The second part of the book digs into practical examples of real improvements you can make to your code. Having the mindset presented by “Pragmatic Programmer”, this gives you more tools to make your code even more awesome! Be forewarned: this book is dense in quality information. You cannot read this once and have it mastered. Even though it is thick, it isn’t dry, so it’s more like eating at a gourmet buffet, and less like dining on sandpaper. I suggest reading this one cover-to-cover every couple, to few years.
- Rapid Development: Taming Wild Software Schedules – Not just for developers, but perhaps more so for leadership, this is another great book by Steve McConnell. Like "Code Complete", this book is thick (and not dry), and hard to get through in one dedicated stretch of reading. This is a down-to-earth real book on how to get your shop (or yourself) working more smoothly, and producing software more consistently, and predictably. This isn't a silver bullet - like Agile or XP, etc., but instead a practical book. Steve spends the first chunk of the book explaining that you first have to achieve efficient development, before you can even think about achieving rapid development. The list of common mistakes presented in this book frequents my desk.
- Head First – Design Patterns – A modern take on the GOF’s design patterns book, this presents the patterns in a logical order, and in such a way that the patterns make sense, and are easy to remember. This is an excellent resource for handy design patterns when you’re in a pinch. To the point of Robert Martin in his book “Agile Software Development”, zealous implementation of principles and patterns leads to “Needless Complexity” in your software design; this is true regardless of whether you’re leveraging Agile, or not. Warning: the examples in this book are written in Java. I myself am fluent in C# and Java, and comfortable in C/C++ (and many, many others), so this isn’t a problem for me, but may take some getting used to for novice developers.
- How to Win Friends and Influence People – By Dale Carnegie. This book does a wonderful job of explaining human mentality for the purpose of better communication. If you find yourself having trouble with people hearing what you mean to say, this book can really help you get your point across. I have a sneaking suspicion that communication, and other soft skills, are among the less naturally occurring skills of developers in the wild.
- If you’re looking to understand/implement continuous integration, then the “Continuous Integration: Improving Software Quality and Reducing Risk” in the next section, is most definitely a “must read” as well.
Self-Help and Leadership
Books for general personal development and leadership.
- Resonant Leadership - By Richard Boyatzis and Annie McKee. Boyatzis and McKee do a great job of defining the various quadrants of EQ (Emotional Intelligence), putting it in the perspective of making your resonance, contagious. The first chapter was a bit slow, but it really picks up the pace in chapter 2.
- Smarter Faster Better - By Charles Duhigg. I've not read this one yet, but it is next! I've received a very positive review of this book recently by one of my colleagues.
- The Power of Habit - By Charles Duhigg. Another one on my reading list. I picked this up because working with ADD, the only way I function is through habits, and I want to become more deliberate in forming habits.
Continuous Integration
Independent of Agile, continuous integration is a useful tool that even waterfall shops can implement.
- Continuous Integration: Improving Software Quality and Reducing Risk – By Paul Duvall. This book is technology agnostic and is an excellent road map to implementing continuous integration in your shop. This is absolutely a must-read if you’re looking to implement continuous integration for you, and your peers; read this first.
- Inside the Microsoft Build Engine: Using MSBuild and Team Foundation Build – By Sayed Ibrahim Hashimi. The first part of this book is an excellent resource, especially paired with the concepts and practices introduced by Paul Duvall in the first book in this list. The first few chapters were painfully inflated and repetitive, but the content started to speed up to a better pace a few chapters in. Overall, I came away from this book with an extremely firm grasp on MSBuild and most importantly, on building highly robust and extensible integration scripts for our CI solution. I only read through the first portion of this book, as our shop doesn’t leverage Team Foundation Build.
Agile
- Agile Software Development – Principles, Patterns, and Practices – By Robert Martin. In my opinion, the foundational book on Agile software development – the others are just trying to live up to this one’s standard. If you’re new to Agile, do yourself the favor of starting with this, before confusing yourself with anything else. There’s a lot of hype (and hatred) floating around about Agile. This book, I think, keeps it down-to-earth. Practical. Pragmatic. Be warned: I think this is a college textbook. At the very least, it reads like a college textbook (intriguingly so, without being dry). I suggest setting a pace of one chapter a day, with notes and review of yesterday’s notes to really absorb the concepts here well.
- The official Scrum Guide – Once you’ve got a good handle on the foundational Agile principles, head over to the official Scrum website to go through the official Scrum Guide. It’s a fairly short read, but like all great things, it is easy to learn, and hard to master.
Others
Project management, technology specifics, etc.
- Building Microservices - By Sam Newman - An excellent technology agnostic, high level view into building Microservices. This book does a great job of first defining the architecture of Microservices, then into some of the details around implementing them. Being technology agnostic - this isn't a step by step how-to guide, but is most definitely the first book you should read when considering Microservices for your organization. I was pleasantly surprised by other nuggets of knowledge in here around Software Architecture, and business planning in general. While not directly related to Microservices, these concepts are appropriately delivered with this book.
- Java Concurrency in Practice – By Brian Goetz. I think it’s unfortunate that the book’s title, and examples, are tied specifically to Java, because the book does a phenomenal job of explaining the concepts, problems, and solutions around concurrent programming. If you work in any kind of objective (high level) language, I suggest you read this book, as the universal concepts surrounding concurrency, are equally applied to all languages, not just Java.
- Assessment and Control of Software Risks – By Capers Jones. I’ve not started reading this one yet – but I’m eager to. Personal experience, illuminated by McConnell’s advice in “Rapid Development”, has me convinced that risk management is a critical, even necessary part of achieving efficient development. This is one of the books suggested by Steve McConnell, which is why it is sitting on my desk, just waiting to be read.
- Pro ASP.NET MVC5 Platform – By Adam Freeman. I think all ASP.NET MVC developers need to know about the core ASP.NET platform, from the perspective of how it supports ASP.NET MVC5. This book is an excellent resource for developers new to the ASP.NET scene (yes, the technology has finally matured to where this is a possibility, even a common occurrence!). This is also an awesome reference for people who worked with ASP.NET back when the pages ended with “.aspx”. The tools that Adam equips you with here, can take your MVC application from average, to well above. I personally appreciate Freeman’s voice and cadence in his books, taking an almost pragmatic approach like Hunt and Thomas. I wouldn’t hesitate to pick up anything with his name on it.
- Pro ASP.NET MVC5 – By Adam Freeman. The pair to “Pro ASP.NET MVC5 Platform”, this book covers ASP.NET MVC5 itself, without diving into the ASP.NET platform like the other on this list. As I mentioned above, Adam’s voice and cadence works well for me.
- Pro SQL Server 2012 BI Solutions – By Randal Root and Caryn Mason. A good resource for people wanting to jump into the BI scene. This book feels more like a big tutorial than an educational piece, but does a good job of laying out the concepts in such a way, that the tutorials are revealing none-the-less. Note: Ignore the incorrect picture on the item in Amazon. I ordered the book, and it is, in fact, the 2012 edition.
- Professional Microsoft IIS 8 – By Kenneth Schaefer, and others. If you’re working in Microsoft ASP.NET, you’ve got to know about the infrastructure you’re coding on. If you’re new to the Microsoft stack (or haven’t yet become proficient with IIS), or are an experienced veteran, this book is good as both an introductory course, and as a reference item.
- The Mythical Man-Month – By Frederick Brooks, Jr. A classic. Really, really dry. I’ve still not finished reading through it because it is hard to get through. Regardless, this book provides unparalleled insight into how the more traditional software development practices came to be. It is in this book that Brooks coins the concept of a surgical team, which has been used heavily in the industry. Many of the practices in this book are outdated by the incoming Agile, but the book still covers some foundational truths about software development, that even Agile cannot solve. If not for anything else, just read this book so that you can say you have.
- The Art of War – By Sunzi. War, war never changes.
From my personal blog, buildingdevs.wordpress.com.