Wednesday, April 30, 2014

This is why I go nuts some days


Work du Soleil has found a kindred spirit in Still Drinking.

Repost from: http://stilldrinking.org/programming-sucks

Every friend I have with a job that involves picking up something heavier than a laptop more than twice a week eventually finds a way to slip something like this into conversation: "Bro,1 you don't work hard. I just worked a 4700-hour week digging a tunnel under Mordor with a screwdriver."
They have a point. Mordor sucks, and it's certainly more physically taxing to dig a tunnel than poke at a keyboard unless you're an ant. But, for the sake of the argument, can we agree that stress and insanity are bad things? Awesome. Welcome to programming.

All programming teams are constructed by and of crazy people

Imagine joining an engineering team. You're excited and full of ideas, probably just out of school and a world of clean, beautiful designs, awe-inspiring in their aesthetic unity of purpose, economy, and strength. You start by meeting Mary, project leader for a bridge in a major metropolitan area. Mary introduces you to Fred, after you get through the fifteen security checks installed by Dave because Dave had his sweater stolen off his desk once and Never Again. Fred only works with wood, so you ask why he's involved because this bridge is supposed to allow rush-hour traffic full of cars full of mortal humans to cross a 200-foot drop over rapids. Don't worry, says Mary, Fred's going to handle the walkways. What walkways? Well Fred made a good case for walkways and they're going to add to the bridge's appeal. Of course, they'll have to be built without railings, because there's a strict no railings rule enforced by Phil, who's not an engineer. Nobody's sure what Phil does, but it's definitely full of synergy and has to do with upper management, whom none of the engineers want to deal with so they just let Phil do what he wants. Sara, meanwhile, has found several hemorrhaging-edge paving techniques, and worked them all into the bridge design, so you'll have to build around each one as the bridge progresses, since each one means different underlying support and safety concerns. Tom and Harry have been working together for years, but have an ongoing feud over whether to use metric or imperial measurements, and it's become a case of "whoever got to that part of the design first." This has been such a headache for the people actually screwing things together, they've given up and just forced, hammered, or welded their way through the day with whatever parts were handy. Also, the bridge was designed as a suspension bridge, but nobody actually knew how to build a suspension bridge, so they got halfway through it and then just added extra support columns to keep the thing standing, but they left the suspension cables because they're still sort of holding up parts of the bridge. Nobody knows which parts, but everybody's pretty sure they're important parts. After the introductions are made, you are invited to come up with some new ideas, but you don't have any because you're a propulsion engineer and don't know anything about bridges.
Would you drive across this bridge? No. If it somehow got built, everybody involved would be executed. Yet some version of this dynamic wrote every single program you have ever used, banking software, websites, and a ubiquitously used program that was supposed to protect information on the internet but didn't.

All code is bad

Every programmer occasionally, when nobody's home, turns off the lights, pours a glass of scotch, puts on some light German electronica, and opens up a file on their computer. It's a different file for every programmer. Sometimes they wrote it, sometimes they found it and knew they had to save it. They read over the lines, and weep at their beauty, then the tears turn bitter as they remember the rest of the files and the inevitable collapse of all that is good and true in the world.
This file is Good Code. It has sensible and consistent names for functions and variables. It's concise. It doesn't do anything obviously stupid. It has never had to live in the wild, or answer to a sales team. It does exactly one, mundane, specific thing, and it does it well. It was written by a single person, and never touched by another. It reads like poetry written by someone over thirty.
Every programmer starts out writing some perfect little snowflake like this. Then they're told on Friday they need to have six hundred snowflakes written by Tuesday, so they cheat a bit here and there and maybe copy a few snowflakes and try to stick them together or they have to ask a coworker to work on one who melts it and then all the programmers' snowflakes get dumped together in some inscrutable shape and somebody leans a Picasso on it because nobody wants to see the cat urine soaking into all your broken snowflakes melting in the light of day. Next week, everybody shovels more snow on it to keep the Picasso from falling over.
There's a theory that you can cure this by following standards, except there are more "standards" than there are things computers can actually do, and these standards are all variously improved and maligned by the personal preferences of the people coding them, so no collection of code has ever made it into the real world without doing a few dozen identical things a few dozen not even remotely similar ways. The first few weeks of any job are just figuring out how a program works even if you're familiar with every single language, framework, and standard that's involved, because standards are unicorns.

There will always be darkness

