Not on the Shelves
Please see the 2024 edition of this page for my current list of unwritten books.
From the introduction to the first version:
I was watching Field of Dreams a couple of nights ago. When the ghostly voice whispered, “If you build it, they will come,” I thought, “That’s it! If I write reviews of the books I’d most like to read, maybe someone will write the books!”
As I was nursing my hangover the next morning I explained my plan to a friend. She took the icepack off her forehead long enough to explain sympathetic magic to me. According to her, there’s a tribe whose land is occasionally stricken by drought. When the rain fails, the elders plow the soil anyway in the hope that doing so will force the rain to come.
After reviewing dozens of computer-related books, I’d happily sacrifice a rooster to get someone to write something different. I’m constantly amazed by how few books there actually are: my local bookstore has eight shelves of Java books, but if you did a set-union on their contents, you’d be left with only two or three. What’s worse, a lot of things I really want to know wouldn’t be there at all.
These reviews are my attempt to point out the gaps in the computing literature, and indirectly, the gaps in most programmers’ education (including my own). Over the years, they have inspired Beautiful Code, Making Software, The Architecture of Open Source Applications, Research Software Engineering with Python, and the JavaScript and Python versions of Software Design by Example. If you know of other books that match these descriptions, please give me a shout; if you’d like to write one, please get in touch as well—I’d be happy to help if I can.
2024
- Sex and Drugs and Guns and Code
- Software Engineering: An Evidence-Based Approach
- Testing Research Software
- Security by Example
- Software Design as if Everyone Mattered
- Unbreaking Software
- Building Tech Together
- Managing Research Software Projects
- Organizing for Institutional Change in Research
- Computing and the Law: A Guide for the Perplexed
- The Middle and the End
- Now What? A Practitioner’s Guide to Error Handling
- Concurrent Design by Example
- Performance Tuning
- Difference Engines
- The Architecture of Open Source Applications
2019
- Still Magic: A Guide for Research Software Engineers
- Probably Approximately Correct: A Guide to Testing Numerical Software
- Software Engineering: An Evidence-Based Approach
- Software Tools in JavaScript
- Sex and Drugs and Guns and Code: What Everyone in Tech Needs to Know About Politics, Economics, and Power
- The Modern Developer: An Owner’s Manual
- Unbreaking Software
2017
- Sex and Drugs and Guns and Code: What Everyone in Tech Needs to Know About Politics, Economics, and Power
- The Undergraduate Operator’s Manual
- Software Tools in JavaScript
- Research Computing from A to B
- Managing Research Software Projects
- Software Engineering: An Evidence-Based Approach
- Computing and the Law: A Guide for the Perplexed
- Software Architecture by Example
- Now What? A Practitioner’s Guide to Error Handling
- A Practical Introduction to Debugging
- 300 Lines of Science
- Performance Tuning
2014
- Software Carpentry for Scientists and Engineers
- Big, Fast, Cheap, or Good: A Student’s Guide to Software Engineering
- A Practical Introduction to Debugging
- Software Tools for the World-Wide Web
- Computing and the Law: A Guide for the Perplexed
- Difference Engines
2009
- The Architecture of Open Source Applications
- The Design and Implementation of Virtual Machines
- Debuggers: Theory and Practice
- Software Carpentry for Scientists and Engineers
- Software Tools for the World-Wide Web
- Jonad in a Nutshell
- Computing and the Law: A Guide for the Perplexed
- Programming Small Devices
- Quality Assurance: A Modern Synthesis
- Extensible Programming Systems
- Difference Engines
- A Reference Architecture for Web 2.0
- Big, Fast, Cheap, or Good: A Student’s Guide to Software Project Management
- Exploring Computer Science with Python
2003
- Introduction to Software Development
- Introduction to Computer Architecture and Systems Programming
- Multi-Tier Architectures: Theory and Practice
- Design and Implementation of Virtual Machines
- Quality Assurance: Theory and Practice
- Modern Operating Systems
- Case Studies in User Interface Design
- Computing and the Law
- Software Development for Scientists and Engineers
1997
- Real-World C++
- Case Studies in User Interface Design
- Windows NT for Unix Programmers
- The Design and Implementation of Interpreted Languages
- A Second Course in Object-Oriented Programming: Design, Analysis, Data Structures, and Algorithms in Java
- Debuggers: Design and Implementation
- The Elements of Software Engineering Style
- How to Write Better Computer Games Faster
- Software Tools for Scientists and Engineers
- Large-Scale Visual Basic Software Design
- Software Tools for the World-Wide Web
- The Future of the Java Programming Language
- Object-Oriented Systems Programming
- Intellectual Property Made Simple
- Computational Layout: An Object-Oriented Approach
- From Key to Screen: How Computers Really Work
- The UML Workbook
- Software Tools: A Survey of Best Practice
- C++ As If C Never Happened