Doppleganger in more ways than one…

December 20th, 2007 John McG

Posted in Vista, Microsoft, software |

Apparently I’m not the only John McGuinness who’s unhappy with Vista.

AddThis Social Bookmark Button

The Horror, the horror?

December 18th, 2007 John McG

Posted in software |

Jeff Atwood defends the fact that despite its name, the Coding Horror blog is not dedicated to “howlers.”

Instead, it’s a blog about the mistakes we all make as programmers, and how we can improve.

Well enough.  I’m Catholic, so I know all about confronting the reality of our own failings in order to improve (we set aside 40 days a year for that very purpose).

Nevertheless, are the things Atwood writes about really “horrible?”

Take the series last week on shuffling cards.   It turns out that a naive shuffling algorithm biases certain distributions of cars over others.  Atwood shared this revelation in a post titled, “The Danger of Naivete,” and included the bolded sentence, “The naïve shuffle algorithm is biased and fundamentally broken.” and summarizes with, “If you shipped a real card game with a naïve shuffle, you’d have some serious exploits to deal with.”

Now.  Let’s think about this for a second before we commit  Seppku for letting such a horrible sort algorithms find its way into production.

First, shuffle is simulating the physical shuffling of cards, which, guess what kids?, isn’t perfectly random either.

Second, the seriousness of this problem depends on what the application is.  If it’s Solitare or Hearts or FreeCell, who the hell cares?  If it’s poker or blackjack, then you might have a problem, but it would be a pretty difficult exploit to figure out.   You would have to determine which distributions have the highest probablility, and then find a way to use that information to skew betting decisions.  The only way I can think of would be to figure out which distribution was most common, and then always assume that that’s the distribution.   But then you’d be wrong most of the time.

In short, yes, it’s true that the naive shuffle is wrong, and it would be incorrect to make it a textbook algorithm for how to do sort.  But I’m not sure it’s true that for all applications it would be worth it to do the testing to find the problem with this shuffle, and then correct it.  If you were charged with writing a card game, and you told your boss you had spent the day finding and correcting this defect, I’m not certain she’d be altogether pleased.

Sometimes “good enough” is.

I’m not saying we shouldn’t be continuously trying to improve ourselves and write better and better code, and realizing our own shortcomings is part of that.

But not every painting is the Mona Lisa.  Not every building is the Chrysler Building.  Not every car is a Lamborghini.  That doesn’t make them wrong or incorrect or “horrible.”  They do what they were designed to do.

Not all our code, even production code, is going to be textbook perfect accounting for all cases, and ready to be extended in the future.  And sometimes, that’s OK because sometimes we just need something to move some data from one place to another, and it has to be done by Friday.

Let’s strive to get better, let’s improve oursleves, but let’s leave behind the sackcloth and ashes.

AddThis Social Bookmark Button

I Wanna Be Forced Into Early Retirement

December 3rd, 2007 John McG

Posted in software |

One more thing worth noting on Mort and the 80%ers is that most people (at least significantly fewer than 80% of software engineers) start out their careers aspiring to be Mort.  They start out wanting to write great software.

Then they get to their first job, and get assigned a bug.  They come up with a somewhat flawed re-design that would fix this problem and are told just to put something in to get it working again.  They work 60 hour weeks to complete a project and get the same 3% raise as everybody else.  They spin their wheels waiting for the powers on high to decide what to do.  Then they get married and start having kids and have more demands on their time.  And they get tired.

If we want to improve the craft of software development, that’s the fertile ground.  Keep the new people engaged and excited.  Create organizations that encourage creativity and tangibly reward excellent software. 

I’m not saying Mort cannot be redeemed, but it would be better to keep him from becoming Mort in the first place.

AddThis Social Bookmark Button

There are two types of readers of this post..

December 2nd, 2007 John McG

Posted in balance, software |

Steve Atwood had a couple of posts last week about different kinds of programmers.

In the first post, Atwood riffed off Ben Collins-Sussman’s observation that there are two kinds of programmers — the 80% and the 20% (following the variant of the 80-20 rule that 20% of the people do 80% of the work) to suggest that those of us in the 20% (the assumption being that reading programming blogs is sufficient to identify oneself among the 20%) should devote more of our energy to bringing the 80% up to our level, and less time arguing and showing off to the other 20%.

