Embracing My Inner Geek: Part 4 – Digital Toys

I have a friend, let’s call him Adam, since that’s his name, who enjoys a good debate. I am convinced that he so much enjoys a good debate that’ll he often take a losing, or even a preposterous side, just to incite argument. But that’s OK, because I enjoy a good debate myself, and have been known to, occasionally, pick a contentious position, just because the mental work-out entertains me.

Halo PwnageThe other day, while ostensibly playing a rousing game of Halo 3 online, we were debating over the headsets about the affect technology has on our society: our communities, our relationships, our connectedness. Adam took the side that believes that technology is forcing a wedge between individuals, destroying a sense of community, and creating a generation of lonely, depressed individuals.

So that you can fully understand the irony of his position, let me pause here and explain that Adam lives about 9 hours away from us. I’ve known him since he was about 7, but with our move to the States have only been sporadically in-touch with him, using various technologies. The telephone being something of an old technology that neither of us employ frequently (or with much skill) we’d, until XBox Live, been communicating only over the occasional e-mail or brief IM conversation. It wasn’t until I got an XBox that Adam and I were even able to communicate voice-to-voice on a regular basis. In fact, we “hang out” in a virtual world, talking (or debating) in each other’s company at least once a week now. (The fact that he regularly destroys me at Halo has nothing to do with my point.)

Adam argues, like many Luddites in our society, that suicide rates are higher in high technology areas; that the relationship with a “pen pal” is much closer than one with someone on your friends list; that most people with an Internet connection have never even spoken to their next door neighbors.

While its hard to argue the statistic about suicide, I have to maintain that correlation does not necessarily indicated causation. My reality is that not only does technology not drive a wedge between me and my relationships, but it is a significant key into making those relationships continue to work. A few examples, aside from the obvious one about XBox Live:

Skype + Webcam: Without this technology my parents would have seen their grand-son Benjamin a total of maybe 3 times in his life. This despite the fact that my parents are not technologically adept, and certainly aren’t “early adopters” of anything geek related (although they’re holding their own.) Granted this technology is nascent and has a long way to go before its a normal part of every day life, but despite its quirks and bugs, my parents in Kuala Lumpur are regularly able to see and talk to their grandson in upstate New York.
Without this technology we’d be relegated to photos or videos sent in the mail (both of these things being technology as well, just slightly older). The (almost) live, two-way communication would be gone.

Printing PressBlogs: Once the domain of uber-geeks with coding skills, baby blogs are sprouting up all over the Internet. There are all different kinds — from the bullet-point blog post to the photo blog — and yes, there are a few truly awful ones, but this technology is to human communication in the 2000s as the printing press was in the 1400s. Publication of works is now something that belongs to the individual.
Despite being a huge blogger, and blog-enthusiast with a good dozen blogs on my daily blog-roll, I’m going to pause here and concede a point or two to Adam’s position. A blog can be dangerous to relationships when it is passively consumed. Too many people are used to the position of sitting on the couch, eating up the content that faceless network providers stream to their head-cavities through the TV. Those who haven’t yet grasped that the Internet is a two-way media that expects and even demands that they participate in what they’re consuming, ruin the advantages of blogging.
Simply put, if you read blogs but do not produce one, or at the very least comment on and participate in the blogs you visit, you are a leech. You are a Luddite of the most severe kind, who by sheer complacency damages the potential not just of a technology, but of a relationship…

Instant Messaging: IMs and Texts have all but replaced the phone call of yesteryear. Yes, this technology is fraught with problems — it can be difficult to ascertain emotion or sarcasm, a multi-threaded conversation can become confusing, its slower than a phone call — but I’d argue that all of these are worth over-coming.
IM is live, but allows for time to come up with a thoughtful answer.
Its on-demand, but allows for delays due to circumstances or multi-tasking.
And its presence-sensing, which is something a telephone can never do, allowing you to indicate your availability for a conversation instead of being rudely interrupted during a meal or mating activities.
I don’t think it will ever completely replace the telephone, but between IM and Video Conferencing, I do believe the telephone will be relegated to less use.

Throughout history there have been those who decried the invention of new technology. I’ve listed only 3 (4 if you include XBox Live) that are commonly painted as harbingers of the end of civilization as we know it. But the fact is, my life, and my family life are better because of all of these things.
I’ll agree that, like any technology, the Internet can be used for evil. Just like the telephone, MySpace can be used to harass someone. Just like a book, a web page can be used to incite hate. And just like a magazine, a URL can be used to distribute smut. But all of these things can also be used for incredible good — to foster communication and grow relationships.

Just remember that its a two-way street. There are those of us who bravely forage into new frontiers of the web, to discern uses for new technologies — you call us “geeks” but that’s OK. The faster we learn how to communicate with each other, the faster we can make these technologies usable for the average person. Your responsibility then, is to dive in, embrace these new ideas and tools as soon as you can, and use them to build community…

Thoughts? Disagreements? Explain in the comments, and help create community…

Embracing My Inner Geek: Part 3 – Education