I spent a few years growing up with a closet in my bedroom. The closet had an odd design. It looked normal at first, then you walked in to do closet things, and discovered that the wall on your right gave way to an alcove, making for a handy little shelf. Then you looked up, and the wall at the back of the alcove gave way again, into a crawlspace of utter nothingness, where no light could fall and which you immediately identified as the daytime retreat for every ravenous monster you kept at bay with flashlights and stuffed animals each night.
This is what it is to learn programming. You get to know your useful tools, then you look around, and there are some handy new tools nearby and those tools show you the bottomless horror that was always right next to your bed.
For example, say you're an average web developer. You're familiar with a dozen programming languages, tons of helpful libraries, standards, protocols, what have you. You still have to learn more at the rate of about one a week, and remember to check the hundreds of things you know to see if they've been updated or broken and make sure they all still work together and that nobody fixed the bug in one of them that you exploited to do something you thought was really clever one weekend when you were drunk. You're all up to date, so that's cool, then everything breaks.
"Double you tee eff?" you say, and start hunting for the problem. You discover that one day, some idiot decided that since another idiot decided that 1/0 should equal infinity, they could just use that as a shorthand for "Infinity" when simplifying their code. Then a non-idiot rightly decided that this was idiotic, which is what the original idiot should have decided, but since he didn't, the non-idiot decided to be a dick and make this a failing error in his new compiler. Then he decided he wasn't going to tell anyone that this was an error, because he's a dick, and now all your snowflakes are urine and you can't even find the cat.
You are an expert in all these technologies, and that's a good thing, because that expertise let you spend only six hours figuring out what went wrong, as opposed to losing your job. You now have one extra little fact to tuck away in the millions of little facts you have to memorize because so many of the programs you depend on are written by dicks and idiots.
And that's just in your own chosen field, which represents such a tiny fraction of all the things there are to know in computer science you might as well never have learned anything at all. Not a single living person knows how everything in your five-year-old MacBook actually works. Why do we tell you to turn it off and on again? Because we don't have the slightest clue what's wrong with it, and it's really easy to induce coma in computers and have their built-in team of automatic doctors try to figure it out for us. The only reason coders' computers work better than non-coders' computers is coders know computers are schizophrenic little children with auto-immune diseases and we don't beat them when they're bad.

A lot of work is done on the internet and the internet is its own special hellscape

Remember that stuff about crazy people and bad code? The internet is that except it's literally a billion times worse. Websites that are glorified shopping carts with maybe three dynamic pages are maintained by teams of people around the clock, because the truth is everything is breaking all the time, everywhere, for everyone. Right now someone who works for Facebook is getting tens of thousands of error messages and frantically trying to find the problem before the whole charade collapses. There's a team at a Google office that hasn't slept in three days. Somewhere there's a database programmer surrounded by empty Mountain Dew bottles whose husband thinks she's dead. And if these people stop, the world burns. Most people don't even know what sysadmins do, but trust me, if they all took a lunch break at the same time they wouldn't make it to the deli before you ran out of bullets protecting your canned goods from roving bands of mutants.
You can't restart the internet. Trillions of dollars depend on a rickety cobweb of unofficial agreements and "good enough for now" code with comments like "TODO: FIX THIS IT'S A REALLY DANGEROUS HACK BUT I DON'T KNOW WHAT'S WRONG" that were written ten years ago. I haven't even mentioned the legions of people attacking various parts of the internet for espionage and profit or because they're bored. Ever heard of 4chan? 4chan might destroy your life and business because they decided they didn't like you for an afternoon, and we don't even worry about 4chan because another nuke doesn't make that much difference in a nuclear winter.
On the internet, it's okay to say, "You know, this kind of works some of the time if you're using the right technology," and BAM! it's part of the internet now. Anybody with a couple of hundred dollars and a computer can snag a little bit of the internet and put up whatever awful chunks of hack code they want and then attach their little bit to a bunch of big bits and everything gets a little bit worse. Even the good coders don't bother to learn the arcane specifications outlined by the organizations people set up to implement some unicorns, so everybody spends half their time coping with the fact that nothing matches anything or makes any sense and might break at any time and we just try to cover it up and hope no one notices.
Here are the secret rules of the internet: five minutes after you open a web browser for the first time, a kid in Russia has your social security number. Did you sign up for something? A computer at the NSA now automatically tracks your physical location for the rest of your life. Sent an email? Your email address just went up on a billboard in Nigeria.
These things aren't true because we don't care and don't try to stop them, they're true because everything is broken because there's no good code and everybody's just trying to keep it running. That's your job if you work with the internet: hoping the last thing you wrote is good enough to survive for a few hours so you can eat dinner and catch a nap.