This touched off a bit of a firestorm, as some readers resented the implication that they are among the 80%, which was both an incorrect implication to draw and not that insulting if you think about it.

My problem with the post is that I don’t think “reaching out” to the unwashed masses is the best use of a 20% software developer’s time. The 80% are there with their tried and true methods, doing their jobs, not bothering anybody. When we come up with something grand, they will come around and figure out that they need to learn it to keep up. Teaching and mentoring are noble callings (I teach myself), but if we think that by doing that we’re going to turn an 80% programmer into an 20% programmer, we’re dreaming.

In fact, it’s my suspicion that the more time a 20%er spends with an 80%er, the more likely it is she will turn into an 80%er herself. If someones working 80 hour weeks, writing compilers in his spare time, etc., and starts seeing that lots of people are able to make a decent living in software development and have time to have personal lives, then that’s going to start looking more and more appealing. The 80-20 rule doesn’t apply to salaries.

A developer who leaves at 4:00 PM every day to pick his kids up at school isn’t going to re-arrange his family’s schedule because you just showed him how cool the latest Linux distribution is. But a developer who sees that folks who leave hours before her get paid a single digit number of percentage points less than her will start to wonder why she’s doing it.

So, my inclination is to let the 80% be the 80%, and concentrate on making your work so good and irresistible they will have little choice to earn it.

Atwood followed that up with a post expanding the universe expanding the universe of proframming personas to three, based on Nikhil Kothari’s characters of Mort, Elvis and Einstein.

He quotes Phil Haack, who writes:

We have to realize that Mort is responsible for a lot of important systems. Systems that affect the general population. When I hear of recent cases of identity thefts such as Choicepoint among others, especially those caused by lax security such as using default passwords for the database, I think of Mort. When I read that $250 million worth of taxpayer money has gone into an overhaul of the FBI Case File system, and the system has to be scrapped. I think of Mort.

Given this much responsibility, we should expect more from Mort. So Mort, I hate to say this but software development is not like working the register at McDonalds where putting in your nine to five is enough. I am all for work-life balance, but you have to understand that Software development is an incredibly challenging field, requiring intense concentration and strong mental faculty. It’s time for you to attend a conference or two to improve your skills. It’s time for you to subscribe to a few blogs and read a few more books. But read deeper books than How to program the VCR in 21 days. For example, read a book on Design Patterns or Refactoring. Mort, I am afraid it’s time for you to quit coasting. It’s time for you to step it up a notch.

Yes, but whom do you think of when you read about a 50% divorce rate, or undersupervised kids? The above things are more examples of gross negligence that people just getting by with what works. And I’m not sure it’s a slam-dunk that preventing these things is worth having loads of developers spend 10 hours less with their families a week. For the “craft of software engineering,” sure, but maybe not for society as a whole.

It’s kind of trite, but on his deathbed, will Mort wish he had read a few more books about Design Patterns, or coached his daughter’s softball team?

Let’s face it — this isn’t the NBA, where in order to make it you either need to be supremely talented or supremely dedicated, and likely both. There is a greater demand for software development than there are 20%ers to go around, so as things stand right now, one can make a decent living working 40 hour weeks using the same tried and true methods. Neither “reaching out” nor “demanding more” is going to change that (though globalization might).

Plus, many employers are quite happy to have 80%ers watching their systems, keeping them running, not taking crazy chances, and not asking for big raises and promotions.

Our task is to push the trail forward such that it will be irresistible to others. That is how we will leave our mark on the world; that is how we will leave things better than we found them.

Let Mort be Mort. Let the 80% be the 80%. We’ve got work to do.

AddThis Social Bookmark Button

Econ 101

November 12th, 2007 John McG

Posted in software, economics |

Steve Atwood laments that downloaded software costs the same as shrink-wrap physical media software.

He seems to hang his case on how profitable it is for software vendors to allow downloads. If that’s the case, exactly what is the incentive for them to change?

