Skip navigation.

Software Development

Correcting The Future

I Don't Know

,

As I was standing outside with a cigarette in hand almost leaning against the wall, I felt the wind change. Or rather it took on a sudden energy of its own, different from the regular stream of air coming from ongoing traffic. The smoke from my cigarette went into my eye with a distinctive sting. It's at times like these that I ponder what it would be like not to smoke. Only years later would I quit. But at this moment in time, being smoke-free only meant that my eye was not welling up with water. As I reach for my face, as if I could somehow grab or control the smoke, a drop of water falls on the tip of my cigarette. And as we all know, where there's one drop, there are many.


Being in Toronto meant that everything would be quite sudden. Sure enough, moments later people take out their umbrellas, go inside or take refuge in nearby coffee shops and restaurants that double as bars at night. If I were back on the East Coast, a downpour like this meant that the rest of the day was going to be much of the same. However, and always to my amazement, being near the Great Lakes meant that this was short lived. The more violent it was, the quicker it was over. And this one saw dark clouds come in with thunder and lightning overhead. Ambulances and fire trucks could be heard. I can't be sure, but maybe it was the rain that made the streets quieter and caused my attention to recognise the fire trucks. After a while, you tune everything out. Only when there is definite contrast do you see things that were there all along.

Having stepped on my cigarette, I decide to go back inside. Not because of the rain. I actually like the rain. It's peaceful to me for some unknown reason. Perhaps it is the sudden lowering of the decibel level. But even back East where there is no decibel level at all, I still enjoy the rain. I suppose this makes me enjoy the rain here that much more. Right now though, it's time to go back to a meeting. Actually, the meeting hasn't started yet. I'm supposed to prepare for it in order to get a "backburner" project off the ground.

As I'm standing in the elevator, I start to get anxious. I'm alone. In a small box. Probably with nothing underneath me but empty space down to the basement. And no way to get out. I don't think about these things. Not consciously. But elevators always made me uneasy. Yet this time, it wasn't the elevator that had me troubled. It was the meeting. I only had a basic description of what was required. I didn't understand anything about how the main software worked. And apparently, I wasn't supposed to know. There was a running joke that no one knew. It was a mystery product that provided mystery features. I heard that the sales people loved it though.

As I walk to my desk, I notice things more acutely. I sense who's walking around. And I can tell who they are although I may not necessarily know their names. I know the programmers around my area. I also know the ones on the other side of the building on this same floor. It's the people in between that bother me. I don't know what they do. I see them every day. But who they are and what they do remains a mystery as much as the application I'm supposed to enhance. They walk by my cubicle sometimes. What do they think? Who are they? Do they feel funny in elevators too? That'd be quite the ice-breaker I think. Or not.

I decide I can't think. So I go see a co-worker whom I'd call a friend if I knew him outside of work. What do you call these people anyhow? Just coworkers? I'm not in need of friends or anything, but these are the best people to work with that you could ask for. It's strange working in a place where you get along (and feel needed) with the people as good as you do your friends.

After walking to the corner of the building on this floor, I see him tucked away at the far end of his desk. The side near the walkway is littered with trinkets. There are all sorts of puzzles. There's the wooden pieces that form a barrel. There's the chain links. Stuff like that. I pick up the chain links and say hi. He slides over and starts talking about some code we were working on. We didn't both work on it. I updated it and he was looking through it because he was updating the core server. My update was messy. Real messy, he says. I tell him to check out the original (made by someone else). I keep playing with the metal links which by now are starting to get on my nerves. Where's a hammer when you need one?

I'd mention his name, but I don't operate that way. He's the trinket guy. That's his name as far as I'm concerned. I'm not going to say what I call my boss. Very cool guy, but people of that stature in the field of programming is a little, shall we say, intimidating. Plus, I never know what's accepted and what's not depending on people's ethnic backgrounds. Especially at work. Personally, I like to say what's on my mind. Well, that's not true. When I speak, I don't like to have to watch what I can or cannot say. Normally, I don't want to say anything at all because I find most things spoken by myself quite boring. The stuff I find interesting are, well, not the mundane everyday topics. For example, I find the differences in rain from the East coast and here to be interesting. I find how different people react in an elevator interesting. Now, try talking about that at work. Saying "Excuse me, but do you feel funny in your middle section?" to a girl in an elevator is probably not the best way to start a conversation. I'm psychic like that.