We didn't start out crazy, we're being driven crazy


ERROR: Attempted to parse HTML with regular expression; system returned Cthulhu.

Funny, right? No? How about this exchange:

"Is that called arrayReverse?"
"s/camel/_/"
"Cool thanks."

Wasn't that guy helpful? With the camel? Doesn't that seem like an appropriate response? No? Good. You can still find Jesus. You have not yet spent so much of your life reading code that you begin to talk in it. The human brain isn't particularly good at basic logic and now there's a whole career in doing nothing but really, really complex logic. Vast chains of abstract conditions and requirements have to be picked through to discover things like missing commas. Doing this all day leaves you in a state of mild aphasia as you look at people's faces while they're speaking and you don't know they've finished because there's no semicolon. You immerse yourself in a world of total meaninglessness where all that matters is a little series of numbers went into a giant labyrinth of symbols and a different series of numbers or a picture of a kitten came out the other end.
The destructive impact on the brain is demonstrated by the programming languages people write. This is a program:

#include <iostream>

int main( int argc, char** argv ) {
    std::cout << "Hello World!" << std::endl;
    return 0;
}

That program does exactly the same thing as this program:

`r```````````.H.e.l.l.o. .w.o.r.l.di

And this program:

>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.[-]
>++++++++[<++++>-] <.>+++++++++++[<++++++++>-]<-.--------.+++
.------.--------.[-]>++++++++[<++++>- ]<+.[-]++++++++++.

And this one:

Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook.
Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook?
Ook! Ook! Ook? Ook! Ook? Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook.
Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.
Ook? Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook. Ook! Ook. Ook! Ook? Ook! Ook! Ook? Ook!
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook.

And once somebody wrote a programming language that let somebody else write this:

#:: ::-| ::-| .-. :||-:: 0-| .-| ::||-| .:|-. :||
open(Q,$0);while(){if(/^#(.*)$/){for(split('-',$1)){$q=0;for(split){s/|
/:.:/xg;s/:/../g;$Q=$_?length:$_;$q+=$q?$Q:$Q*20;}print chr($q);}}}print"n";
#.: ::||-| .||-| :|||-| ::||-| ||-:: :|||-| .:|

According to the author, that program is "two lines of code that parse two lines of embedded comments in the code to read the Mayan numbers representing the individual ASCII characters that make up the magazine title, rendered in 90-degree rotated ASCII art."
That program won a contest, because of course it did. Do you want to live in a world like this? No. This is a world of where you can smoke a pack a day and nobody even questions it. "Of course he smokes a pack a day, who wouldn't?" Eventually every programmer wakes up and before they're fully conscious they see their whole world and every relationship in it as chunks of code, and they trade stories about it as if sleepiness triggering acid trips is a normal thing that happens to people. This is a world where people eschew sex to write a programming language for orangutans. All programmers are forcing their brains to do things brains were never meant to do in a situation they can never make better, ten to fifteen hours a day, five to seven days a week, and every one of them is slowly going mad.

</rant>
So no, I'm not required to be able to lift objects weighing up to fifty pounds. I traded that for the opportunity to trim Satan's pubic hair while he dines out of my open skull so a few bits of the internet will continue to work for a few more days.

Wednesday, March 12, 2014

Lives of the Smitten and Clueless Pt. IV: Traits of a Good Leader


 "I got to work with lighting people, who made me look better than I really am. I got to work with audio people who make me sound better than I really do. And I got to work with producers and directors, and just all kinds of talent people. They made me look a lot smarter than I really am."

Many people focused on the teary-eyed reflection that Jay Leno made last night, but, emotion aside, there is some truth about good leadership in his words.  A truly good leader makes his team strong by building on the strengths of his team, not by showing how well he can belittling his subordinates into submission. This is almost a polar opposite from the tactic you see in the bully and supporting toadies relationship.  Instead, what we have here is a functional family of workers, that one can almost liken to a happy shop of elves all doing their best to help Santa with his big job. 