Unfortunately, the state of digital software distribution is so bad right now that it’s almost a parody of itself. It should be a wondrous, democratizing tool that pushes software pricing down by naturally leveraging the inherent efficiency of bits over atoms. Instead, as it exists today, the digital distribution of commercial software is intentionally crippled. It’s only useful for the rich and impatient, a fact vendors exploit to line their pockets with obscene profit margins (even by software industry standards, which is saying a lot). The average consumer avoids digital software distribution entirely in favor of retail discounters. Can you blame them? With every download at retail prices, you’re effectively paying vendors five times as much for the same software, and that’s a huge ripoff.

It’s called price discrimination, which despite the usual nefarious connotations of the word discrimination, isn’t that awful a practice (think student discounts on movie tickets). If it’s that important to you to get the latest version of the game at 12:01 on the release date, the vendor is going to try to extract a premium from you for that privilege.

Software vendors, particularly big boys like Microsoft, are not in an open market where the primary driver of the price is the marginal cost. They will charge what people are willing to pay. And if people are willing to pay full price for the convenience of downloading software, that’s what they’re going to charge. That their cost is lower is completely irrelevant.

The solution isn’t to keep downloading software and whining about the mark-up. The solution is to stop downloading software, and force the vendors to lower the prices for downloads in order to recoup the investment they made in their download software. Or for competition to enter the market to drive prices down. But software vendors have no moral obligation to base their prices on the cost of distribution.

AddThis Social Bookmark Button

Bad Error Message!

October 26th, 2007 John McG

Posted in software |

When I follow the link below to Megan McArdle’s blog in IE 6, I get this text box:

Message Box

Note the lack of a “cancel” button.  This is a modal window, and thus I cannot go to the main browser window and abort.  The only way I can avoid this is to use Task Manager to kill IE.

So, this is something IE thinks is worth telling me about and making me confirm, but not gving me the opportunity to prevent.

Nice.

AddThis Social Bookmark Button

Becoming the “Get Linux” guy…

October 12th, 2007 John McG

Posted in Linux, Microsoft, software |

You know how when you’re having some trouble with your PC, like some driver for your printer not working correctly, or a DLL missing, and you Google for an answer? And you find some tech boards with similar questions, and invariably there’s a response along the lines of “Get Linux!” or “Get a Mac!” and you want to punch the guy in the face?

Well, I’m starting to become that guy.

A few months ago our family finally gave up on the Dell I bought in 1999 with Windows 98 and bought a new PC with Windows Vitsa (cue ominous music). We eschewed MS Office and installed OpenOffice with good results.

That worked OK for a while. But for a job I installed Ubuntu Linux in dual-boot mode, since my wife also uses the PC and I didn’t want to force her to take the plunge into Linux, and there were some things (games, iTunes) that I wanted to continue to use that were in Windows.

But Ubuntu soon became my default OS on my home PC.

Now, something else has happened.

My wife cannot open or save attachments in Windows Mail, and downloads from Internet Explorer disappear once they seem to have completed. (Thankfully, we had already installed Firefox, through which downloads work). This is mostly a moot point for me, since I use Gmail for all my personal mail, and usually use Linux and Firefox. But this is a pretty crippling problem for her.

I figured we must have flipped some switch or something that screwed us up, and I would quickly find a simple fix. But no. I posted to two different Windows groups and got no helpful response. Searching, it seems like these are both common problems with no workaround (using MS products, anyway), or any acknowledgment by MS or forthcoming fix.

The workaround seems to be to use Firefox and some other e-mail client, e.g. Thunderbird. If we do this, then our suite of applications will be:

  • OpenOffice
  • Firefox
  • Thunderbird

Hmmm — remind me why we paid $100 more to get Windows again?

I’m not one of those immediate MicroScoffers. I don’t think they rose to prominence by shady business practices, but because they made good software.

But I think they’re losing. Not because they’re mean and terrible, but because I think Open Source is a better model for this type of software. I don’t think such a fundamental problem would persist in an open source product.

That’s not to say Linux and Ubuntu are perfect. If I weren’t a geek, I probably couldn’t get it to do everything I need it to do. I’m still not sure I want to foist it on my wife. I use OpenOffice presentation, and it crashes on me once an hour or so.

But for the first time in a while, using a computer is fun! It’s hard to describe exactly why, or how, but I get the same feeling when I first started using computers and programming.

So, if you see me pop up in a tech board saying “Get Linux!” try to resist the temptation to throttle me.

AddThis Social Bookmark Button

Spot the fallacy….

September 4th, 2007 John McG

Posted in software |

here.

 Condensed:

  1. In’n'Out Burger is successful.
  2. In’n'Out Burger has a simple menu.

    Therefore, all software should have simple menus, particularly this application.

Guess what?  Most of us professional software developers like to think that we’re not making the software equivalent of an In’n'Out Burger.  In’n'Out Burger occupies its place in the restaurant marketplace fine, but there are many other successful restaurants and chains that are also successful that have (gasp!) more complex menus.

In particular, there is a restaurant chain my kids seem to like that brags of having served billions, whose menu includes several different burgers, several different chicken sandwiches, a fish sandwich, different salads, soft drinks, milkshakes, ice cream in both sundaes and cones, yogurt parfaits, french fries, and soft drinks.  They also over combo meals and kid’s meals.  Plus they have a breakfast menu that’s almost as complex.

Too bad they don’t have smart folks telling them to get real and simplify.  Then they might have some success…

AddThis Social Bookmark Button

How Blogging is like IT work

July 22nd, 2007 John McG

Posted in blogging, software |

Andrew Sullivan writes about the tension between blogging and more permanent writing:

The kind of brain activity that permits one to post two dozen items a day, keep track of countless more, and surf endless online reports and ideas and spats, is not conducive to also producing a long or reflective or deep work of philosophy or fiction or history or poetry. Even if you find the time, your mind cannot adjust that quickly.

A typical IT worker has two activities that compete for his time and attention:

  • Troubleshooting/Firefighting
  • Design, development of longer term solutions

If you’re familiar with Stephen Covey’s work, you know that the second set is “quadrant 2″ activities, whereas the first bullet point is in quadrant 1 or 3. This presents a few problems.

The problem is that a lot of the things we tell ourselves are in quadrant 1 are really in quadrant 3. The IT and business culture rewards those who lead the troubleshooting/firefighting efforts. Those who continue their design and development while others are firefighting are considered poor team players. The rewards for firefighting are real and immediate. The rewards for development work are not.

On a slightly darker note, a culture where everyone jumps in to help out on the latest fire is a culture where nobody is accountable for their design or development deliverables, because there’s always the excuse of some fire coming up that required their attention, so they “didn’t quite get” to completing the design, and schedules slip.

The other problem is that although these activities require different types of “brain activity,” it is typically the same people who are good at one that are good at the other. In part this is because nobody knows a system like the person who designed it, but it is also because the same skills — analytical ability, focus, and determination — are transferable to both problem areas.

The final problem is that a lot of the effort of deign and development is loading to contextual information in your mind. Once there, you can be “in the zone” and make leaps of progress without what seems to be a large effort. But this requires long blocks of time.

But office life isn’t always geared toward that. Your coworker will ask for help. The department secretary will ask for the serial number from your PC for the third time in a month. Your spouse will call for help in resolving some child care issue. You’ll be reminded to fill out your timesheet. A vendor will call. etc.

Eventually, you get discouraged, and even when there seems to be a block of time, you don’t work on the Quadrant 2 stuff, since you know you’ll only get interrupted. Hello, Quadrant 4!

What to do about it?

Well for one, those who are good at context switching will be very valuable. Those who can jump back and forth between development work and troubleshooting without getting discouraged or dropping the ball are and will continue to be very valuable. I’m not sure if this is a skill that can be developed or a natural talent.

Second, we need to defend the quadrant 2 activities, and sell other stakeholders on the idea that allowing us some time to focus on them is in their best interests. It’s hard for people to understand how disruptive their one little question can be. They don’t realize that they’re one of ten people with one little question.

This can be a hard pill to swallow. Closing yourself in your office while everyone’s running around chasing a problem doesn’t initially seem very “customer-focused.” But it can be the best way to serve them, and prevent future fires.

Finally, it usually takes a little bit of analysis to triage between Quadrant 1 and Quadrant 3 requests. By the time that’s done, the damage for the interruption has already been met, and you may as well go ahead and respond to the request regardless of its importance. Which is why value-added gatekeepers are necessary.

AddThis Social Bookmark Button