Morga’s Law of Computing Machinery And Intelligence
If it can’t make me a sandwich, then it isn’t a real robot.
If it can’t make me a sandwich, then it isn’t a real robot.
I moved into my new house this weekend. Whew. I really hate to move, but I’m really going to love living here. I’m two blocks away from downtown New Braunfels. Pictures are coming soon.
I’m glad I spent the money on movers this time and I’m extraordinarily grateful for the help of my friends Anton and Edmo.
I’m renting this house from my parents. It’s actually the first house I lived in. The only challenge is finding places to put all of my stuff. For now, I’ve gotten a storage unit, but I’m going to try and go the Lifehacker and Unclutterer route and try to reduce the amount of stuff that I’ve accumulated. It’s a bit of a tough decision on what stays and what goes because of a couple of reasons. First, I’m by nature a bit of a pack rat (and come from a family of pack rats) and second, as a practical matter, occasionally “junk” that I’ve kept has been handy when making short films, photography, or other art projects.
I’m also going to be visiting the Container Store, Ikea (in Round Rock) and actually the Lowes here in town is MUCH nicer than the one close to my old apartment. Lowes had a few options that would work for a pantry.
Come join me at Tonic Bar on Saturday January 12 from 10pm – 1:30am for
the Dog Men Poets show.
Tonic is at Babcock and Eckhert – here’s a map.
At midnight I’ll be celebrating my birthday! Don’t bring anything but yourself!
I finally was able to process a number of sets of photos tonight.
I ordered and received a Strobist kit from MPEX. Here is an example or two from my first experiments with the kids:

I also took a few snapshots at Christmas. First one from an early Christmas with the kids at my parent’s house:

Then over at my grandmother’s house for Christmas Eve:

Christmas day, I was up at my parent’s house near the Guadalupe River, so we decided to goof around with the cameras outside:

The following day, David, Edward, Virginia, and I went downtown to get a few shots of the Christmas lights on the Riverwalk.

