We programmers think of complexity as our enemy, and we train ourselves to avoid it. When algorithms are too complex, we know we've sacrificed performance; when code is too complex, the code is brittle and fragile. But sometimes, complexity is unavoidable, especially in the re...
As programmers, we're familiar with complex logic and decisions: complex boolean expressions, long if/else cascades, and convoluted cases. But we quickly learn to avoid them as much as possible, finding ways to simplify. That's because even though computers can handle that com...
Software engineering as it’s taught in universities simply doesn’t work. It doesn’t produce software systems of high quality, and it doesn’t produce them for low cost. Sometimes, even when practiced rigorously, it doesn’t produce systems at all.
That’s odd, beca...
At first glance, Ruby seems like a natural fit for a “naked objects†system. Existing frameworks for naked objects—primarily Java-based—are high in ceremony, and tend to intrude into the domain object declarations. Ruby's open nature (and especially its easy reflection...
Software engineering as it's taught in universities simply doesn't work. It doesn't produce software systems of high quality, and it doesn't produce them for low cost. Sometimes, even when practiced rigorously, it doesn't produce systems at all.
That's odd, because in every...








