Book Report: Software Design by Example by Greg Wilson

There’s a lot of books on programming but fewer books that couple software development with effective and practical use of tools, presenting a language not as a main course but as a part of an engineering ecosystem. Greg Wilson’s book hits all the right notes in bringing together theory, pragmatism, and best practices.

I am not a JavaScript developer. I used to write JavaScript. Years ago, when the internet was young, and the language was bad and we were all bad at it. It’s been decades since I’ve put it into meaningful practice, and honestly, I’m a mediocre software developer, anyways. I’m a very good data scientist, but when I look at my coding skills and compare them to my peers at my workplace, I know I’m out of my league.

So when my friend, Greg Wilson, asked me if I’d be interested in reviewing his book, Software Design by Example: A Tool-Based Introduction with JavaScript, I said, “sure, but I’m afraid I don’t know what I’m doing. I’m not a JavaScript dev.” He told me that’s perfect. Greg is an educator. His goal isn’t to tell people what they already know, but to give useful advice that people can use in their careers and every day lives. If I could get something out of this book then he’ll have done his job.

I received my copy in the mail and immediately dove in. One of the first things I noticed was how pragmatic the structure of the text is. The book doesn’t march you through the theory of JavaScript, but begins with practical topics you are likely to encounter if you start programming in Node. To wit: the first three chapters after the introduction are “Systems Programming,” “Asynchronous Programming,” and “Unit Testing.” Not only are these three of the most fundamental topics to understand as a developer today, they’re also the first topics an experienced programmer would want to learn when coming from another language ecosystem. I play around with F# every few months. I’ve had to wrestle with understanding its asynchronous programming model because so many F# resources focus on the theory of the language (which is super important) rather than giving me the tools to translate what I know from my Java/Python world more directly.

In fact, every chapter in the book is perfectly tuned to modern software development. Chapters on package management, the debugger, and documentation generation are references I will probably come back to time and again. Each chapter is concise and filled with working, practical code and clear diagrams. Greg doesn’t waste time on lengthy exposition, he rather prefers to provide simple but thorough examples. This makes his exercises in things like abstract syntax trees easily understood. All one has to do is work with the basic code examples to see the theory in practice.

What I liked best about the book is how it removes the noise from the JavaScript ecosystem and lets the reader focus on the software engineering practices. This isn’t a book about JavaScript; it’s a book about software development built on JavaScript as a foundation. One could easily imagine the same book in python or Ruby or C#. By focusing on how software is built first, and then letting those concepts work through the language, the reader is left with a much stronger foundation for building real applications than one would get from focusing on the language primitives. The book probably isn’t a replacement for understanding those primitives, however. It’s a book that helps you shift from toy problems into the real world of software engineering. At the same time, the book also isn’t a patterns guide, either. It’s not meant as a replacement for software architecture at the higher levels. As a software consultant, I think it hits the spot where many people fail. A lot of people go from language primitives to architecture patterns and ignore the practical considerations of how to build applications. Nowhere are these pains felt more than in the enterprise Java space. Thankfully, this isn’t a book for that.

I’m actually thrilled I got the chance to review this book for a language I haven’t seriously used in many years. I’ve been in the software space for 25 years, and this is the kind of book I’ll definitely take off the shelf to look at whenever I need a refresher on how to do something the right way. I love that this helps my maintain a broader set of skills. It’ll live within arms reach of my desk, for sure.

Software Design by Example: A Tool-Based Introduction with JavaScript
Greg Wilson
CRC Press
ISBN 978-1032330235

Posted: 30.05.2023

Built: 03.10.2023

Updated: 30.05.2023

Hash: 7e88709

Words: 772

Estimated Reading Time: 4 minutes