I had another topic in mind for part 3, but a reader asked a pretty interesting question in response to part 2 that got me thinking. It was so good a question, in fact, that I’ve spent most of my idle CPU cycles this morning formulating a response:

How do you think someone who did not get a degree in CS or software engineering, [can] eventually become a good software developer/engineer/architect without getting further formal education, and surpass those who did receive formal education? I know that if one truly wants to be successful in a particular field, one does not need to take classes in that field. But I just wanted to hear your take on this.

I’d have two answers to this question, depending on who asked me, but both are from my own experience.

First of all, if the person asking was 18, and wondering how best to pursue software development as a career, I would, without hesitation, tell them to go to college, and sign up for as much education as they can stomach.

Then I would qualify that by saying college was, for me, almost completely useless — almost.
The reality is, there are no good programs out there that can teach software development. Most Computer Science degrees are in Math, and most applied courses teach languages that are already out of date. If you don’t have the gift of talking to computers going into college, nothing they can teach you there will help you.

When I signed up for Computer Programming/Analysis at Conestoga College, in 1997 I was sure they’d have nothing to teach me. And when I graduated 4 years later, I was still mostly convinced of that. Conestoga was the number one college in Ontario 7 years running, include the time I attended, and has produced a number of very successful local technologists. It wasn’t the school’s fault that their material was sorely out-dated — that’s just the way this industry moves. Maybe 20% of what was offered turned out to be new and applicable information for me. The rest I either already knew, or wouldn’t ever need to know (a year of COBOL?! Are you kidding me?) In fact, I was so thoroughly self-educated at 18, that I was enlisted to help the head of my program re-write the first year Intro to Programming course material.

All that arrogance aside, though, I might not have the job I have without the piece of paper that says I went to school.

In software development (and probably other fields), education does not necessarily prove your skill or your intelligence, it proves your discipline and your commitment, and its those things, as much as any technical bullet point on your resume, that employers look at.

My current boss sees hundreds of resumes a year. He looks for quick ways to pair down that pile, and one of his first qualifiers is education. His short list these days is mostly made up of people with Master’s degrees.

Formal education may be something of a money making scam — I have a pile of useless text books in my closet that cost me from $100 – $300 each, just like I have a pile of course credits that I’ll never use — but the harsh reality of a competitive marketplace is that formal education also opens doors. Perhaps you can get as far with only your intelligence, charisma and experience, as those with less of each but a few letters after their name, but you’ll have to work harder to get your foot in the door, work harder to prove yourself to your boss and your colleagues, and you’ll be offered less opportunities. For example, it would be very difficult, if not impossible, to pursue a job outside of your native country without a formal education.

I have known brilliant people, who by all rights should be rolling in cash, limited to low-paying, high-stress, over-worked positions because they don’t have a piece of paper that says they can do what everyone knows they can do…

That said, I’ve also interviewed people with tremendous academic credentials from prestigious schools, who are less qualified for a job as a software developer than your average high school student.

So in general, my advice, despite my own impatience toward academics, is to stay in school as long as you can stand.

However, if the person asking the question was a colleague, or even someone I was interviewing, my opinion would be entirely different. While I acknowledge college as usually being a necessary evil in pursuing a career, I also know, perhaps more than some, that lack of education means nothing if the individual in question has a good problem-solving mind and experience in the field. Programming really can’t be taught — its an area of giftedness (or a curse, depending on your perspective.)
At my work place, I can almost guarantee that none of the people around me are developing in programming languages they learned in school. You could argue that they learned the discipline and processes, the problem solving techniques, and the logic that could apply to any language, but I would argue that they already knew those things — they were born with them.

Software development moves so fast that you have to be self-taught. In the time it took to complete coding on my latest project, in the then-brand-new .Net 3.0 Framework, .Net 3.5 was released. If I was dependent on what I learned in college, I’d still be using VisualBasic 6 — and I would be sorely unemployable!

No, given the opportunity, I would never evaluate the viability of a candidate based on their schooling, or lack thereof. And I would never judge a co-worker’s ability based on their degree, or lack thereof. An education may help get a foot in the door, but what’s important in software development is what you can do now. Can you problem solve? Do you learn quickly? Are you a logical thinker? Do you communicate well? Can you think ahead? Prove it, and I don’t care what your background is.

And I would remind those who disagree that both Steve Jobs and Bill Gates are university drop-outs, who knew before they finished school what needed to be done, and made it happen. I wouldn’t encourage that path for those starting out — its risky and it may cause people to undervalue you — but if you’ve arrived at your professional career through a less-conventional method, and you have the smarts and the guts to get things done anyway, then don’t let anyone tell you that you can’t succeed.

Far more useful to me than anything I learned in school was the job experience I’ve collected. I was employed in my field before I was done college, and maybe could have gone just as far without the piece of paper. But I’ll concede that its been helpful — especially given my youth at the time I began playing this game — to have evidence that I can do what I do…

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!

Embracing My Inner Geek: Part 1 – The User Group

We heard a sermon a couple weeks ago about giftedness — about focusing on your primary giftedness, because that’s where God wants to use you most.

