Software Development: A Day in The Life (Long)

At times I feel that software development is much, much harder than it should be. Ridiculous crappy annoyances await you on every corner, some of them many years old. We all, including the tool vendors, never have time to do the job right, causing people to fall into the same traps over and over again.

I recently needed to quickly develop a project involving SQL Server, Web service, and Silverlight. Here’s a quick summary of annoyances I encountered in 24 to 48 hours:

1. SQL Server 2008 won’t authenticate my user. Reason? It lets you create a user with SQL Server authentication, but conveniently forgets to remind you that SQL Server authentication is disabled by default. Lost half an hour.

2. Where is the “normalize this table” button? To divide a denormalized table in two I needed to do 7 or 8 steps, carefully trying not to lose any data. Wasted an hour.

3. Why on Earth do I have to write the IPropertyChanged implementation for the 1000th time?

private string _crap;
public string Crap
{
   get { return _crap; }
   set { _crap = value; RaisePropertyChanged("Crap"); }
}

Yes, I have a Visual Studio macro for that, which I need to remember to copy to all machines I work on, but why all the code clutter? Can I have my C macros back, please? Pretty please? And don’t even get me started on T4, it’s too problematic. Did not lose much time on this, but it’s annoying.

4. SqlDataReader.GetString(int). Why didn’t they include a version that takes a column name? Efficiency? What is it, C++? Who came up with a brilliant idea to throw an exception when database contains NULL? Why not just return null string? Why on Earth do I have to remember to write for a 1000th time the safe version of the function? Lost half an hour, ’cause I forgot about this.

string SafeGetString(SqlDataReader data, int idx)
{
   object obj = data.GetValue(idx);
   if (obj == null || obj is DBNull) return null;
   return obj.ToString();
}

5. I can now run my web service under ApplicationPoolIdentity. This is nice. The trouble is, this is totally useless, as you can’t give this user permission to your database. Small oversight, will be fixed in the year 2020. Meantime, lost half an hour trying to find how to find the user.

6. ‘Hide file extensions’ checkbx is under “Organize” button in Windows Server 2008 R2. After 20 years I came to terms with the fact that file extensions are hidden by default. Apparently Microsoft thinks most Windows users are retarded and can’t handle such a complex concept. As long as I know how to bring them back, I’m fine. The trouble is, someone came up with a brilliant idea of removing Tools->Folder Options menu and putting this checkbox elsewhere. They probably think we, users, enjoy playing this little quest of “where is my checkbox now”. After all, menus are soooo last century. Lost 15 minutes.

7. Ran Silverlight web site under Internet Explorer 9. It says I need to download Silverlight. When I click on the link, it says, I quote “Your current security settings do not allow this file to be downloaded“. No indication whatsoever on what exactly is ‘this file‘ and what setting in particular gets in the way. This is year 2012 people, I guess IE authors should get a clue in UI usability by now, shouldn’t they? Lost 10 minutes.

8. My generic.xaml became too big, tried to break it into several files. It compiles, but blows up at runtime, saying it can’t find the resource file. Triple checked file names – no spelling errors. What gives? It turns out that “there is a bug on not being able to use relative URIs generic.xaml“. Must use absolute URI. This was in Silverlight 3, still not fixed in version 5. Lost an hour.

9. Got nice error message from Silverlight XAML compiler on an missing closing curly brace:

Unexpected token None in Rule: MarkupExtension ::= '{' TYPENAME (Arguments)? @'}', in '{Binding MaxTime, RelativeSource={RelativeSource FindAncestor, AncestorType=local:Timeline2}'

This is fine for a parser written as a homework assignment for a compilers course in college, but seeing that kind of error reporting in production compiler is somewhat surprising. Did not really lose any time, just was astonished.

10. In an unrelated project, the next day, found that sender parameter in ItemsPresenter.LayoutUpdate event is null. I thought the whole reason Microsoft came up with this monstrosity of

void CrapEventHandler( object sender, EventArgs uselessEmptyParameter)

was to be able to distinguish between various senders in one handler. If the sender is null, this kinda defeats the purpose, doesn’t it? Lost 20 minutes to find the bug and then to refactor the code, so it would know who actually is the sender.

People, why does it need to be that hard? And I mean not intellectually challenging hard, just stupid hard, as in “it should work, but it doesn’t, because someone neglected to fix an annoying XAML compiler bug for three years”?

Yes, I know, perfection is achieved at the moment of collapse 🙂

3 Comments


  1. Thanks for taking the time to discuss this, I feel strongly about it and love learning more on this topic. If possible, as you gain expertise, would you mind updating your blog with more information? It is extremely helpful for me. BY – software development

    Reply

  2. Thanks for ones marvelous posting! I really enjoyed reading it, you are a great author.I will always bookmark your blog and will eventually come back later in life. I want to encourage you continue your great work, have a nice morning!

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *