Skip to main content

Developer Reading List

Below is my top books that have influenced me as a software developer.

The Pragmatic Programmer: From Journeyman to Master, Andrew Hunt, David Thomas

Clean Code: A Handbook of Agile Software Craftsmanship, Robert C. Martin

Code Complete: A Practical Handbook of Software Construction, Steve McConnell

Test Driven Development: By Example, Kent Beck

Extreme Programming Explained: Embrace Change, Kent Beck

Working Effectively With Legacy Code, Michael C. Feathers

Refactoring: Improving the Design of Existing Code, Martin Fowler, Kent Beck, John Brant, William Opdyke, Don Roberts

The Practice of Programming, Brian W. Kernighan, Rob Pike

Peopleware: Productive Projects and Teams, Tom DeMarco, Tim Lister

The Mythical Man Month: Essays on Software Engineering, Frederick P. Brooks Jr.

Java Application Architecture: Modularity Patterns With Examples Using OSGi, Kirk Knoernschild

Design Patterns: Elements of Reusable Object-Oriented Software, Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides

Patterns of Enterprise Application Architecture, Martin Fowler

Refactoring to Patterns, Joshua Kerievsky

Domain Driven Design: Tackling Complexity at the Heart of Software, Eric Evans

The Art of Unit Testing: With Examples in .NET, Roy Osherove


  1. Any reason you linked the 1st edition of Code Complete?

  2. I started reading Peopleware recently and have found it extremely aggravating so far. They make a lot of claims (some innocuous, some outrageous) with no evidence to back them up. They unsupported outrageous claims make it hard for me to put any credence in their milder claims.

  3. I linked to the first edition of Code Complete because that's the version I have on my bookshelf. The second version is a good read as well.

    I liked Peopleware, probably because I'm much less a stickler for evidence.

  4. It was not until around 1600 that we finally, as a result of experimentation, had a useful characterization of gravity. Up to that point it was obvious to everyone that heavy objects must fall faster than lighter objects, there was no need to check.

    I don't think I'm a stickler, but evidence is certainly worth looking for.

    1. Stickler was a poor choice of words Adam.

      I don't look for evidence in these technical books. I look for ideas that I can apply.

      I'd enjoy a technical book that was largely a work of fiction and made false claims if there is something in it I can apply.

    2. Given so many competing ideas, it is nice when there is a rational way to chose between them.


Post a Comment

Popular posts from this blog

Basic Web Performance Testing With JMeter and Gatling

Introduction In this post I'll give a quick way to get some basic web performance metrics using both JMeter and Gatling . JMeter is a well known, open source, Java based tool for performance testing. It has a lot of features, and can be a little confusing at first. Scripts (aka Test Plans), are XML documents, edited using the JMeter GUI.  There are lots of options, supports a wide variety of protocols, and produces some OK looking graphs and reports. Gatling is a lesser known tool, but I really like it. It's a Scala based tool, with scripts written in a nice DSL. While the scripts require some basic Scala, they are fairly easy to understand and modify. The output is a nice looking, interactive, HTML page. Metrics   Below are the basic metrics gathered by both JMeter and Gatling . If you are just starting performance testing, these might be a good starting point . Response Time – Difference between time when request was sent and time when response has been fully rec

Generating Java Mixed Mode Flame Graphs

Overview I've seen Brendan Gregg's talk on generating mixed-mode flame graphs  and I wanted to reproduce those flamegraphs for myself. Setting up the tools is a little bit of work, so I wanted to capture those steps. Check out the Java in Flames post on the Netflix blog for more information. I've created github repo ( )  that contains the scripts used to get this going, including a Vagrantfile, and JMeter Test Plan. Here's a flame graph I generated while applying load (via JMeter) to the basic arithmetic Tomcat sample application. All the green stacks are Java code, red stacks are kernel code, and yellow stacks are C++ code. The big green pile on the right is all the Tomcat Java code that's being run. Tools Here's the technologies I used (I'm writing this on a Mac). VirtualBox 5.1.12 Vagrant 1.9.1 bento/ubuntu-16.04 (kernel 4.4.0-38) Tomcat 7.0.68 JMeter 3.1 OpenJDK 8 1.8.111 linux-tools-4.4.0-38 linux-to

Multi Threaded NUnit Tests

Recently I needed to reproduce an Entity Framework deadlock issue. The test needed to run in NUnit, and involved firing off two separate threads. The trouble is that in NUnit, exceptions in threads terminate the parent thread without failing the test. For example, here's a test that starts two threads: the first thread simply logs to the console, while the other thread turfs an exception. What I expected was that this test should fail. However, the test actually passes. readonly ThreadStart[] delegates = { () => { Console.WriteLine("Nothing to see here"); }, () => { throw new InvalidOperationException("Blow up"); } }; [Test] public void SimpleMultiThreading() { var threads = delegates.Select(d => new Thread(d)).ToList(); foreach (var t in threads) { t.Start(); } foreach (var t in threads) { t.Join(); } } Peter Provost posted an article that describes how to make this test fail. It