This is a true story…or at least this is how I remember it when it was told me about 30 years ago.
Two small-town cops walk up to the front-door of a house where they’re going to attempt to serve a misdemeanor warrant.
(The cop telling the story explained to me that a misdemeanor is a “piddly-ass” warrant – it’s usually for minor infractions and seldom requires anything more than a minimal cash bond. This, as opposed to felony warrant for which, now-a-days, they’ll call out the SWAT team to serve it, on a Friday, where you’ll sit with a no-bond hold until sometime Monday when you appear before a judge who will set your bond. Misdemeanor: no big deal. Felony: big deal. Ok?)
One of the cops (the one telling me this story) is the “veteran” — he’s training the other cop, the “rookie” who was fresh from cop-school. Just as in every movie, the veteran had instructed the rookie to forget everything they taught him in rookie-school because this is how it’s done on the streets.
So, as they’re approaching the front door, the veteran cop is watching the rookie cop, evaluating him for mistakes, gigs, so that he can school him on being a better cop, dig? It’s a routine call and it’s a training mission. The veteran tells the rookie that he’s “handling” the call — they’re to approach the house, determine if the person named on the warrant is within the house and, if so, serve the warrant.
The veteran cop hangs back as they approach the front door. He nods in approval as the rookie approaches and takes a position at the side of the door following safety protocol, while he knocks on the door with his flashlight/beatstick.
The rookie knocks again, louder. Waits a few seconds then glances at the veteran. The vet nods to the rookie.
The rookie beats the hell out of the door and yells, at the same time: POLICE.
The veteran is starting to relax while the rookie is getting spun-up as he *knows* someone has to be inside the house, laughing at him, laughing at his auth-or-a-tie. He creams the door again with the light, screaming: POLICE. OPEN THE DOOR OR ELSE!
The veteran looks up the rookie, a smile starting to crinkle his eyes. He says: Or else what, rookie?
Non-plussed the rookie stands there, mouth open, no answer forthcoming.
The veteran is relentless: Or else what, rook? It’s a misdemeanor warrant. Or else what?
The rookie, like the proverbial deer in the headlights, just stares at the veteran. Finally he shrugs a small I-unno back to the veteran.
The veteran starts to laugh: Or else what, rook? Or else we leave and go back to the station? He shakes his head. Come on rookie. Let’s go; no one’s home.
I’m telling this story because the one kernel of truth in this story is the advice about “forget everything you ever learned in the academy”… I believe it to be (a) advice common to pretty much every profession requiring training, and (b) valid in that it represents the difference between practical and theoretical.
I’m coming to the point, so bear with me please.
Theoretical is when you’re taught that the Software-Development-Life-Cycle is a process of which coding actually takes between 15-20% of the total effort. Practical is that seldom are you given a decent spec to work off of, often time you’re cramming features into product simply because some sales dweeb,who can’t even set the gps in his beemer, told a customer “oh, yah, it does that too” when demo’ing your product and god help you if you risk his commission over something as trivial as a missing feature even if it wasn’t in what you laughingly refer to as the “spec”.
Theoretical is refining your code in iterative processes, performing code reviews with well-mannered engineers, and getting polite notices from Q/A about the latest “opportunity for improvement”. Reality is the “if it compiles, ship-it!” work-ethic. Spending massive amounts of time at work trying to get the software to limp out the door on it’s own without patching the patch that patched the hotfix for the patch. Product Managers balancing staggering workloads under the euphemism of a “sprint” while you watch your family age courtesy of the updated photographs your wife emails to you every Christmas, and your boss informing you that if you don’t come in this weekend to work, perhaps a start-up environment isn’t for you.
Theoretical is getting paid vacations as down-time, off-time, time actually away from the office. A complete and total absence of a work-presence. Reality is being on-call 24x7x365 and, if you’re lucky enough to get a vacation approved, it’s never in a chunk of time long enough to do anything other than spend “free” time imprisoned with either in-laws or the strangers you think are your children. To you, “vacation” is the week of Thanksgiving and the two weeks between Christmas and New Years when all the sales/marketing dweebs are suntanning in Aruba, your boss is at home gorging on eggnog and fruitcake, and the office is blessedly quiet enough to where you can almost get caught-up on your code-load because you’re not wasting half your work day in pointless meetings.
Theoretical is all your projects that you were going to develop in your “off time”, all of the open-source projects you planned on making substantial contributions to gain international recognition, and the agony of having to pare your resume down to three pages because of your efforts in on-going self-directed research. Hah. The reality is that the great side project you’ve dreamed about your entire career is abandoned on a 3 1/2″ floppy somewhere in a cardboard box in your packed-full-with-everything-but-a-car garage.
Once you leave the ivy-covered towers of academia, the world is waiting to poke you smack-dab in the eye with the reality finger. Elegant code isn’t the priority anymore nor are esoteric algorithms, obscure architecture theorems, or theoretical models. What’s important is that you’ve built the the product, to spec, within the allocated time frame. Everything, and by this I mean, well, everything, else is secondary. And, in the real world, secondary never gets bandwidth.
Because the second you’ve completed your current project, the very minute, you’re already racing to catch-up with the next project you’ve been assigned to, several weeks ago, but haven’t had the bandwidth (yet) to fully engage so, out of the gate, you’re behind. Within a few days, your short-term memory will have purged your previous project from it’s banks, replacing it with your current crisis-code. Maintenance developers coming to you for guidance and hints walk away frustrated because you weren’t on your last project long enough to dump the fine points into long-term memory,or even electronic documentation. Maybe you threw a few comments into your code but those, too, are probably obsolete. Even your own scribbled notes you cribbed while developing the product look like someone else’s writing. In another language.
Sales and Marketing folks come back from a leisurely client lunch, belching cocktails and talking about their next golf outing while you’re digging melted cheese from your microwaved hot-pocket out from between the keys of your keyboard. The next time you look up from your coding jag, it’s because the janitor has startled your while reaching for your full (of crap-food wrappers and amazon packing) trashcan and you realize that, once again, you’re headed for another all-nighter.
So, the next time I go on a job interview, and some smarmy, fresh-out-of-college twenty-something manager asks me about “design patterns”, don’t be surprised when I get up and walk out on you.
See, I’m a working software engineer that lives in the real-world. My only concern is the monetization of my product. I know that the only way I’m going to retire early is if my product becomes the NEXT BIG THING. I work at a start-up — my stock is pretty much going to be worthless because it’s been so heavily watered down through seed investor funding. And I have no expectations of a stock based pay-day. Not in this economy. You’re good at match — you figure out the odds of being the next Facebook, Google, or Zynga.
My only chance to take that beach-front retirement package is through the executive exit-plan for the company. See, I don’t want to become one of the nameless horde working at Zynga, Facebook or Google. I’m here to contribute heavily to the success of the product; my opinions and my work matters at every level of my involvement and if I were to suddenly leave the company, turmoil would follow in my wake. I am not an afterthought represented by the CC: tag line in a product email. I am in the To: block always.
If you think design patterns, O(N) search algorithms are important enough to ask as interview questions, then I don’t want to work for you because I don’t feel that you have a grasp of what’s important.
The bottom line is the bottom line. It’s as simple as that. If you’re not focused on the monetization, the promotion, the saturation, of my product, in the ethersphere, then you’re only in my way.
I’m a software engineer in the real world.