Typical programming books I read include words like "scalability", "containers", "serverless" etc. However, recently I've completed one that had none of them and still it was a highly valuable read for me.
The book I'm talking about is "Mazes for programmers" by Jamis Buck and, as the title suggests, it's about random maze generation. I've ran into this title totally randomly - while browsing followers of my ruby gem on GitHub. I've noticed that one of the followers had a repository called Mazes for Programmers that included the maze generation code and a link to the book. It drew my attention, because I recalled the times when playing games with randomly generated maps (especially Diablo II ❤️) attracted me to start programming. Being hit by nostalgia and curiosity, I decided to buy the book (paperback naturally) and learn how to create such beauties.
BTW: If you're interested in how Diablo II's mazes were built have a look at this article.
Actually whole Diablo wiki is great, have a look at the whole wiki ;D
Jamis Buck grouped the chapters into 4 parts with progressively growing concept difficulty level:
In the first part he introduced basic maze generation (binary tree, recursive backtracker, hunt-and-kill algorithms) and solving (Dijkstra's algorithm) techniques and provided an implementation of a basic grid system. It's worth mentioning that the code snippets in the book are written in Ruby language which was perfect for a Rubyist like me :)
The second part shows how to "free" yourself from a rectangular grid cage. It explains how to build mazes in radial, hexagonal and triangular shapes. It required me to refresh some of high school maths, but the effects are really cool!
In this chapter Jamis teaches six more maze-generation algorithms. If you've studied Computer Science you may be familiar with some of the names in this chapter as it explains how to use Kruskal's, Prim's and recursive division algorithms.
I feel like this book would already be complete without chapter four, but the author decided to go a level higher and introduced mind-bending concepts like 3D and 4D mazes, labyrinths on Möbius strip surface and rendering a maze on a sphere. Crazy 😅
Even though "Mazes for Programmers" didn't help me a lot with my day-to-day work I can surely say that it had a great value to me as a programmer.
Above all it simply brought back fun into programming, because I learned and create things not because I had to, but because I could. And I suppose that the reason why most of us started programming was curiosity and the great feeling of making computers do whatever stuff we imagine.
It's definitely a read for people who already are burnt out or starting to feel like burning out in their job.
Another nice takeaway from the book is that I could refresh some of the computer science basics (graph algorithms, geometry) that I haven't touched for a few years already. Some of the concepts were completely new to me, but Buck has an ability to explain even more difficult topics in a very clear way, skipping most of the information nonessential for understanding. Maybe if my university teachers had such ability too I wouldn't be doing web development now (NASA, here I come 🚀).
Now the last but not least - I think it's worth exploring even such exotic topics like random maze generation, because doing it may open a whole new world of ideas and problems to solve. And by solving problems you're becoming a better developer, no matter if you're a web/game/space shuttle developer.
In my case the book motivated me to create a simple game in which players (red & blue dots) have to get through a labyrinth to reach a treasure (the golden dot). I decided to write it in Ruby, so I picked the ruby2d library. I don't think I'd ever decide to learn how to program graphics in Ruby if not for the book. Thanks Jamis!
It's a-maze game! You can find the full code on GitHub.
It turns out that the author wrote another book - this time about ray tracers. Normally I'd be scared by the amount and complexity of maths, but I blindly bought it, because I'm sure the concepts are going to be explained clearly. When I finish the challenge I'll surely share the results with you :)