Insights about software

• Simple looking bugs are sometimes nearly impossible to fix.
• The building in town with the most valuable contents isn’t the bank or even the jewelry store; it’s the data center.
• When your browser window freezes for 5 seconds, someone, somewhere, wrote bad javascript.
• The guy in charge is the guy who knows the least about what his company does.  😉
————–
Programming” is thinking, not typing.  Most of programming is spent sleeping, walking around, staring out the window, or doing anything else that helps you relax and think.
Most of the hacking scenes in movies are complete bullshit.
That about 25% of the hours spent writing an application are spent figuring out ways the end user will do something wrong.
————–
• The most difficult part of writing a program is not actually writing the program but rather determining what the client wants the program to do.
• It is relatively easy to write the rules for what a program should do in cases where everything is working correctly; it is much more difficult to write the rules for what a program should do when things go wrong (see below).
• A lot more can (and does) go wrong than you think: databases can become corrupt or lose their connection to your program; the connection between various computers may become unavailable due to networking issues; and the list goes on. This is largely due to the distributed nature of computer systems these days, in which multiple interconnected computers process what seems to you to be a single request.
• A large part of what a program does is hide from you the gory details of when things go wrong (see above).
• Good programming requires the ability to foresee what might go wrong and to account for it. Most non-programmers either don’t believe what could go wrong or don’t want to worry about it, and thus can get uncomfortable even thinking about the idea of things going wrong.
• What may appear to be a very simple program (e.g. Google’s site) may involve a huge, invisible supporting infrastructure that cost lots of time and money to build and maintain.
• When you meet us at parties and learn what we do, we really don’t want to hear the story about how you couldn’t get a certain program to install/uninstall/run or how you might have a virus on your Windows PC. It would be like saying to a dentist you just met, “Oh, you’re a dentist? I have this pain in my leg, what do you think is causing it?”
• Just as you’re usually not impressed when we brag about how much we know about computers, we’re not impressed when you brag about how little you know about them.
————–
Under the hood, most critical software you use every day (like Mac OS X, or Facebook) contains a terrifying number of hacks and shortcuts that happen to barely fit together into a working whole.  It would be like taking apart a brand-new 747 and discovering that the fuel line is held in place by a coat-hanger and the landing gear is attached with duct tape.
————–
Programs are workhorses with a set of prescribed instructions that can interact in surprising ways.  The universe works this way as well.  Think about the simplicity of gravity.  Gravity’s force is inversely proportional to the square of the distance between two objects centers of mass as well as their respective mass.  That’s incredibly simple when you think about it.  Now, go watch a wobbling comet’s orbit going through multiple overlapping gravitational fields and tell me you wouldn’t think that’s a bug in the system if you didn’t already know that the universe is made of up simple rules interacting surprisingly.
Bugs do not necessarily mean that the software is wrong; it may mean the programmer misunderstood what the user wanted, that the user misunderstood what they needed or the program illuminated an unknown problem with the process the software is trying to solve.
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s