This relationship is devoid of manipulation and jealousy.  Where, before, we had offers of favors and threats of punishment, we have now, a respected captain who knows how to site abilities in people and organize those abilities appropriately into a functioning body.  He also has a good trust in his subordinates.  Kind of like the trust that Captain Kirk displayed for Mr. Spock, Dr. McCoy, and Lieutenant Uhura.  In turn, Captain Kirk gets loyalty, respect, willingness to expend extra effort to achieve a particular goal, and at last, job security!

Folks, when you are disappointed with your lot in life, you should never look around, or down.  You need to look up.  You need to look up in order to see who's pissing on you.  It may be that you can't do anything to change it but leave your job.  If you aren't in a position to leave your job, then at least LEARN something from the situation and quite possibly avoid working yourself into the grave. Learning how to spot the traits of both poor leadership and good leadership will help you make better decisions about your career.  

Some last thoughts are...Leadership is always experienced through the employee, not the other way around.  Poor leaders don't just fail to lead, they experience failure that they blame on others, they cause traffic jams of information and process, and in the worst cases they cause harm by trying to get revenge or punish their reports.  The same can also be said about bosses that dole out gifts and favors above and beyond nominal. You better believe that boss is going to ask you for something later and any employee who accepts poor leadership by "doing extra work" to help out the boss is only contributing to the problem. 

One friend and co-worker I know in my industry once got a Chanel handbag from her boss.  She always had a disgusted look on her face when she carried it.  When I asked her why she looked so disappointed about her gift, she just said, "I can't afford it."  

"But it's free!" I said.  

She simply responded, "I don't want to owe her anything I can't afford to do...therefore, I can't afford it."  

What a sticky situation to be in. It doesn't sound like her boss trusts her in the first place...which is certainly not a sign of a good leader.





Monday, November 11, 2013

Lives of the Smitten and Clueless Pt. III : The Way a Bully Works

Databases are like old people.  They contain a wealth of information.  They get slow, sick and become obsolete.  So, if we think of a manager of people who care for old people, a nursing home administrator of sorts, it is a little easier to understand this person's job would be like. For example, a nursing home administrator manages highly smart, technical people in the appearance of Nurses, Physical Therapists, and Dietitian's.  In much the same way, A DBA Manager is responsible for managing highly technical people in IT that take great care of sensitive customers.  A DBA Manager is also responsible for working with managers of other highly technical teams within the organization.  Just as you wouldn't hire a sycophantic ass-kisser to manage a nursing staff, you shouldn't do this with folks who manage your DBA's.


But it happened to me.  I've been asking myself, "Why would you want some ass-kissing novice to come in and treat your staff like a peanut gallery?"  I finally came up with the answer, because all bullies need toadies.  Yes, the most successful bullies have toadies.


Having a toady or two means you've freakin' ARRIVED!  After all, don't you need someone to hold the other kids down while you beat them up?  Beat-downs are always more effective when accompanied by a small army, aren't they? What about rushing through internal decisions so that your buddies at your previous company get a large sales contract from your new employer?  NOW yer talkin'!

So what exactly is a toady?  No, not one of my favorite Texas bands. I mean ass-kissers with no sense of mercy.  I rather like the way Google defines it:

toad·y  

/ˈtōdē/
Noun
A person who behaves obsequiously to someone important.

So how do you know if your leadership has hired a toady?

  1. Does the hired never challenge the boss on strategic issues, but liberally compliments the boss instead?
  2. Does the hired do personal favors for the boss?
  3. Do people often say of the hired "How did she get hired here?"
  4. Is the hired driven by one of the following motivations?
    • ambition
    • insecurity
    • incompetency
Did you know that new bosses often troll for toadies?  Have you ever been asked to be the one to fire someone, or "keep an eye on that guy"?  You may have been being surveyed (unbeknownst to you) for being the next wing man for a corporate bad guy.  Once, my crappy she-manager asked me to tell her the names of all the people who were causing me trouble at work.  Then, when I refused to do it, she tried to get me fired with my year-end review.  Funny how my 10 good years at a company will make a hater's crappy attempt look like a lie.  Because that's what it all was...a lie. In the end, no matter what kind of toady your crappy leadership is trolling for, the result is the same:  failure of progress in the organization.


Why? Because you can't get work done between departmental teams with someone attached to your ASS.  If your toady's one and only skill is ass-kissing, she'll soon learn that she can't kiss all the asses with her head up yours.  You need to be able to at least kiss most of the asses to make progress in an organization, or at least make others feel like you're kissing their ass.

Friday, June 28, 2013

