Its entirely possible that this was the best day ever…

– I worked from home today, because I earned it driving yesterday. I love being around my family!
– My project, and the larger project which it is a part of, passed the 3rd decision point in the release process this morning. The final phase is regression testing, which I will only be involved in if something goes wrong.
– I found out that I’ll still have a job when we move to Canada. Details are yet to be ironed out, but my boss and my bosses boss want to keep me around!
– Our new TV arrived from Amazon today, 5 days early. It is big and beautiful and much lighter than the old TV. 40 inches of 1080p looks amazing.
– To top it all off, I beat Halo 1 this evening. This is the first time ever that I’ve beat a video game by myself, and I feel that this is an important accomplishment!
Ben’s in the bath, and when he’s done and off to dreamland, I’m going to have a glass of wine and cuddle up with my wife and watch some HD TV… Life is good!

Anthem

Sorry about the down-time yesterday, our little site received a right good Slashdotting when my post on my job made it to the front page. For those of you not in the know, Slashdot is one of the top geek news and discussion sites on the Internet. For an article to make it to the front page guarantees a barely manageable flood of traffic, and temporary Internet celebrity. It’ll die off in the next couple hours, but I can’t say I’m not ecstatic that my ramblings were deemed worthy of the attention of the larger Internets. We got 3500 hits on the site yesterday — would have got more if my host hadn’t almost exploded under the strain.
Most of the comments that made it into jonandnic.com were kind and encouraging. A number of people in my line of work echoed my feelings. I also received a couple nice e-mails and IMs — my favourite being a student in Sweden looking for advice on which direction to take his career.
Of course the Internet is full of retards who probably didn’t read the article. The paragraph they chose for the front page of Slashdot was apparently more controversial than I could have predicted, and of the 469 comments on that site, a good 50% were negative. I’m not taking any of them personally, because I am familiar with John Gabriel’s Greater Internet Theory. But there were a few I just had to reply to…
To the gentleman who suggested that I am full of poo:
Thank you for your concern. However, I can assure you that my digestive tract is functioning normally, and that I am voiding my bowels at a regular and healthy interval.
To the multiple individuals who accused me of “douchebaggery:”
I am not a douchebag. As Digg taught us yesterday, this is a douchebag.
To the people who are Software Engineers/Developers/Programmers but who found nothing in common with my post:
I am truly sorry that you’re not happy in your job. Perhaps another career might fit you better.
To the people who got hung up on those two sentences about the word “Engineer.”
I quote the great wisdom of Slashdot when I say, R-T-F-A!
And to everyone else who replied in solidarity — either in the same field as me, or in a similar discipline:
Thank you! Its for people like us that I wrote that post, to explain to everyone who just thinks we’re “computer guys” (or gals) that what we do is so much more than that. I can’t possibly reply to every comment, but I’ve read them all, visited each of your blogs if you linked to one, and I am so glad that you took the time to read my rather ginormous article.
I thank God for the unique combination of gifts He’s given me that make my job such a perfect fit for who I am. That realisation probably made this whole experience worthwhile. As a result, I’m thinking about some changes to the site, but I’m off to Pennsylvania tomorrow, so I think I’ll just let things sit where they are for a couple days. Back at the end of the week!
Update: 9,429 visits today!

Embracing My Inner Geek: Part 2 – The Job

Hi Slashdot, read this, woulda ya?

Did you ever see that one Friends episode where they make up a game where they test their knowledge of each other? In one of the rounds, the girls are asked what Chandler does for a living, and the answer they come up with is “transponster!” Which of course isn’t a word. All they know is that he carries a briefcase. Well I suspect that many of my friends don’t know what I do for a living. I suspect, if asked, you’d answer something like “I think he fixes computers.”

I know jobs aren’t the most interesting topic, but in my continuing series on embracing my inner geek, I think its important to tell you all (you who are interested anyway) what happens at my job. If you’re at all interested in who I am, you should know what I do. And believe it or not, I don’t fix computers for a living.

In fact most employers I’ve worked for actually have rules in place to suggest that I not try to fix my own computer. There’s these organizations, some (not all) still stuck in the 70s and 80s, called “I.T. Departments” who’s official purpose is to fix computers — but who’s actual purpose is to attempt to prevent their users from doing anything dangerous (read: useful.)

I do not, and have never, worked in an “I.T. department,” although I’ve volunteered those skills I have in that area on many occasions. In actuality, my job is much different.

