Lost in LoC


Traditional Skills Are Still Needed in Software Development

Posted in Development,Technology,Uncategorized by Ryan Baldwin on November 21, 2008
Tags: , , , ,

In one of my earlier posts I mentioned that for the past 7 years I primarily worked in the world of .NET.  I enjoyed those 7 years.  Microsoft’s .NET Framework is rich and fun to use.  The C# language continues to impress me as it matures, the Framework’s classes and libraries are intuitive to use, and the documentation, despite being about 2.5 gigs, is thorough, easy to understand, and complete.  As far as I’m concerned, Microsoft’s .NET Framework is a home run as far as frameworks go; it’s the big “Pro” when it comes to developing MS based applications.

That being said, there’s a lot of cons.  You pretty much have no choice but to use Windows.  You’re realistically stuck with having to use Microsoft’s flagship IDE, Visual Studio .NET.  Despite having fantastic integrated debugging, the IDE itself is very… Microsofty.  It’s very point and click.  The keyboard shortcuts aren’t very powerful (mouseless navigation is nearly impossible).  It’s expensive (if you’re not using one of the stripped down “free” versions). It’s bloated, slow, and buggy.  It crashes all the time.  It has very little support for Agile development, and what support there is completely misses the point (I’m looking at you, MSUnit).  I also think that VS.NET teaches novice developers how to do everything wrong (code-behind is a wickedly evil thing).  Overall, the entire thing really kinda sucks, and if it weren’t for ReSharper the thing would be almost useless.

About 2 months ago I started focusing hard on iPhone and Mac OS X software development.  One of the things I liked right off the bat was that I didn’t have to buy any development tools.  In fact, I didn’t even have to download anything because my Macbook Pro came with everything I needed to get going.  IDE for development? Check. Performance monitoring tools?  Check.  App for creating interfaces?  Check.  Incredibly impressed with the tools that come out of the box, ready for development (including Subversion, python, ruby, IDE’s and graphical tools)?  Check.  As far as development tools and “out of the box” readyness for somebody to get their geek on, Apple hit a home run.  This is Apple’s “Pro” entry.

Fast forward 2 months.  Ask me if I’m still developing my iPhone application.  Go on.  Ask.  I’m serious!  Do it!

Are you still developing your iPhone application?

Hell no.

Uh… why not?

Because despite having great tools out of the box (+1), the developer documentation is so horrendous that it artificially inflates the learning curve by a factor of 10 (-1 gazillion!).  Yes, there are oodles of example code at the Apple Developer site, and yes there are oodles of videos too.  That’s great if you already have a decent 5,000 foot view of the technological components you want to work with, but it sucks if you don’t have that 5,000 foot view.  And the only way to have that 5,000 foot view is if you’ve already been developing in Cocoa Framework for the past several years.

The problem is in the details, literally.  Their code examples demonstrate the raw intricacies of the how, but not the conceptual understanding of the what and why.  As a result I find it incredibly difficult to see the low level implementation details when I don’t have a decent understanding of the classes involved at a higher level.  At the other end of the spectrum are their videos.  These videos are 50,000 foot pie-in-the-sky views that give the audience a really casual understanding of general stuff.  They’re essentially marketing videos for nerds.  They’re great if you’re just getting started and you need a super-high level view of how the various frameworks piece together, but they don’t prepare you to actually do anything.

So what about the documentation that comes with the development tools?

A great question!  Let me take the Socratic method and answer your question with a question.  What documentation? Imagine, if you will, the horror of opening up the documentation tool for Xcode (an entirely separate application that helps you search and organize Apple’s documentation – good in theory, fails miserably in practice) and finding that the documentation for almost every single class and method is only 1 sentence long, and that 1 sentence is the most formal, computer-sciency idiomatic statement you can possibly imagine.  That’s Cocoa’s documentation.  The inline comments provided by the header files are better, but barely.

This has frustrated me on so many occasions that the euphoria I experienced while trying to develop my first iPhone application quickly turned into the searing pain of frustration and anger.  It frustrates me doubly so because Apple is a fantastic company with fantastic products for which I desperately want to contribute, but I can’t.  I have a limited amount of time every week that I reserve for Apple development, and their lack of documentation is completely counter productive.  I can easily spend the entire time searching for a snippet of easy to read, easy to understand documentation about, for example, what methods you have to implement in order for your class to act as a delegate to some other class.  The documentation just isn’t there, and if it is, it’s so horribly organized that I couldn’t find it if it jumped out and kicked me in the junk.

This brings me to the point which I eluded to in the title of this entry.  It’s great to have lots of fun, good looking, easy to use tools.  It’s great to sit down and hammer out oodles of code.  It’s super duper fun to compile your application and watch it run, crash, and burn.  Those are great skills to have, but the thing that really makes software development a joy is the same thing that makes almost any other traditional profession a joy:  clear communication.

I once met a kid in grade 10 that was a computer whiz, but was failing out of school because he refused to apply any of his efforts towards his non-technical, non-sciency classes.  At the top of this failure list was English.  I asked him why he didn’t like English.

