Monday, September 16, 2013

I done built a table (and a comparison of building physical objects vs. programs)

Hey all, been awhile since my last post so I apologize for that. I'm sure my legions of readers have been waiting with breath held for the past two weeks so I've come to say two things. One, I told you to yell at me if my posting became lackadaisical, so this is kind've your fault when you think about it. And two, breathe easy friends, the drought is over. Without further ado, let's dive into this weeks post.

As a software developer, I deal principally with the stuff of nether. What I build can be neither felt nor smelled and exists in some strange dimension experienceable only through the viewport of a computer. Sometimes this leads me to believe the code I obsess over, pour myself into, is an imaginary container of no intrinsic worth. To illustrate what I mean, let me confide in you a true story. Oftentimes I think about the looming zombie apocalypse. The police officers and ex-military will be useful as first defenders, the engineers will build sophisticated traps to destroy the ravenous zombies, what will Computer Science majors do? What will I do? I could write those nasty zombies a pretty gnarly Python script? Maybe blow their minds with some outdated Perl code? We could have a stimulating discussion of classical inheritance vs. prototypal inheritance? I'm sure you see my point. Code has no value without an intermediary, a middle man. Computers are the small, creepy, seance from the Poltergeist that let you talk to the "spirits" (programs). Well, this week I decided to take a break from programming the ghost whisperer and instead decided to build something that would stand up in a zombie hell. No, I didn't create a crossbow. I created the next best thing: a coffee table.

There's something to be said for the smell of wood and the ache of muscles after a day of carpentry. When building a program, I tend to find the distribution of my development time works out to something like: 10% brainstorming, 40% coding, 49% debugging the code I just wrote, and 1% feeling a sense of pride in my newly working code before moving on to the next project or block of code. However, while creating the table I found my dev time being distributed very differently. It worked out to approximately: 5% creating blueprint and buying material, 75% building, and 20% putting a combination of finishing touches (stain, finish, brass plugs, etc.) on and feeling a sense of pride. What does this mean? Well, for me it means that building a table is far simpler then building a program. While a table has some planning required and some verification necessary (making sure the surface is level, sturdy, etc.), it doesn't even begin to compare to the time required for verification of a program (in fact, it's a paradigm of software development that for many programs, proving correctness is impossible and testing exists only to expose bugs). Could you imagine if this was the case for a table? If you could never see if a table was actually level but only if it was not? It would take FOREVER to build a "correct" table and it would be so, so, so incredibly aggravating to try. Welcome to the magical land of programming, where 100% correct is a fairytale on par with unicorns and Sasquatch.

I took a few things away from my experience building the salvation of mankind, protector of the realm, and primary defense against the looming zombie emergence. First, I reaffirmed to myself that building is my passion. Although I've chosen a career path which has me building virtual constructs rather then tables and cabinets, I don't think I've chosen poorly because the route I'm going will allow me to reach out to millions of people. I'll build apps and tools for them with the programming equivalent to the hammer and chisel. I'll create things which may improve their life or at the very least their day. Heck, maybe I'll even do my part when the infection starts and code Skynet 2.0 to save the human race rather then destroy it.

For those interested, below I've added a day-by-day timeline detailing the table's construction a.k.a Operation Zombie Fortress:

Day 1
Created the original plans for the table and bought material. These changed significantly as I strove to create a more zombie-proof design.
the original blueprint

Day 2
Created the mortise and tenon joints for the table ends. I had to hand chisel these.
top view of a mortise
one of the mortises
table ends

Day 3
Created the joints for the long rails of the table frame.
Long rail mortise
artistic long rail mortise
completed top of the table frame

Day 4
Added mortise and tenon joints for the bottom rails of the frame.
chiseling the mortises for the bottom rails
gimme gimme, more mortise
completed frame

Day 5
Glue time. And now we wait
gluing everything together

Day 6
Nailed on table surfaces, stained, and added brass plugs.
brass plugs for funsies

Day 7
Applied finish. And then was finished.
all done
all done from the side


Well that ends this weeks riveting entry. My coercive compatriots, if my fingers haven't been ripped from their sockets and eaten like Hors d'oeuvres by the 1% zombies, I'll see you next week.

Bobby

No comments:

Post a Comment