Programmers Are People Too

Have you ever had five or six things that you needed to do in your life?  Like perhaps you are in need of (1) Getting a Job, (2) Cleaning Your Garage, (3) Alphabetizing your CD collection, (4) Doing the Laundry, and (5) Calling your parents.  Arguably, of that list, getting a job is probably the most important (although, calling your parents might be at the top of that list depending on how long it has been… so, have you called your parents lately?  No?  I’ll wait…  okay, let’s continue), however, getting a job can be a big process which can be broken down into smaller tasks, and is least likely to be over with quickly.  You might, if this were your list, spend an hour circling ads in the paper, making a few calls and maybe emailing off a couple of resumes, and while the task of getting a job is not complete, you’d likely move on to something else.  Especially if this is not the first day you’ve spent looking for a job.  You might, given these tasks, go sort the CDs for a while, then throw a load of clothes in the wash, piddle around in the garage and come back to the job search later.  Sound about right?

As long as all the tasks were getting worked on at some level, you wouldn’t fault yourself for not spending all your time on the number one top task, nor would you fault anyone else for doing it either… unless it was their job.

It is very common in my daily work that I have a half dozen tasks on my plate.  The most important one might be to build an entire new application, followed by some bug fixes, maybe a new report over there, another field added to this screen, etc.  Just like any other person in their normal lives, when I work, sometimes, if the task is very large, banging my head against it, even if I am making good progress, gets depressing because it is not getting finished.  So, throughout any given work day, I am liable to stop working on the big task and go polish off a smaller one.  It makes me feel good, and makes working on the large lumbering task more bearable.  However, none of the people I’m doing this work for like it.  The people who want the entire new application are upset that I’ve released code with bug fixes, a new report and some screen changes, but no new application.

Being as this is in the Gaming category, how does it relate?  Ever read a patch message to your favorite MMO and found yourself thinking (or saying, because every now and then we all talk to ourselves out loud, and its okay), “Why did they fix all this piddly crap when X feature/class/mechanic is so utterly broken?!?”  The answer is in the preceding paragraph.  No matter how broken something is and how important that feature may be, sometimes a programmer just needs to take a few minutes to fix something easy just to get a victory under his belt for the day.

And believe me, you WANT him to have that victory, because a programmer who gets buried under huge high priority tasks with no end in sight is an unhappy programmer who is looking for another job… and when he finds one, he’ll be replaced with a temporarily happy programmer who doesn’t know the code as well as his predecessor (and he’ll be unhappy and looking for a job soon enough).  Those little victories are what keep the programmers believing that they can and will tackle the larger problems that exist.

The Handcart We Are Rapidly Pushing to Hell…

… is filled with social site web apps.

Look! One of my friends has installed SuperFunAwesomeWall! To read the cool stuff they have written I need to install it! But wait! Another friend has installed AwesomeFunSuperWall, which is not the same application… and, uh, a third friend installed FunSuperAwesomeWall… and another FunAwesomeSuperWall… okay, what the hell… And I’ve been bitten by a vampire, and a werewolf, and a zombie, and a dog, and I’m in bat country.  I’ve been asked to join an entourage, a pimp squad, and a sports team, no less than three movie applications, and some trivia.  I’ve been Poked, SuperPoked, MegaPoked, SexyPoked, and CanadianPoked, could someone please stop with all the damn poking?  I’ve had myself compared to other people in every possible way, and I now know which superhero (Marvel and DC), L Word character, Simpson, Lost castaway, Friend, drunk, color, type of Irish Republican, chocolate, Spice Girl, assassin, and dead Russian author I am.  Among a great many other things, and while all those things might be true, one thing I can say with absolute certainty that I am is someone who has almost entirely stopped logging in to Facebook.

About the only time I go there anymore is when I get an email that someone new has requested to link up, or on the odd occasion that I remember I have an account and decide I want to check and see if any more people I forgot I used to know have appeared.  The sad thing about most of those apps, besides the fact that they are horribly repetitive, is that most of them are crap.  Seriously, and annoying to boot.

Perhaps its just me… maybe I just don’t get it… but there really doesn’t seem to be much “social” is all these social networking sites.  In fact, the social aspects of direct messaging and message boards seem to be the hardest parts of the sites to find or use as they are drowned out by ads and apps.  One day, I was logged into Facebook using my Heroespowers to try to gain another level when I asked myself, “Why?  Why the fuck am I doing this?”  So I tried to dig through the app to find the community, the social part that should exist beyond spamming all my friends with useless power messages and invitations to install the app and join the spam, and I couldn’t find any.  I searched all my Walls (I had 3 installed in addition to the default one) and the only messages I found were the equivalent of chain letters.  I removed a good 90% of the apps I had installed (I’m a sucker for trivia) and sent out a couple of messages to some friends.  After a few days I realized that using Facebook for anything social beyond finding people to begin with was pointless.  Once we found each other and exchanged contact info, dropping “back” to email or AIM was so much easier than using Facebook.  And more reliable too.