My "friend" has had time to look at the original code and is in awe at how bad it is or was. I tell him I had to make sense of it and make it six times faster. I did make it go six times faster. Of course, it was bound to break. I had confidence in my code. I never did find out if it was my code, or rather the original that worked in a strange way. Whatever the case, that was an event that never came to fruition. For now though, I had my mind clear enough that I could think about code again. So I said thanks and said I'd check back later. I had my meeting to take care of. I don't think he fully understood why I went to see him. At that particular point, I couldn't care less about the messed up code or his damned metal links which I almost slammed back onto his desk in sarcastic angered fashion.

Walking back to my desk, I no longer notice who is walking by. I don't hear the noise of people talking. I tune all of that out. This is a skill I acquired in Toronto. I found it rather difficult at first. I could not tune out. Being a programmer is all about taking in information. But as a programmer, my main skill is actually detecting, or rather putting aside, redundant information. That means tuning out may be more natural than I had previously thought.

I sit down at my desk. My desk is not like the others. Sometimes it's clean. Sometimes it's a mess. But it's always barren. There are only a few books. Usually books I've borrowed and never returned. I don't know why, but not returning books is like a test. The more important the book, the less time it stays on my shelf. So the books on my shelf are usually the most boring and useless ones you can find. At the very least, they are books no one else cares enough to want back. My bookshelf is not a reflection of me, but a reflection of other people's trash. And I revel in this twisted situation that came about all on its own. I wonder how many other people's shelves are likewise obsolete. I always receive frustrated responses as programmers usually don't like obvious questions when I ask if these books are theirs. They usually respond that "they're in my shelf, aren't they?" Do I explain how sad my bookshelf is? No. I don't need books. Once I read them, I don't need them anymore. The only books I need are reference books. Don't get me wrong. I like other books too. But the replay value is low.

Then I look at my desk. I have a pile of used notepads on the left of the monitor and tons of sheets of paper from newer notepads laid out everywhere on the right of my monitor. Every now and then, I clean it off. I like that no one touches my desk here. But it is rather bland. There's nothing else here. My computer is much the same. I have only the basic tools and nothing else. Sure, some of those tools are specialised and expensive, but there aren't any extra and personal tools that I use. There's no favourite setup. The background is likewise black or some shade of grey. All my files are in an organised repository, although certain test projects are tossed into the appropriately named test folder. Everyone has a test, stuff, temp or backup folder. It may as well be the garbage bin as no one ever uses anything in there ever again.

It's not that I'm bland, but rather that I don't like to be too dependant on anything that is likely to change. Jobs come and go. Apartments come and go. Cars (as in ownership) come and go. Sure, they last for a while. But change is hard. For everyone. I've seen people cry and be escorted out. I've seen people do crazy things during changes in their lives, myself included. So when I leave, I leave. You'd never know I was there. I only exist in people's minds. And that's where it matters anyhow. I could liven things up a bit. But really, this is work. And a cubicle. Plus, those other things would annoy me. Unless it was '80s crap. But the '80s is too good for work. I don't want to tarnish the things I like by associating them with work. So my desk stays bland for now.