Whether I like it or not (and sometimes I don’t) my primary giftedness is technology. Despite everything else I think I am, or wish I was, there will always be people out there who when they see me will think “maybe I can get him to fix my computer…”

So for the next couple months, aside from the incredible amount of work we’re going to have to do for this move (frustratingly, none of which can be started yet), I’ve decided to embrace my inner geek, and focus on what I know I’m strongest at.

But rather than babble about code snippets and hacks I’d like to try to talk about the more personal side of being a geek. To communicate the spirit of who we geeks are, and maybe help some people understand what it is about being a nerd that is so compelling.

For example, in most careers you can guess at a person’s successfulness or competence at their job by evaluating their outward appearance: a salesperson who has nice shoes, a good hair cut and who drives a nice car is probably good at their job.

Old School Nerdy GuyIn my field, and in my experience, the inverse is frequently true. The more unruly the hair, or crazy the beard; the more out-of-date the wardrobe; the larger the glasses, the more likely it is that the individual is a sheer genius, and the most brilliant coder you’ve ever met.

Of course that’s a broad generalization. There are some of us geeks who aren’t computer science types, but adequate coders which occasional glimpses of genius, who also happen to have a decent eye for style or design.
And while some engineers’ are so in-tune with the code they develop that they lack basic social skills, some of us, while not as likely to bleed in binary, are able to express solutions both in code and in words. Some of us are even articulate and not entirely socially awkward.

Its the combination of the different skillsets that makes a good team. One such combination, between an awkward but brilliant engineer and an articulate geek, started a company called Apple Computers back in the 70s. And whether you’re using a Mac or a PC (or even a business iPhone) because you’re reading this site, you are benefiting from what they wrought.

Back before there was Internet — or at least before you and I could use it — there was the UG and the BBS. A BBS, or bulletin board system, was usually run by a guy who had a computer, a couple phone lines, and a couple modems — although you could run one with only one phone line if you wanted. They functioned as a chat room, a message board, a downloads page and a place to play crude games. Most BBSes used strictly text and keyboard symbols, often in different colors to define the online “world.”

I remember once being given a list of phone numbers that may have been associated with a BBS and ‘war-dialing’ them on my Atari computer (with a 300 baud modem) looking to see what I could find. It was pretty cool to find people on these boards that shared common interests with you, but whom you’d probably never meet.

I did actually meet one System Operator (or SysOp — someone who ran a BBS) who lived near-by when I was about 13. He was deaf, which limited his options in real-life, but online he was a god of his own little empire, respected by his users solely because of what he knew and who he was as a person.
Even better than the BBS, though, was the UG or User Group. Nothing in the new age of the Internet can compare to the UG. If you’ve ever been to a swap meet, you have a small idea of what an UG might be like. I was much too young, in this early age of computers, to drive myself to meetings, but I can remember a couple occasions where my dad drove me to a MUG meeting (Macintosh User Group) in London, and what I remember most was the atmosphere.

A User Group encompasses all levels of geek. There would be little old ladies who dreamed of writing their memoirs on a computer. There would be business people and teachers who wanted to get more organized. There would be hard-core geeks who loved to hack at hardware or at code to make their computers do things the designers never dreamed of. And always there was toys to be found, seen, traded or discovered.

To this kind of geek, a computer isn’t a device. Its an extension of self. Its a quill in the hand of a poet, or a hammer in the hand of a skilled carpenter, or a piano under the fingertips of a talented musician. It provides a hundred different ways to express yourself — and it invites you to invent a hundred more.

Of course, its a source of constant aggravation when things don’t work as expected, but even in that it is a problem to be solved, a challenge to be tackled, and a way to connect with other people. For every problem your computer presents you, there are, and always have been, a dozen other people who’ve worked through it, and found a solution — or better, a part of a solution that complements what you’ve discovered so that the victory is shared.

Revolution in the Valley Book CoverA geek is not judged by their appearance, nor by any external factor. We are judged by the elegance and beauty of our solutions. Even on competing platforms, two ideologically different geeks will share the same respect for a righteous hack.

In many ways the Internet, while being the possibly the greatest thing ever invented, has destroyed the geek community. Now that any newbie can get online, there are no rites of passage left, and no proving ground to establish yourself as worthy. Any knowledge-less retard can join in a conversation he doesn’t understand and start a flame war, and “users” are so much more inept than ever before. There’s no passion required, no problem-solving skills necessary to get online any more. So imagine my surprise when I discovered that there’s still a MUG running meetings only a few miles from where I work! In fact there’s dozens of them still around, and if their websites, devoid of any attempt at marketing or otherwise making them look appealing to the average user, are any indicator, the spirit of the UG of the 80s and early 90s still lives on. The one near me still puts out a newsletter — in dead-tree format, even!

I’m going to next month’s meeting. I’m going to put on my Weezer album (the blue one, from back before they were temporarily cool), dust off the Mac Plus, and geek out like its 1994. And I’m going to enjoy every second of it.

After all, if God made me a geek, why fight it?