I am, in the States, known as a Software Engineer. In Canada we’re not allowed to call ourselves engineers, although the discipline is no less rigorous than any other kind of engineering.
But perhaps its for the best, because “engineering” describes only a part of what I do.
A software developer must be part writer and poet, part salesperson and public speaker, part artist and designer, and always equal parts logic and empathy. The process of developing software differs from organization to organization. Some are more “shoot from the hip” style, others, like my current employer are much more careful and deliberate. In my 8 years of experience I’ve worked for 4 different companies, each with their own process. But out of all of them, I’ve found these stages to be universally applicable:

Dreaming and Shaping

Napkin SketchA piece of software starts, before any code is written, as an idea or as a problem to be solved. Its a constraint on a plant floor, a need for information, a better way to work, a way to communicate, or a way to play. It is always tied to a human being — their job, their entertainment… their needs. A good process will explore this driving factor well. In the project I’m wrapping up now I felt strongly, and my employer agreed with me, that to understand what we needed to do, we’d have to go to the customer and feel their pain. We’d have to watch them work so we could understand their constraints. And we’d have to explore the other solutions out there to the problem we were trying to solve.
Once you understand what you need to build, you still don’t begin building it. Like an architect or a designer, you start with a sketch, and you create a design. In software your design is expressed in documents and in diagrams. Its not uncommon for the design process to take longer than the coding process.

As a part of your design, you have to understand your tools. Imagine an author who, at the start of each book, needs to research every writing instrument on the market first. You have to become knowledgeable about the strengths and weaknesses of each tool out there, because your choice of instrument, as much as your design or skill as a programmer, can impact the success of your work.
Then you review. With marketing and with every subject matter expert and team member you can find who will have any advice to give. You meet and you discuss and you refine your design, your pre-conceptions, and even your selected tools until it passes the most intense scrutiny.

Once you have these things down, you have to be willing to give them up. You have to go back to the customer, or the originator of the problem, and sell them your solution. You put on a sales hat and you pitch what you’ve dreamt up… then wait with bated breath while they dissect your brain child. If you’ve understood them, and the problem, you’ll only need to make adjustments or adapt to information you didn’t previously have. Always you need to anticipate changes you didn’t plan for — they’ll come at you through-out the project.

Once you know how the solution is going to work, or sometimes even before then, you need to figure out how people are going to work with your solution. Software that can’t be understood can’t be used, so no matter how brilliant your design, if your interface isn’t elegant and beautiful and intuitive, your project is a failure.
Pointalist art: Sunday Afternoon By Seurat
I don’t pick those adjectives lightly either. All of them are required, in balance. If its not elegant, then its wasteful and you’ll likely need to find a new job. If its not beautiful, then no one will want to use it. And if its not intuitive, no one will be able to use it. The attention to detail required of a good interface developer is on par with that of a good painter. Every dot, every stroke, every color choice is significant.

To make something easy to use requires at least a basic understanding of human reactions, an awareness of cognitive norms. People react to your software, often on a very base level. If you don’t believe me, think of the last time your computer crashed before you had a chance to save the last 2 hours worth of an essay, or a game you were playing.

What you put before your users must be easy to look at so that they are comfortable learning it. It must anticipate their needs so that they don’t get frustrated. It must suggest its use, simply by being on the screen. And above all else, it must preserve their focus and their effort.

So you paint, using PowerPoint, or Visio, or some other tool, your picture of what you think the customer is going to want to use, and once again you don your sales hat and try to sell it to them. Only, unlike a salesperson selling someone else’s product, you are selling your own work, and are inevitably emotionally-attached to it. Still, you know criticism is good, because it makes the results better, so you force yourself to be logical about it. Then finally, when your solution is approved, and your interface is understood, you can move on to the really fun part of your job:

Prose and Poetry

A good sonnet isn’t only identified by the letters or words on the page, but by the cadence, the meter, the measure, the flow… a good piece of literature is beautiful because it is shaped carefully yet communicates eloquently.

Code is no different. The purpose of code is to express a solution. A project consists of small stanzas, called “Methods” or “Functions” depending on what language you use. Each of these verses must be constructed in such a way that it is efficient, tightly-crafted, and effective. And like a poem, there are rules that dictate how it should be shaped. There is beauty in a clever Function.

But the real beauty of code goes further than poetry. Because it re-uses itself. Maybe its more like music, where a particular measure is repeated later in the song, and through its familiarity, it adds to the shape of the whole piece. Functions are like that, in that they’re called throughout the software. Sometimes they repeat within themselves, in iterations, like the repeating patterns you see in nature.
Intricate FernAnd when the pieces are added up, each in itself a little work of art, they make, if programmed properly, a whole that is much more than a sum. Its is an intertwined, and constantly moving piece of art.