Prediction: 6 months or less until employees start renting out spots


If there's one thing I've learned through experiencing hard times, it is to never ask, "What's next?"

If you want to know why, it's because sometimes you find out. I never imagined the drastic steps my workplace would take when the hotel next door decided they would not allow our overflow parking anymore. I don't think you will either, so let me just show you a picture.


I think the steps to create these extra spaces consisted of the following:
1) mow the grass next to the corn field
2) spray the white lines to mark the spots
3) clean off the messed up lines
4) re-spray the lines in the correct spots
5) build a ramp using gravel


Don't forget to go to Wal-mart and get some reflectors on a stick...

Wednesday, June 12, 2013

Celebrations

It was a year ago this month that my life started getting a lot better here. Thank the Gawdz.

Thursday, February 28, 2013

Lives of the Smitten and Clueless - Pt II

Help!  There's a toad in my database!

(DBA's will get that joke)


Databases are like old people.  They contain a wealth of information.  They get slow, sick and become obsolete.  So, if we think of a manager of people who care for old people, a nursing home administrator of sorts, it is a little easier to understand this person's job would be like. For example, a nursing home administrator manages highly smart, technical people in the appearance of Nurses, Physical Therapists, and Dieticians.  In much the same way, A DBA Manager is responsible for managing highly technical people in IT that take great care of sensitive customers.  A DBA Manager is also responsible for working with managers of other highly technical teams within the organization.  Just as you wouldn't hire a sycophantic ass-kisser to manage a nursing staff, you shouldn't do this with folks who manage your DBA's.

But it happened to me.  I've been asking myself, "Why would you want some ass-kissing novice to come in and treat your staff like a peanut gallery?"  I finally came up with the answer, because all bullies need toadies.  Yes, the most successful bullies have toadies.

Having a toady or two means you've freakin ARRIVED!  After all, don't you need someone to hold the other kids down while you beat them up?  Beat-downs are always more effective when accompanied by a small army, aren't they? What about rushing through internal decisions so that your buddies at your previous company get a large sales contract from your new employer?  NOW yer talkin'!

So what exactly is a toady?  I like the way Google defines it:

toad·y  

/ˈtōdē/
Noun
A person who behaves obsequiously to someone important.
So how do you know if your leadership has hired a toady?
  1. Does the hired never challenge the boss on strategic issues, but liberally compliments the boss instead?
  2. Does the hired do personal favors for the boss?
  3. Do people often say of the hired "How did she get hired here?"
  4. Is the hired driven by one of the following motivations?
    • ambition
    • insecurity
    • incompetency
No matter what kind of toady your crappy leadership is trolling for, the result is the same:  failure of progress in the organization.

Why? Because you can't get work done between departmental teams with someone attached to your ASS.  If your toady's one and only skill is ass-kissing, she'll soon learn that she can't kiss all the asses with her head up yours.  You need to be able to at least kiss most of the asses to make progress in an organization, or at least make others feel like you're kissing their ass.

Bleh, I feel dirty now.

Thursday, January 3, 2013

Lives of the Smitten and Clueless - Pt I

I've always believed there are 2 types of managers:
  1. Those who hire people who know something they don't, then refer to their reports to help making important decisions
  2. Those who hire people they believe to be "lesser than" themselves then proceed to bully, micromanage, and back-talk their employees into following in line with their desires
Manager type 2 is most often what fails an organization on multiple levels and drives employees to quit. Manager type 2 is what I just survived. 

It all started out very innocuously.  My company's IT department was going through multiple reorganizations within the department. I remember the crazy, willy-nilly assignment of managers like an old cartoon joke where a cat would shake a stick with a mouse on the end then two mice would appear, then three.  Managers were popping up everywhere.

Then after the managers were picked, the choosing up of sides would begin! It was funny to watch, kind of like when kids pick teams in gym class.  Everyone runs to the team they want to work for.  My team ran under another organizational umbrella and under the guidance of a man, we'll call Mr. Smith.

In all honesty, we (the talent) were all getting pretty sick of having our managers' positions changed every 2 years. It gets very hard to complete long-term projects in an organization when your managers keep changing.  The last major project we completed took 3 years from start to finish. So...what you would want to do here, is look for a type 1 kind of manager.  Well, not unless  you are Mr. Smith...and your new girlfriend needs a job.

Oh yes my lovelies!  Get ready for Lives of the Smitten and Clueless next on Work du Soleil!!