As a consultant, I've joined a lot of projects, usually not right when the team is forming. Over the years, I've developed a few heuristics that tell me a lot about the psychological health of the team. Who lunches together? When someone says "whole team meeting," who is invited? Listen for the "us and them" language. How inclusive is the "us" and who is relegated to "them?" These simple observations speak volumes about the perception of the development team.
Continue Reading »-
"Us" and "Them" -
Inviting Domestic Disaster We had a minor domestic disaster this morning. It's not unusual. With four children, there's always some kind of crisis. Today, I followed a trail of water along the floor to my youngest daughter. She was shaking her "sippy cup" upside down, depositing a full cup of water on the carpet... and on my new digital grand piano. Since the entire purpose of the "sippy cup" is to contain the water, not to spread it around this house, this was perplexing.
Continue Reading » -
Book Completed I'm thrilled to report that my book is now out of my hands and into the hands of copy editors and layout artists. It's been a long trip. At the beginning, I had no idea just how much work was needed to write an entire book. I started this project 18 months ago, with a sample chapter, a table of contents, and a proposal. That was a few hundred pages, three titles, and a thousand hours ago.
Continue Reading » -
Reflexivity and Introspection A fascinating niche of programming languages consists of those languages which are constructed in themselves. For instance, Squeak is a Smalltalk whose interpreter is written in Squeak. Likewise, the best language for writing a LISP interpreter turns out to be LISP itself. (That one is more like nesting than bootstrapping, but it's closely related.) I think Ruby has enough introspection to be built the same way. Recently, a friend clued me in to PyPy, a Python interpreter written in Python.
Continue Reading » -
Education as mental immune system Education and intelligence act like a memetic immune system. For instance, anyone with knowledge of chemistry understands that "binary liquid explosives" are a movie plot, not a security threat. On the other hand, lacking education, TSA officials told a woman in front of me to throw away her Dairy Queen ice cream cones before she could board the plane. Ice cream. How in the hell is anyone supposed to blow up a plane with ice cream?
Continue Reading » -
Expressiveness, revisited I previously mused about the expressiveness of Ruby compared to Java. Dion Stewart pointed me toward F-Script, an interpreted, Smalltalk-like scripting language for Mac OS X and Cocoa. In F-Script, invoking a method on every object in an array is built-in syntax. Assuming that updates is an array containing objects that understand the preProcess and postProcess messages. updates preProcess updates postProcess That's it. Iterating over the elements of the collection is automatic.
Continue Reading » -
Inviting Disaster I'm reading a fabulous book called "Inviting Disaster", by James R. Chiles. He discusses hundreds of engineering and mechanical disasters. Most of them caused serious loss of life. There are several common themes: 1. Enormously complex systems that react in sometimes unpredictable ways 2. Inadequate testing, training, or preparedness for failures -- particularly for multiple concurrent failures 3. A chain of events leading to the "system fracture".
Continue Reading » -
New Interview Question So many frameworks... so much alphabet soup on the resumes. Anyone that ever reads The Server Side or Monster.com knows exactly which boxes to hit when they're writing a resume. The recruiters telegraph their needs a mile away. (Usually because they couldn't care less about the differences or similarities between Struts, JSF, WebWork, etc.) As long as the candidate knows how to spell Spring and Hibernate, they'll get submitted to the "preferred vendor" system.
Continue Reading » -
JAI 1.1.3 in beta I've been using JAI 1.1.2 for the past year. It's an incredibly powerful tool, though I will confess that the API is more than a bit quirky. Early this year, Sun made JAI an open-source project available at java.net. That project has been working on the 1.1.3 release for most of the year. It's now in beta, with a few enhancements and a lot of bug fixes. The most significant enhancement is that JAI can now be used with Java WebStart.
Continue Reading » -
Ruby expressiveness and repeating yourself Just this week, I was reminded again of how Java forces you to repeat yourself. I had an object that contains a sequence of "things to be processed". The sequence has to be traversed twice, once before an extended process runs and once afterwards. The usual Java idiom looks like this: public void preProcess(ActionContext context) { for (Iterator iter = updates.iterator(); iter.hasNext(); ) { TwoPhaseUpdate update = (TwoPhaseUpdate) iter.
Continue Reading »