As programmers, we add things called “log messages” so that we can see these parts working together, because without this output, the flow of the data through the different rungs and branches we put together is so fluid that we can’t even observe it and, like trying to fathom the number of stars in the sky, it is difficult to even conceptualize visually the thousands of interactions a second that your code is causing. And we need to do this, because next comes a Quality Assurance Engineer (or QA) who tries to break your code, question your decisions, and generally force you to do better than what you thought was your best.

I truly believe that code is an art form. One that only a small portion of the population can appreciate. Sure anyone can walk into the Louvre and appreciate the end result of a Da Vinci or a Van Gogh, but only a true artist or student of art can really understand the intricacy of the work behind it.

Similarly, most people can recognize a good piece of software when they use it (certainly anyone can recognize a bad piece of software) but it takes a true artist, or at least an earnest student, to understand just how brilliant — or how wretched — the work behind it is.

And always, as you weave your code, you have to be prepared to change it, to re-use it, to re-contain it, to re-purpose it in ways that you can’t have planned for. Because that is the nature of your art form — always changing and advancing.

Publishing and Documenting

Its been said that a scientist or researcher must “publish or perish.” The same is true of a software developer. A brilliant piece of code, if not used, is lost. Within months it will become obsolete, or replaced, or usurped, and your efforts will become meaningless, save for the satisfaction of having solved a problem on your own.

So after months of wearing jeans, chugging caffeine, cluttering your desk with sketches and reference material, you clean yourself up, put on a nice pair of pants, comb your hair, and sell again. Although most organizations have a sales force and a marketing department, a savvy customer will invariably want technical details that a non-coder can’t supply. As a lead developer on a project, it falls to you to instill confidence, to speak articulately and passionately about the appropriateness and worth of your solution.

Again, as before, pride is a weakness here, because no matter how good you are, someone will always ask if your software can do something it can’t — users are never really satisfied. So you think back to the design process, you remind them when they had a part in the decisions, and you attempt to impress upon them respect for the solution you have now, while acknowledging that there will always be a version 2.0.

And you write and you teach. Not so much in my current job, but in one previous, as a lead developer it was my responsibility to educate people on the uses of our technology — to come up with ways to express the usefulness of a project without boring people with too many technical details.
One of the best parts of software development, a part that I miss since its not within my present job description, is getting up in front of people — once they’ve accepted your solution — and teaching them how to use it and apply it. Taking them beyond the basic functionality and showing them the tricks and shortcuts and advanced features that you programmed in, not because anyone asked you for them, but because you knew in your gut they should be there.

And Repeat…

Then there’s a party, a brief respite, where you celebrate your victory, congratulate those who’ve worked on parallel projects, and express your deepest gratitude for your peers who’ve lent their own particular area of expertise to your project… And you start again. Because like I’m sure any sports team feels, you are only as good as your latest victory.

So do I fix computers? Often its easier or more expedient to hack together a solution to a problem on my own — certainly the I.T. Department is becoming something of a slow-moving dinosaur in an age where computers aren’t the size of buildings, and most of us are comfortable re-installing Windows on our own — but that’s not a part of my job description.

No, I, like my peers, produce art. Functional, useful, but still beautiful, art. We are code poets, and it is our prose that builds the tools people use every day.
However, unlike most other artists, we’re usually paid pretty well for our work 😉


Post-script to Slashdotters (did you RTFA?!)

A few things to clarify here, based on the comments on the site:

  • The intent was not to gripe about Canada’s standards for the term “engineer.” I only pointed that out the difference between my home country, and my current country of employ. I prefer the term “software developer” myself, but it doesn’t really matter to me. It was only one sentence in a 2100+ word article — hardly my thesis!
  • The intent was also not to be pompous or fuel my own ego, it was to describe, as eloquently as I knew how, what most of us on Slashdot are. Although the stigma is going away, us geeky types tend to be considered only that: geeks. When really there is art and beauty to what we do. I’m not even as skilled a programmer as I imagine most are, but I wanted to lend my prose to our art because I believe it is valuable. But flame on, if you must! However, please note that I do have a degree, I work for a big company that prides itself in the quality of its products, I have 8 years of real experience, and I have a great life outside of work. This was a mental exercise, so please be nice!

I appreciate feedback — even critical, as long as its intelligent, so drop me a line if you have anything to say other than “you’re a douchebag” and “stop whining that you’re not an engineer.” But please do read the article first!

Things You'll See in Value Village 10 Years From Now…