Because it’s stupid.  I’m not going to use it!  I want to be a programmer, not an author!  I don’t care about that stuff!

Needless to say I had to inform him that a very large portion of my job is not writing code, but communicating complex ideas to other people.  People that are both tech-savy and technically-inept.  Communication is one of, if not the most important skill in software industry.  He was shocked.

I once had a job in which I was told, on my first day, that my responsibilities would be “to port application X into application Y”.  I asked where the requirements were and if I could have access because I will need to review those requirement in order to do the job.  I was told that there weren’t any requirements, and that I should just “read the code.”  Naturally the person who told me this was not a technical person, and I couldn’t get mad at them because as far as they knew reading code was just like reading a well written novel.  In reality, reading code is more like reading a very poorly written novel, in which there are either far too many or far too few characters, and all the pages are mixed up, and there are no page numbers, and all of a sudden it just ends.

For whatever reason, Apple has forgotten the importance of clear communication.  This is unfortunate because Apple is in a position in which they can take a significant dent out of Microsoft’s developer base if they wanted to.  Apple has all the fun sexy toys.  They have all the innovation.  They have all the trend and momentum right now.  Microsoft, conversely, has a failing strategy in almost every segment of the computer industry.  If Apple could deliver a rich, thorough, and well organized set of documentation for their Cocoa framework, it could be a huge blow to Microsoft’s developer strategy.  So far, though, Apple is completely dropping the ball.

Apple.  If you’re listening – get busy and floor me with some excellent documentation.

Readers.  If you’re willing – floor me with some excellent resources that tell me the what and why, and not the how of the Cocoa Framework.

Microsoft Windows Automatic Updates. A Case Study in Usabability Failure

Posted in Usability by Ryan Baldwin on October 1, 2008
Tags: , , ,

I just booted my Windows XP virtual machine using VMWare’s Amazing Fusion. After a couple minutes of waiting I finally have a usable desktop. I’m instantly greeted with Windows Update.

“Why hello!” I greet the friendly notification bubble.
“Did you know that you have a huge… update?” it asks me, flirtatiously.
“I get that a lot… from you!” I reply with grand wit. “What is it this time?”
“Windows XP Service Pack 3… wouldn’t you just love to install it?”
Without hesitation I reply. “Yes.”

Slowly and graciously my virtual machine starts to do it’s thing. Caressing my hard drive, checking out my RAM… making sure that everything’s ready to go. And just then, my computer backs out! “Ah-ah-aaaaaaaaaaah!” she teases. “I’m sorry, but I can’t go any further until you plug me in to AC power.” Hastily I stumble for the AC power cable, clumsily plugging it in. “There!” I say victoriously. “Now… where were we?” I click [OK] and… she gets up and leaves. I’m sitting there, ready and able, and she’s…. nowhere to be found.

Imagine my confusion and my utter annoyance. All I want to do is explicitly invoke a Windows XP update – the same update I’ve been notified has been downloaded and is ready to install on my computer.

In Apple OS X this is easy.
[Apple Menu] –> Software Updates…

In Ubuntu it’s almost equally as easy.
[Open Terminal] –> sudo aptitude upgrade

But in Windows XP… you just… well, what do you do? There’s nothing in my start menu there’s no “Windows Update” (although there is an “Apple Software Update” – oh the irony). I look in my Administrative Tools… nothing. I look in my Control Panel. A-Ha! Automatic Updates! I double click it to find that it’s simply a settings panel that allows me to control how frequently I allow windows to check for Microsoft updates. I look and I look, but there is no single launch point for updating Microsoft Windows.

Finally, in defeat, I commence what is apparently the most natural to way to commence the process of updating your Windows operating system: I open a web browser. I then navigate to http://updates.microsoft.com – a url that apparently doesn’t exist. So I Google it and find the link. I navigate to the update link, only to be redirected to some other page telling me I need Internet Explorer. Exasperated, I open Internet Explorer and do the Google once again, and click on the link.

Microsoft starts scanning my computer for updates. 1 minute… 2 minutes… 5 minutes go by. I’m surprised, because Windows has already determined what updates need to be applied to my system. I know this because it told me when I first logged on. Finally, the Windows Update web application (am I the only one who things this is absurd?) finishes and I’m presented with a Download and Install Now button. WTF? I already have downloaded, I don’t want to download again just so I can install that which I’ve already downloaded. Finally, I completely give up and I simply reboot my virtual machine so I can get the Updates Ready to Install balloon. I wait a couple minutes and I’m back at my nice, new, freshly rebooted desktop. I wait. I wait some more. Still waiting… no update balloon. Awesome.

This is a perfect example of why I use a Mac now. Updating my system should be straight forward and easy, but Microsoft has found a way to make it a nearly impossible task in Windows XP. The funny thing is, for a dozen years this never bothered me, but I feel like the proverbial blind man who can now see, and I realise that not only does it not have to be this way, but that it shouldn’t be this way and, for the rest of the world, it isn’t this way.

I don’t recall what this process was like under Vista… please tell me that Microsoft has made some of these standard work flows more accessible and more usable in Vista.