International Nodebots Day 2015 is July 25. I’m helping with an event in Ann Arbor and we needed over 40 robot kits for people to play with. What better time to learn how to use a new CAD package? OpenSCAD is a great introduction to CAD for programmers that’s fun to use and easy to […]
Spin had a great blog post a few days ago on Mean Shift Clustering. It’s a powerful algorithm with a ton of applications, but an Achille’s heel: The most glaring disadvantage is its slowness. …it can take a long time to execute. The one silver lining is that, while it is slow, it is also […]
I spend more time working with text than anything else. The multi-monitor, high-resolution graphics revolution hasn’t brought me graphics, just dozens of windows full of text. If you’re a software developer, chances are you are swimming in text too. Source code, documentation, configuration files, templates, logs–they are all searchable text. For special purpose tasks, like […]
As the minimum viable product idea becomes mainstream, I’m starting to hear “MVP” used to justify any minimal effort. It’s great that people want to benefit from being lean and agile, but it’s also absolutely vital that an MVP answers your important questions. There are many kinds of MVPs and most of them are anything […]
25 years ago, Richard Gabriel introduced the idea of two competing styles of design: worse-is-better vs right-thing. Here’s how he described the core philosophy of one. Can you tell which one it is?
In part 1 of this post I claimed it’s easy to test-drive our way into a poor design. We looked at some techniques for using types with TDD, but the examples were simple. Today I’ll walk through Kent Beck’s Money example showing where the design fails and how it can be improved with types.
I learned test-driven development from Kent Beck’s book Test-Driven Development By Example. It’s an excellent introduction that whets the appetite for one of my other favorites, Growing Object-Oriented Software, Guided by Tests by Steve Freeman and Nat Pryce. Both of these books have a blind spot, though: they are completely silent about how modern static […]
Most developers take automatic garbage collection for granted. It’s just another amazing feature provided by our language run-times to make our jobs easier. But if you try to peek inside a modern garbage collector, it’s very difficult to see how they actually work. There are thousands of implementation details that will confuse you unless you […]
Atomic Object has a great tradition of making and customizing tools. It’s a habit I’ve gained and lost several times over my career — keeping tools sharp requires time and effort. Fortunately, one of the best things about becoming an Atom is that all of my colleagues care deeply about software, so it’s easy to […]
You’ve just joined an interesting new project. Congratulations! Except that everything looks different and nothing works the way you expect. Stay calm and remember that technology doesn’t change as fast as conventional wisdom dictates. Coming up to speed on a new project or technology is a critical skill for any creative professional, but especially for […]