The other day we found a beautiful little program called Delicious Library, which lets us put a visual face on our expanding collection of digital (and some physical) media. If you haven’t seen it, and you have a Mac, you should definitely check it out.
It got me thinking though, as we used our Firewire camcorder to scan in and automatically index our books (via the bar code on the back) about the technology we grew up with and consider normal. Specifically I got to thinking about those things that seem common-place to us, but that Benjamin will probably view as antique and laughable as he grows up. Here’s the list I came up with…
Cassette Tapes
cassettetape.jpgEven CDs are starting to become irrelevant now, and cassette tapes are becoming almost as funny to look at as 8-track tapes. Yet, who reading this site doesn’t remember making a mix tape? Or listening to the radio with “REC + PAUSE” already pressed, ready to record if your current favorite song came on?
The thing with tapes is, as they get old, they retain none of their appeal. The old LP is still something of an art form. The large size lent itself to some really beautiful cover art, and although the technology is dated, the media is still pretty impressive in its reproduction of sound.
Tapes are little boxes full of metres of magnetic tape. They may have been ubiquitous, but looking back, they were never really that cool.
The VCR
Almost hand-in-hand with cassette tapes is their big brother, the video tape.
I remember distinctly when the VCR was the pinnacle of home entertainment. Back then, the average middle class family couldn’t afford them yet, so when dad rented a VCR and Star Wars for us to watch at home on our own TV, that was a big deal.
But that was 20 years ago, and thankfully this old technology is finally disappearing. Does anyone still have a VCR at home? I know we got rid of ours a few years ago after not having used it for anything more than a TV tuner for ages.
Rotary Dial Phones
This might be going way back for some of you, but we know at least one person who still has a rotary dial phone in her house — she actually has to pay more money a month for “pulse” service now.
rotaryphone.jpgI remember how much it sucked if you realised, half-way through dialing, that you’d made a mistake and had to hang up and start again. There was no way to dial those things quickly, and if you tried you drastically increased your odds of making an finger-numbing error.
Thankfully the old rotary phone is almost completely gone now, and I can imagine that if Benjamin ever sees one, he’ll be completely astonished by it.
Landline Phones
Remember chatting with your friends, tangled up in the long, springy cable of the kitchen phone? I’ll bet Ben won’t.
I’m going to go even further out on a limb here and predict that by the time Benjamin has his own place, getting a phone line installed won’t even be a consideration.
Already “cord cutters” threaten Ma Bell, and most younger people I know don’t even bother with a land line. Nicole and I had one briefly during our first year in the States, before Skype became viable for long distance, but otherwise haven’t had one for at least half a decade.
Game Controllers with wires
atari_wirelessgamemate.jpgOK, this is going back to early VCRs, but I remember on Saturday afternoons if my dad had some work to do at the school, he would bring us in with him and let us in the Library where they had a VCR and a TV on a cart, with a whole bunch of educational videos we could watch. I remember this because the VCR had a remote control — on a wire. And that seemed cool to me at the time.
Its hard to believe that only one generation back, game console controllers all had wires. The technology has been around for ages — even the Atari 2600 had a (huge) wireless controller you could buy for it — but its only recently that wireless has become a requirement for most consumer tech.
Benjamin is fascinated with the XBox controller, and if we give him one without batteries, he loves pretending to play with daddy. I imagine that when he looks back at the video games I used to play he’ll be confused by the additional wires.
Computers without Internet
I mean really, how useful is a computer without Internet these days anyway? What can you do with it? Solitaire and Word Processing, maybe but you can’t chat with anyone while you do it!
Even a telephone without Internet is starting to seem a little backward.
atari_800xl_and_peripherals.jpgI actually think this is pretty significant because my generation learned the two technologies separately. We had computers, and we conquered them, THEN we got Internet and learned that. It will be a few decades before my son is more comfortable with technology than his dad, but its weird to think that he’ll probably rarely experience a computer that isn’t connected to thousands of others. He’ll probably never know the significance of the “OS” war, or that different kinds of computers were, at one time, unable to exchange information with each other. A computer and the Internet will be inseparable concepts in his mind.
Tube TVs
Now this is a slightly more risky prediction, but I’ll bet by the time Benjamin saves up for his first TV, the CRT will be completely dead.
For over 75 years, guns shooting light down a tube entertained us, but I’ll bet a big heavy TV will be a very laughable concept for our kids. Sure they might see them in Goodwill, or in old movies, but they’ll know them the way we know black & white televisions. Just some residual junk of the early days of TV.
In fact, it turns out that our 30″ tube TV is too heavy to move back home — the additional cost of moving it actually exceeds its current value. So it seems we’re going to have to jump on the LCD band-wagon before we go back to Canada (the land of over-priced electronics.)
36145.jpg
1080p, 10000:1 contrast ratio, 3 HDMI ports, $600 off… twist my rubber arm…