« Remembering The Future | Main | Free software you should install on your Windows PC »
December 5, 2012
A slow descent into hell
In the morning, I ride my bike into work in the rain and park in the alley when that pale worm threatened I should never park again.
At work, coffee flows like a river from machines imported from Italy, into a coffee cup the size of a small battleship. They gave me this Golden Gate National Park mug when I got here. "Here. You'll need this." I should have seen this coming. I should have run the other way. Too late now.
I wonder if this is how my father felt as he began his slow descent into hell, hoping the river would rise, praying for rain. But when it didn't come, finally crumbling under the stress, tumbling forward into a downward spiral. Collapsing into something less that a person fit to be walking around unsupervised.
Everything goes onto the desk. Wallet. Keys. iPhone.
There is a deadline. This has to work by Friday. It's not possible, of course. But the longest journey begins with a single step. Break the problem down into a series of smaller problems.
The trick here is not to panic. Not to break and run. You've got to face this nightmare.
Everything ever learned now is brought to bear. Code the way you've always coded. Don't go into a full-scale panic. But don't waste any time either. This is the balancing act. This is the tight-wire we're on. Go too fast, and you'll make a mistake. Accidentally delete the program, or lose days worth of work. Go too slow, and you won't make the deadline.
You want to write a program that's efficient, but well documented, and easy to debug and maintain. So that when the next guy down the road is looking at it, he won't be scratching his head trying to figure out what you're doing every step of the way.
You want to write a program that people will weep when they see it and say "OMG this is the best programmer ever." Not something that they'll curse over beers alone at night and send emails to the fingerhunters who hunt down bad programmers and remove their index fingers as a warning to all future employers - "This person has no business behind a keyboard." So they'll have to go to every interview wearing gloves, but the managers will catch on. Instead of asking for references, they'll just ask the candidate to kindly remove their gloves.
Oh. And I've got out-of-town-visitors in town tonight.
But last night, as I lay in bed, spinning this nightmare in my head like cotton-candy inside a machine, I had a vision. If I can get the 20,30, and 40 records working today for all employees (those that have elected coverage and those that have termed coverage), then that gives me tomorrow to do the dependents.
So that's my dream for today. 20,30,40 for both Elected and Termed benefits. Pray. Just pray.
By 12:30, I have the '20' Records working and am starting on the '30' Records. A message pops up on my monitor. "It's feeding time. 11C. Wear shoes."
Like having some sandwiches rolled in on a cart and some cans of Diet Coke is so special I'd rush breathlessly into a room full of shiny thin people wearing suits. I'd rather peel my skin off with a paring knife and roll in a wading pull full of turpentine.
Now, you pull out all of the tricks you've learned over the years. You learn not to type things. Cut and paste. Not only is it easier, but it prevents typos. This is huge when you're in a time crunch.
Code. Test. Debug. Code. Test. Debug.
Everything is backed up. This is something you learn along the way. Copies of copies of copies. Have a plan. Have a backup plan. Have a plan in case the backup plan fails.
All of the code has to line up. It has to look pretty. It must be tabbed and spaced methodically. Technically, it will work now matter how haphazardly you slap it in there, but if you're organized and methodical, you'll make less mistakes, and the mistakes you do make will be easier to spot.
The key to staying sane is to being with the underlying belief that the problem you're facing is solvable. There is a solution. The task at hand can be accomplished. Any time spent complaining about the tools or the requirements is all just wasted effort. You have to create your own reality. Have to believe that the problem can solved.
Once you believe the goal is attainable, you start by breaking the problem down into smaller and smaller pieces until you get something that you can do. A program that you can sit down, execute, test, and review the results. Then, from this, you build. Keep adding complexity until the program accomplishes everything it's supposed to do.
But you have to believe it can be done before you start, or there's no point in starting.
And the odd thing is that, it doesn't matter what you believe. If you believe you can do it, then you're right. And if you believe you can't do it, then you're right also. And we carry this brush around with us and create our own reality as we go. We paint the world as we see it. We create our own reality and carry it around with us like luggage.
Delfina
I've always imagined an incredibly upscale restaurant where the hostess greets you with "How many are in your party". They bring you a plate of warm olives with the pits still in them and you eat on shiny plates. And you drink expensive wine from all over the world and every time you order a new bottle, they bring out a new set of wine glasses because those last wine glasses just wouldn't possibly do for this type of wine, silly.
In any event, one wall of this restaurant is an enormous glass wall about 11 inches thick and, on the other side of this glass, all sorts of mayhem is unfolding. Horribly deformed creatures beg for scraps of food on all fours, fight and squabble amongst themselves.
The idea is a complete collision of cultures. The seediest area of town meets the nicest area of town. I've never really know how to structure this properly though. I thought about building this place on the Berlin Wall, or along the DMZ on the border of Best Korea.
But Delfina is about as close to this nightmarish vision as I've ever seen in real life. Basically, out in the street, people are staggering through the night, homeless, deformed, and crippled.
And we're stepping out of the restaurant saying, "man those olives were out of this world"
The Enemy At the Gate
The enemy's at the gate and you fall back. This is when you pull out your most trusted weapons. Nothing left to chance here. Now, everything counts from here on out. There can be no missteps. Now, it's going to be a tooth-and-knuckle fight.
Everything counts now. Nothing else matters. This is very real suddenly. Every trick you've ever learned comes to bear. You don't have to explain it to anyone. Most people would never understand the argument. Or wouldn't agree with your conclusions even if they understand the argument. But that doesn't matter. You don't have to convince anyone else. You don't have to explain it. There's no justification. The proof is in the pudding. You have to make this thing work. By tomorrow. We don't care how you get it done. Just get it done.
My back is against the wall.
I pull it all down into SQL and do my development there. If you're writing SQL, you put it into the SQL editor and code it there. Only once it works do you try to move it into an SQR or an App Engine. All of these little lessons learned over the years matter now. This is this.
And now, a small earthquake at 11:45 a.m. Very small. But my monitor rocking slightly. And another one a few minutes later. This is all. Just a small earthquake. No reason to stop coding. Keep coding.
These tables don't feel as familiar to me as they ought to. Sort of the same way I get that nagging feeling when I drive to the airport every week, but always get confused about where the airport exit is. I shouldn't have any confusion about this. I take the same route every week for the last 2 years. But somehow, what should be very familiar seems somewhat foreign, and this concerns me of course. There is that.
I look at these tables and I tell myself, "well, I haven't worked with these tables in a while, so that's why I don't remember them as well as I might". And it's true, there are thousands upon thousands of tables. This is true. But I don't like the feeling of sitting here and playing with my little friends...these tables...but not knowing their names or what's in them really. It's frustrating. Confusing. But, it is what it is. And I've got a deadline. So this all gets pushed away into the dusty corners of the mind. Focus on the task at hand. Break the problem down into smaller and smaller segments until it is solvable. Code. Test. Debug. Code. Test. Debug.
The Mayor of San Francisco
I should mention, for a moment, my friend Rico. Rico is a friend of mine that lives in North Beach. He's the guy that, when I'm out riding wheelies drunk in the rain, calls out "HEYYYY!!!!!!" as I ride by. So that I circle back to see what's going on. And when I ride by again, he yells out again "HEY!!!".
So that you have to stop and have a drink with him. Now, everywhere we go, Rico is ALWAYS greeting people he knows. I used to call him the Mayor of North Beach, because he knows everyone in North Beach. But then, I run into him in other neighbors of the city, and the story is always the same. He's always surrounded by friends, high-fiving people, fist-bumping friends. He appears to live without a care in the world, and have no discernible enemies. Which is unusual, in my experience.
Now, it's true that Rico has lived here his whole life. That's part of it. But it's only a small piece of the puzzle that is Rico. Plenty of people have lived here for that same amount of time and don't know their next-door neighbors.
Now, another part of it is that, wherever he goes, he's actively looking for people that he knows. I've seen him do this. We were down on Van Ness and Sutter the other night and walking through this mob of people and he'd shout out at people as they passed and they'd see him, stop, and turn around and come back and greet him like a long, lost family member. Like the prodigal son.
But there is more to it also still. More than the fact that he's lived here his whole life, and that he's constantly actively scanning the crowds for the faces of people that he knows. More than these two pieces. These are two pieces of the puzzle that is Rico.
These two, in and of themselves, are merely artifacts that can be easily discounted and/or dismissed, and rightfully so. We'll put these fragments aside for now. We'll put them in this little depression glass blue jar here on the coffee table.
The thing that's interesting about Rico is that he's always super glad to see you and never gets depressed and he's genuinely interested in and excited by everyone that he talks to. He creates this reality and carries it with him like a wave. And his excitement is contagious. I'm always glad to see him because he's glad to see me, and so it goes.
I mean, I meet people when I go out. He introduces me to people. But I think "Fuck them. Who are they? I don't know and I don't care." But not Rico. He sees deeper in the stone than I can chisel. And he brings out something in each person so that, whenever they see him, they're glad as hell to see him. But when they see me, they don't get excited obviously. And I watch Rico and I study him like a social experiment. It really makes me see that we really do create our own little reality and carry it around with us. All the world's indeed a stage.
The Spider's Web
Writing a program is sort of like a spider weaving it's web. If you watched the spider starting out, you'd have no idea what it was doing, initially. If you'd never seen a web before, then you'd probably wonder what it was doing for some time. Then, once it became apparent what his plan was, you'd sit back and start second guessing how long it would take. Once he finished, you'd wonder aloud whether any bugs ever come this ways anyhow. Finally, once a bug stumbled into the web, you'd complain that he'd break out at any minute. But then, once the spider was satiated, you'd sit back and think about it.
How does a spider know how to make a web? How can something the size of a penny have a brain that allows him to build a web out of thin air, trap an insect, and eat it? How does he know to build a web?
And this is sort of where I am. Connecting the little dots along the web. Solving one problem at a time. I may or may not make my deadline. But I'm trying as hard as I can. Solving one little problem at a time, and moving forward. I'm building my web.
At 2:00 a.m.
At 2:00 a.m., after you've been coding all day, you can convince yourself of anything. Programming is pure logic. If this, then that. It follows. It's all there is. But if you make an incorrect assumption, then your logic can lead you down a blind hole. You can go spiraling off into a galaxy of confusion in a hurry.
Nothing makes sense at 2:00 a.m. Nothing works. You couldn't get a pencil to work after you've been coding for 12 hours straight. Gravity ceases to function. Time slows to a crawl and you're just sitting there, zombie like, behind the monitor. If you were driving a car, you'd crash right about now.
Wednesday
I hear the garbage truck outside. My garage is full of garbage. Not because the garbage trucks don't play that little musical tune that they play when they drive through the streets of Cuzco. But because I'm never here when the garbage man cometh.
Every bug report starts with a full-scale panic. An adrenaline surge. A wave of fear comes over me. I'm not smart enough to figure this out. I'm too old. Too absent-minded. Too something...to figure it out.
I imagine myself wander around on Market Street, begging for change near the BART entrances with a kitten or a dog in a sweater. I'll make one of those "Human Kindness Testing in Progress" and read Tolstoy by the subway entrance.
But then, inevitably, I put displays into the program and eventually hunt down the root cause of the problem, albeit slowly. And then, when at last I do fine the root cause of the problem, a new wave of emotion sweeps over me. Joy. Elation. I'm smart enough to get through another day. And I wonder if I wouldn't rather be reading Tolstoy with a baby kitten in SF anyway.
Posted by Rob Kiser on December 5, 2012 at 12:59 PM
Comments
Very well said...can so relate.
Posted by: Rob on December 18, 2012 at 11:11 AM