Carlos Fenollosa — Blog

Thoughts on science and tips for researchers who use computers

Craftsmanship

January 10, 2015 — Carlos Fenollosa

As an engineer, I enjoy fixing things, disassembling gear and learning how it works. I'm sure many of you opened watches, pens or other small electronics as a child, only to find that there is "that extra piece" after reassembling them.

My grandfather was an artisan, and I still have some of his pieces. They are sensational and reflect not only the image he was trying to create, but also his general mood, recognizable by observing the strokes, edges and paths that the gouges followed. That's why I prefer looking at an artist's collection rather than a compilation, it's easy and shocking how they—and their environment—evolve over time by looking at their works.

For me, however, fixing a Game Boy does not resemble creating a beautiful sculpture from a piece of wood. Basically, I've never had the manual ability nor the tools to build real-world things from scratch, and that's a skill I envy. Fixing or improving existing things à la McGyver is one thing, but producing something from scratch is an entirely different expertise. That's why I love looking at other people's projects at the DIY subreddit.

But, in some way, programmers are DIY masters, especially for small weekend projects meant to scratch an itch. In the zeros and ones world, crafting can mean writing a script to automatically parse gmail for youtube links you send to yourself from your cell phone, downloading them in the background, converting them to mp4 and saving them into iTunes, so that they automatically get pushed to your iPad and are ready to watch when at home.

Not only the result may be notable, it also carries a little bit of yourself in the code. Which language did you use? Did you feel lazy and wrote it in Bash, or wanted it to be robust and wrote some Python? Is it all on a single function or split into modules? How did you name the variables? Are there comments and documentation or is it a quick hack?

Comparing code to other art forms is a cliché, granted. But when I look at my /usr/local/bin/ folder, I don't only see some scripts, I also see my own evolution regarding programming languages, project ideas, organization, skill, and why not, my attitude.

Ah! I see that around 2011 I stopped using backticks in Bash scripts and replaced them with command substitution. Then in 2012 Python scripts start replacing Bash. Around that time I learned Git, because I can see a lot of helper scripts there. I guess I didn't like it back then since I see a lot of "wtf" comments.

There are some unfinished projects. I know because the files aren't executable. Upon opening them, yes, the code is only half written. Will I pick them up someday? I really don't know, but I love remembering that three years ago I was working on an audio synchronization project. I had completely forgotten.

A programmer won't likely get his code displayed at an art gallery, it probably wouldn't even make sense except for a few other programmers. But observing the evolution of your work is a good self-reflection exercise. Reading other people's code is probably a must, but reading your own, even if it makes you cringe a bit—God, was I really using Hungarian notation?— will let you see how far you've come. It's like looking at that famous Microsoft staff in 1978 picture. A bit shameful, but necessary to let us all remember that even Bill Gates worked his way up from the bottom.

Take some time to look at your crafts from some years ago, and take pride in them. They may not be a beautiful table or lamp, but they treasure a little bit of yourself from the past.

Tags: art, programming

Comments? Tweet