“Why have Facebook email me every time I get a new message when I can just have people email me directly?” I found myself wondering.  I suppose if I were famous, I could use sites like Facebook to have a “public” face that people could talk to while hiding my “true” email address.  But I’m not, and everyone I currently talk to I feel safe giving my real email address to.

Of course, I realize that my gripes with these sites are largely about the efforts they have chosen to make in regards to traffic and ad revenue.  These aren’t pay sites, after all.  But then again, I’d say that overall their efforts are failing.  When was the last time you clicked an ad on Facebook or MySpace or some other social network site?  Just this instant I logged in to Facebook and the ads presented to me as I navigated ignoring all the random spam messages were for AllPosters.com, some weight loss thing, a local college bar, a website to find out who’s searching for me on the Internet, and upromise.  The one thing all five of those have in common is that they are things I wouldn’t click on.  Only one had any interest to me (AllPosers.com) but I already know about the site, have it book marked, and use it every now and then.  However, had it been some game advertisements, TV shows, movies, or something of that nature, I might have clicked on it.  The one thing all of these social networking sites suck at is directing the proper ads to the proper people.  They need a control panel where I can choose to get video game ads but not weight loss ads, to get TV shows but not college loans.

And just so it doesn’t seem like I’m picking on Facebook, I have a MySpace account as well that I use a little more often (its not too horrible at browsing and finding new musical insterests).  Recently that launched their application platform, and its largely full of the same crap as Facebook, with, in my opinion, the only exception being the MetaChat application launched by the people of MetaPlace.  It is fairly nifty, except… its also fairly useless.  Sure, I can now put a chat room on my profile page, but how often do I hang out on my own profile page?  How often do people visit my profile page?  Do I even really want to chat with the random people who cross my profile?  Everyone I want to chat with, I tend to give them my email address, or my AIM account and we chat elsewhere.

Tomorrow… more on social networking and Internet communities…

Ignoranceproofing

In Business, there are two types of people.

The first type is the kind of person who expects any individual who has a job to be able to do that job. This means that the individual needs to make the effort to understand each job function and why it is done. They also need to have a fundamental comprehension of the equipment they are involved with on a day to day basis.

The second type is the kind of person who expects the tools they use in their job to not allow them to make mistakes, so that even if they do not understand what they are doing, what they need to do is explained for them at every step and wrong choices are incapable of being made.

I’m the first type. And because of that, when I write programs, I write them so that everything that needs to be possible is available. Many people I write these programs for are the second type, and they want my program to analyse data (and read minds) and allow them on any given screen to only be able to do what they are required to do for their job.

For example, I have a screen that allows you to edit the status of a port and to edit the assignments of that port. I coded it completely open (you can edit either at any time) because our database and backend has been shown to have… quirks where data goes missing. The people I am writing it for want the screen to only allow you to set a port’s status to working if an assignment exists, and only to set it to available if no assignment exists. They also want adding or deleting an assignment disabled if the port is in a working status. So, if a bug happens that obliterates an assignment while leaving the port in a working status… my way, you add the assignment back. Their way… you have to set the port to available, then make the assignment, and then set the port back to working. And if for some reason you want to manually delete a port… my way, delete assignment, set port to available. Their way, set the port to available, delete assignment.

Now, the question is, do you see why my way is better?

This screen is not the entire application. And there are hundreds of people using the application. On another screen, there is an equipment assignment page that searches for and offers available ports for assignment. In both cases, they are making the port available for assignment when it is not ready to be (or is not going to be) available.

So, I do it their way… and the next complaint I get is that one person was working on the manual screen above and the port was assigned by the automatic screen after they made it available when it wasn’t really available. Now they want me to code in a delay, store a time stamp and only offer to automatic assignments ports that have been available for at least an hour… *sigh*

Programming Consistency

Sometimes I just feel like if I could get my hands on certain programmers I would slap them silly. Or perhaps kick the living crap out of them.

I’m working with this legacy application. In one table there is a column that is a string. Its an ID number stored with leading zeroes, like: 005, 016, 548. In another table, the same ID is stored as an integer, no leading zeroes. And they are key values in both tables. I am not allowed to correct the tables due to the effect it would have on existing applications.

Its so irritating to have to constantly convert back and forth due to some long ago idiot’s lack of planning. But what really irks me is that these tables were created about six years ago. The guy who did it hasn’t worked here for five years. In all that time, all the expansions and upgrades and applications, no one has been allowed to fix it. This mismatch of data, over five years, has probably resulted in hundreds, thousands of lines of additional code, to the point where fixing it will now cost the company a small fortune to fix. So they don’t fix it.

So, here I am, writing a couple extra lines of code per function, every page of code, probably three or four hours per week of my time, because one guy six years ago made a stupid error.

Ugh.