Click the photos to see the other photos in each set.
Over at Stevey’s Blog Rants is a cool article: Code’s Worst Enemy. Stevey describes being up against getting a 500,000 line web-based game working again after some time off-line. He sees a large code base being the worst problem you can face in software and he makes some good arguments to that point.
He also comes to the conclusion that Justin Gehtland (Name dropper! –Imaginary Ed.) talked about in Ruby on Rails training that I went to last week (I’m paraphrasing both here): The JVM is great – the Java language is the problem. He makes an interesting choice in the end (I’ll let you read the article for yourself).
I did it. I waited until now (though there were some personal extenuating circumstances) to finish my Christmas shopping. Given my mortal fear of shopping, I had intended on doing most of my shopping online. I was encouraged by Amazon’s banner indicating that not only wasn’t I too late to shop, but that I could indeed still use Super Saver Shipping and still receive my order by Christmas so long as I ordered by today.
I went through, selected items eligible for SSS and placed my order. Bummer. A few of my items won’t arrive until after Christmas. Make that all of my 14 items wouldn’t make it until the 26th or later. Hmm. Try standard shipping. No soap, all of them showing up post-Christmas. Hmm again. How about two day shipping? Nope. Ok, the problem must be just one or two, select multiple shipments (at additional cost). Ah, Amazon, my savior! For only $140 on a $215 order, I can receive two of my 14 items on time.
I’m late making my order – I can accept that, but what is the point of trumpeting that you can save the day for us late shoppers if you don’t mean it?
No thanks, Amazon. I’ll be braving the crowds before I send you any money this year.
UPDATE
Borders – the good, old, brick and mortar version – came through. One trip over lunch and I ended up with just about everything I wanted from Amazon (a bit more here, a bit less there) for about the same cash as Amazon.
The Pragmatic Programmers have suggested that you get a lot out of learning a new programming language a year. I’ve been doing programming for a long time, and though I’ve learned a number of languages over the years, but I think I’m still behind. This year I’ve been learning Ruby (which I’m loving). For next year, I’ll need to learn something else – and like many, I think I’ll choose Erlang. For kicks, here is what I’ve touched so far:
Which would be a pretty good list except I started back in ’83 or so. I’ve definitely not done as well in recent years. My experience with Ruby has definitely re-energized my interest in languages.
Recently at work, there has been a push to not only standardize on a software diagramming tool, but to enforce its use for all projects. I’m naturally opposed to this “one size fits all” approach, but it also made me think about the ways teams use software documentation. It took a few weeks of background brain processing and refreshing my XP experience (with the team I’ve been working with recently) to get my thoughts together.
I have always observed a tension around documentation in my experience as a developer. On one hand, everyone accepted that documentation was obviously necessary to a healthy project. We clearly needed detailed requirements and design documents. On the other hand, most people would grudgingly acknowledge that documentation:
The split of opinion in our meeting broke down more or less like this:
An architect and people on his team were convinced of the necessity of formal documentation. The more experienced dynamic language developers, were much less convinced.
We talked about what the documentation proponents expected to gain from the documentation and heard the following:
I tend to favor simplicity, so my gut was telling me that any design that needed more than a few minutes at a white board was likely to be overkill (particularly for the kind of software we develop). After some thought, I came to the conclusion that the problem was that the fans of documentation are after a worthy goal, but the current state of software engineering lets them down.
Why?
Simple. A UML document isn’t anything close to the information repository that an actual blueprint is.
Blueprints (I’m speaking of architectural blueprints here) provide information that can be used to validate the structural integrity of the proposed building. UML diagrams do no such thing – the reason why is that building construction is composed of specific standard materials (components) which are assembled (composed) in standard known ways. The net result is that an engineer can look at a blueprint and bill of materials and perform the math necessary to determine if the designed structure will withstand the expected stresses. Software packages exist which can do this as well for many types of structures. Likewise, electrical engineers can design a circuit and run it through a circuit simulator to validate that it works.
In software, UML diagrams (or any other documentation) describe high level design patterns and standard frameworks that can be applied, but the devil, as they say, is in the details. There are no standard components which hook up the internals in predictable or validatable ways. No one can look at a UML diagram and make any valid predictions about the suitability of a design for any application.
Why?
Because software is a more widely applicable than construction and is an extremely immature engineering discipline. We’re still putting together our buildings using hammers whose heads fall off and land on your foot when you swing them at a nail. To write a circuit simulator for a software application requires that you write the code for the software. The code for the software is ultimately the only design that matters. The best validation that we can currently achieve is to write tests against running code.
Therefore, the inability to prove the suitability of a software design document is one of the reasons why software architects who don’t write code are a bad idea. A lot of software engineers either intuitively get this or have picked it up after dealing with an “architect” or two. XP guys get it – the lead software engineer still writes code.
A final analogy: a music composer can sit down with a sheet of paper and a pencil and write down a piece of music that can be played by a group of musicians with no further input from the composer. Software can’t be designed this way. Human beings aren’t capable of comprehending enough depth and lack the tools to communicate the design for a piece of software.
So where do we stand?
Software is hard to do right. There isn’t an easy answer and no silver bullets seem ready to present themselves. The best we can do at present is emphasize simplicity, maximize communication (face to face at a whiteboard beats any document I’ve seen), and use discipline and techniques like pairing, reviews, and testing (and many others) to protect us from ourselves. It’s the best we can do right now.
Anton sent me a link to Damien Katz’s “funny because it’s true” article about the symptoms of being a crappy programmer. I wish everyone at work would read and think about this.
The fact of the matter is that everyone is guilty of something on this list from time to time. It reminds me that I really need to refactor the copy/paste coding that I did on Thursday night when adding a new feature to Cruise Control Rb.
Keep your cat away from my bird feeders!
Favorite quote: “It was crouched, as usual, under one of our bird feeders & I fired from some distance with bird shot.”