I take out a fresh notepad. I think I've got dibs on notepads. When I first got here, they only had a few in the supply cabinets. And they had these square rectangle ones for graphing in high school math. Why do people buy these things? Anyways, the ones I got are yellow with green lines through them. I prefer the white ones. But these will do. I've noticed other people go nuts on the sticky notes. I have one pad and I've only use three slips since I've started working here months and months ago. It's like a treasure chest in here. There's staplers, pens, pencils, erasers, liquid paper (speaking of the '80s), mouse pads, a few corporate calendars and a bunch of other stuff. But no one really seems to use real notepads. I can't code without them. I want something real in front of me. I have no idea what others think of all this paper on my desk. They must find it odd. Other desks have calendars, pictures of their family, motivational posters with clever anecdotes, one guy has a fish (yes, alive) and other decorative items. It makes me want to put something up in my cubicle, but I'd probably get annoyed. It's like your background on the desktop. At first, it's fresh. But it soon loses that quality. So anything I like that I put up, I'll end up being fed up. All attempts have so far failed and oddly enough, I find this quite satisfying.

Sitting at my desk, I scribble a few things down for the meeting. I need to speed up some kind database requests by storing information in the request itself. Meaning that repeated requests wouldn't keep asking for the same information over and over. You just store it in the request. If it's in the request, you don't need to bother with a database request which can be expensive. I never quite understood this. I always thought databases were supposed to be fast. But a busy server could probably make use of this. I wrote down words rather than questions. Things like encryption, formatting, keys, available operations needed and stuff like that. It felt rather good and nervous at the same time being asked by another project manager to get a side project done. I had to figure out how this was going to be done with the help of this other team. That's what the meeting was for. The coding was up to me. My worry was that I didn't have enough information to formulate any questions.

I go back into the infernal moving box that is the elevator. This time, I'm not alone. A bunch of us are going for a smoke break. We go out the back. The ground is still wet from the rain, but the sky is clear right now. Smoking is not just a habit. It's a catalyst for socialising. Some people chat about what they're doing this weekend. Others are talking about the rain because some of them are supposed to go on a trip. That brings to mind how I drove to work the other day and my alarm didn't go off. I start telling a few people how I only had 20 minutes to get to a weekly meeting, but it normally takes 35 to 45 minutes to get here. The worst is in town where you have to go through many lights. That day I caught all greens. In Toronto, that's quite an event to go from one side to the other without stopping once. On the highway, I had to cut off quite a few people and drive like a madman. I got to work in 17 minutes and made the meeting.

When I get talking about something I like, I get really enthusiastic. I have no idea if it shows, but in this case I think it did because my conquest of the road drew the attention of others. It's always interesting what topic will take over at a smoke break. Sometimes, nothing will catch on. I'm not sure why. But most of the time, there will be a global discussion that everyone takes part. Everyone adds something to the conversation. Either asking a question or adding their own perspective. In this case, some didn't believe me. Others tried to one-up me. Still others corrected the one-up'ers as to how these other situations were not quite the same achievement. And once you have an argument, well... there's no stopping it. Unfortunately, we were done smoking and went back inside. That discussion would have to be finished another time. That's how smoke break discussions go. The really good ones die off never to be resurrected. It's rather fascinating that the most important points are discussed right away. There'd be no point to bring the topic back up. Yet, we could have continued talking for half an hour more and probably many hours if we had beer and been sitting down.

So now I had to go to the meeting stinking of smoke and having already mustered up my social quota for the day. I don't mind talking to people. It's finding topics that aren't out there and still interesting that's difficult. Right now, the topic itself was already set. But it had no substance. That's what the meeting is for I suppose. I sit down at the oval table and wait for others to take their place.

Of the eight people here, I only recognised three of them. I've just met them the day before. They're the project manager and two main programmers on that project. So I start off by asking what I think most programmers would dread having to say. That I have no clue what I'm doing. I didn't say that out loud, but my question would leave no doubt. Still, I was experienced enough to not care. No one here can say anything. If they do that, I'll know who the insecure one is. Who in their right mind points out the fact that someone else doesn't know something? A lunatic. That's who. Or someone that is trying to divert attention away from them.

My opening question is "What is it you're trying to accomplish with this feature? Why do you need this?" It's amazing what you can find out when you start at the top (or bottom depending on your view). Don't try to claim you know more. Even if you do, you should check anyways. Play dumb on purpose. Start at the basics. I found from answers to my question that much of the information transferred is the same. They simply wanted a way to take the load off the database. Others had different views. They said the information in the message could serve as checks and ease debugging as well as simplifying requests. Whatever the reason, it was clear they basically wanted state instead of rebuilding it every time. I moved on to what kind of information should be stored. That led to specific functions and how these were accessed. One question led to the next. In a very short time, I had everything I needed to write the entire library.

The project manager hadn't said a word since introducing me to everyone. At this point, he looked very pleased at how things were turning out. I said I was done and after the project manager thanked me, we all left the meeting room. The project manager spoke to me on the side and said he was really glad on how I took control of the project and the meeting. He said he originally had no idea how I would be able to put this together as this side project had been sitting there for quite some time with no progress. I guess I wasn't alone in not knowing how this was going to be done. I felt good about both the meeting and at the fact that I wasn't alone in my prior obliviousness.

The coding part was easy. It took four hours. I prolonged it a bit and stretched it to three of four days because it was made clear that it was supposed to take a while. The only change was compression. The messages were too long. This didn't surprise me. I had already asked questions relating to this before. Two hours later I was done (a few weeks later when the team was ready to use it).

Why did it only take four hours? It doesn't matter if you think it was simple or not. But when's the last time you coded up something in four hours with full formatted comments and a document to explain its usage? Doesn't happen every day is what I'm saying. Something went unusually right. And this on a project that I was clueless about what was needed beforehand. Oh sure, I knew they wanted to store information within the message. But I didn't know what format their message was in. I didn't know what compression or encryption mechanism they wanted and especially not how to handle the keys. How is it that certain projects work out so well, yet the majority collapse so badly?

That evening, I get in my car and drive home. I've been down this highway before. I've been on these streets. At the same time, I know that I've never been in this exact scenario before and never been in traffic with these exact drivers before. Sure, I recognise one or two cars along the way. There's always one or two cars that have the same hours and destination as you, or close to it. But it's always slightly different. As I flick my smoke out the window, I change lanes and shift into fifth. I'm from the East coast, so I have a built in instinct to stay next to the orange line. Don't worry, I don't hold up traffic. Back East, you have to drive straight into oncoming traffic in order to pass. Here, they have extra lanes going the same direction. It's child's play.

So I start to think that maybe programming, at some level, is like driving. The situations are different, but you've seen it so many times that you automatically adapt. At the meeting, I've been clueless so many times that I knew what to do. I was still anxious. There's no way to predict something you haven't seen yet. But that's like the first time I came to Toronto. I'd never driven the DVP or the 401, but I used my past experience in situations of the unknown. It's all about information gathering. What do you need? How do you get from here to there? And that's why I started off with a question that leads down a certain road. You start off with a very wide path and narrow it down as you go keeping it focused in the right direction. Knowing when to stop is also important. You never want to go too far. This would lead to you taking on more than you can chew.

As I park my car in an impossibly narrow space, I curse that I don't have a better parking spot. Instead of going into my apartment, I join my friends at a local pub to have a drink. The first one asks how I'm doing. I never know how to answer this if I were going to give an honest answer. There's beer on the way, so I say I'm doing great. I usually don't talk about work, but handling a project is something to be proud of. They ask me what I worked on. And I honestly don't know. I told them a few things about what happened, but what did I work on? I have never seen the other side of the equation. I've never seen the code that uses my library and I never will. So there was trust on both sides. Sometimes, you have to meet halfway. And maybe that's why people get stuck. Maybe that's why projects stall and some people never reach their dreams. I've gone it alone plenty of times, but it's much more exciting discovering that your friends, coworkers or whomever has the missing pieces to the solution. Each side feels like the other saved the day.

I unexpectedly raise my glass and say cheers. Others are a little surprised, but the expressions are soon replaced with big smiles at my display of initiative. We all raise glasses and take a drink. Because in a way, our friends are the missing pieces of our solution that is called life. They meet us halfway as do we for them. And not knowing something is occasionally a good thing. You're not bogged down by the norm. So you take those around you in a fresh and new direction that perhaps wouldn't have happened if you weren't around. And to this day, whenever someone asks me what I'm doing tomorrow, I answer "I don't know." And I like it that way.

ProgressPierre McGuire, Please Shut The Fuck Up

Comments

avatar
Since nobody commented, I'm going to write down things that may help in seeing what my point was before I forget.

In programming, we often want to reduce coupling. To not disturb anything for fear of affecting other parts of the system. The main character is like that. He doesn't have anything in his work environment because he doesn't think he'll be there that long. He doesn't want to disturb anything. He even uses notepads to avoid interfering with the actual code. He comes and goes like the rain basically. Everything revolves around this theme of decoupling. His bookshelf, not trying to find out people's names.

In order to avoid disturbing the status quo, he makes sure to reuse what he knows works no matter how tedious or even if there are better ways. His driving in the fast lane (ie. near the orange line) is something he keeps doing just because he's always done it.

Then he takes on a project where he can't use ANY prior knowledge. He knows nothing about it. Doesn't even know what to ask really. If he had known something about it, he probably would have used what he knows and this may not have been the best solution such as what happened with the code he was discussing with his coworker. His lack of knowledge actually benefits everyone in this case.

So he knows how to find out information. He knows how to get from point A to point B. To do this, he has to interact with as many people as he can. He has to get involved. He has to break his normal pattern and he doesn't like it. We see this when he's having his smoke break too. He doesn't understand why things are so much better in some cases where there's interactions and at other times, disaster happens. He foregoes the joys of interacting with new people a lot (except for smoke breaks) because of the risk of disasters.

In the end, he understands that those who meet you halfway makes things better, but he doesn't get why. He uses those around him to steer himself in new directions because he can't do this alone.

Interactions are what makes things interesting, yet in programming we're told to avoid it. Something's out of whack here. No programmer knows why this is or even talks about it much like the main character in this story. Maybe we should, no?

There were plenty more points I make in the story, but that's enough for now.

By Vorlath, # 19. February 2007, 10:48:46

Write a comment

Comment
(BBcode and HTML is turned off for anonymous user comments.)

Please type this security code : 9603db

Smilies

November 2008
S M T W T F S
October 2008December 2008
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29