Nerdy tidbits from my life as a software engineer

Wednesday, August 19, 2009

On The Netbook Craze

All this talk about netbooks has me a bit perplexed.  What is a netbook?  From what I can tell, it’s a super slim, lightweight notebook that’s optimized for portability, price, and battery life.

But then we then go off into this whole sub-discussion about what sort of operating system a netbook should run on and what it’s primary purpose is, and this discussion makes no real sense to me.  The idea that a netbook is only useful for surfing the Internet is based on the theory that because it’s super-cheap, it is incapable of doing anything else.  This might be true today, but it clearly won’t be true tomorrow as hardware continues to get more powerful and less expensive – as it always has.  And this makes the whole idea of an Internet-only notebook silly to me.  Why not just call it a really cheap, low-end laptop?

The earliest netbooks might have had 512MB of RAM and were incapable of running Vista.  But obviously, within a year or two (if it’s not already), 2GB of RAM will be as cheap or cheaper than 512MB is today (or else the marginal difference will be so small that it won’t matter).  So whatever netbook you can by today for $300.00, tomorrow you will be able to buy a far more powerful notebook for the same price – if not cheaper.  And it will be absolutely fully-capable of running just about anything you want it to.  So why pretend that the purpose of these machines is to limit ourselves to just browsing the Internet?

So I fail to see how this is any more of a threat to Windows than the Internet already is.  It may be a threat to Microsoft’s margins, but really nothing else.

Backported From MSDN

On the heels of the backlash from my web-guy rant and Mr. Atwoods tirade against me, I decided to move my blog back to blogger from MSDN.  Maybe this was a knee-jerk reaction to a bout of criticisms that I haven’t yet experienced on the Internet, but I felt that it was appropriate for me to try, as much as possible to separate myself and my opinions from my employer.  It was disheartening to see people associate my rants with those of Microsoft as a whole; my whacky opinions do not pervade throughout the entire company.

I understand that what whatever I write or say, I will always be representing Microsoft.  But to me, the veil of blogging ‘under’ Microsoft’s blog-hosting service associates my opinions with those of my coworkers in a way that I’m not really comfortable.  Also, I want to feel free to be critical of Microsoft and I felt somehow restricted when I was writing on MSDN.  This is quite a struggle for me, actually.  As thrilling as it is to work here, there are plenty of things about our products, services, and corporate behavior that infuriate me.  Should I stand up and bite the hand that feeds me?  I have been struggling with that question ever since I started here, but I want to at least feel more freedom to say what I want.

Lastly, call me vain, but I want to keep using my domain name, and I was unable to port that to MSDN.  Bummer.  That would have been nice.  Not to mention that there’s nearly three-years worth of blogging history here that I would hate to leave behind.

Anyways, there are 6 posts from July that I ported over this morning.  It’s unfortunate that I can’t port the comments, too.  But you can go to the original site and read those if you want.  I won’t delete them.

I’ve considered cross-posting, but I hate the idea of having the same post in multiple places.

Monday, August 17, 2009

Re: All Programming is Web Programming

Jeff Atwood’s tirade against me is at least partially justified.  I knew that my rant against web-development was inflammatory when I posted it.  But in his diatribe, he omits a few important details from my post and then makes the same sort of sweeping generalizations that he’s criticizing me for making.

First, while he takes a lengthily quote from my article, he happily omits this line where I acknowledge that, obviously, there are smart people who develop web pages:

OK, so that’s not an entirely fair accusation to make.  Of course there are smart people who like to work on the web, and who find challenging things about it.

The premise for my rant is that this is not a challenging medium for me.  I’m happy that other people find this environment challenging.  To me it’s tedious and frustrating.  Call me old-fashioned and out-dated, but I much prefer to develop in my full-featured desktop environment – the one that

Computer Science [has] spent the last forty years making … as powerful as possible.[1]

Is it so bad for me to lament this movement backwards towards simpler technologies?  Forty years worth of research and development have evolved to create an environment where we get to focus on things that matter (such as, what is the best way to architect a program so that it accomplishes our goals) and less on things that don’t (such as, how can I get this to work in a webpage).  For me, this is a much more challenging problem to solve.

[Note that by the term “web development”, I am specifically referring to the presentation layer of a webpage – not the back-end services that do all sorts of complex stuff.  That’s not web-development – that’s just normal server-side development, and it encompasses all platforms and presentation layers, so it has nothing to do with the web, specifically]

Next, Jeff goes on to rant about why the movement to the web makes perfect business sense (which I never disagreed with), and continues by saying that he does web-dev because it allows him to write software that gets used (which is another reason that I work for Microsoft).  I understand why the world is moving in this direction; I just wish they were using more elegant technologies to do it.

But my primary complaint is more due to the fact that the web-world is filled with terrible software engineers.  I know that’s a dangerous accusation to make, but look: I taught myself DHTML when I was 15 with a used book that my father gave me – and I was quite good at it.  We all know this stuff is easier than C++/C#/Java development – as politically incorrect as that may be to say – because it requires far less training to be effective at it and because there is no need to understand the underlying technologies and principles that they are built on.  That doesn’t mean there aren’t brilliant people who work in this space, or that there aren’t amazing things being done on the web, or that all of the people who work with these technologies are dumb.  But if Jeff can make laws, so can I:

Braude’s Law: The easier it is to learn a given technology, the larger the percentage of bad engineers who will work with it.

Can we really dispute this?  Isn’t it self-evident?  Yes, there are exceptions; but clearly, it takes more training and understanding to be a C++ guru than a DHTML guru.  And because I want to work with people who can challenge me and who I can learn from, I choose to work with technologies where, crass as it may be to say, the bar is higher.

But Jeff acknowledges that this is true:

Web programming is far from perfect. It's downright kludgy. It's true that any J. Random Coder can plop out a terrible web application, and 99% of web applications are absolute crap. But this also means the truly brilliant programmers are now getting their code in front of hundreds, thousands, maybe even millions of users that they would have had absolutely no hope of reaching pre-web. There's nothing sadder, for my money, than code that dies unknown and unloved. Recasting software into web applications empowers programmers to get their software in front of someone, somewhere. Even if it sucks.

I am not willing to sacrifice the quality of my development environment or the intelligence of my coworkers just so that I can get my code in front of people.  He may be happiest writing programs that get used; but I am happiest writing elegant solutions to difficult problems with intelligent people.  And that’s why, so long as the web is built on DHTML, I will never be a web-guy.  It’s also why I work for Microsoft: here, I get to write applications using sophisticated technologies (many of which are invented here) to develop quality software that also gets in front of millions of people.

Lots of people have pointed out that much of the DHTML stuff we see on the web these days is in fact auto-generated using more sophisticated technologies.  These I have less of a problem working with.  But what does it say about the quality of a development environment that we have to go out of our way to hide it from us?  Ultimately, everything is still built on technologies that, as Jeff admits, suck.

Lastly, I disagree with Jeff’s bad news:

I hate to have to be the one to break the bad news to Michael, but for an increasingly large percentage of users, the desktop application is already dead. Most desktop applications typical users need have been replaced by web applications for years now. And more are replaced every day, as web browsers evolve to become more robust, more capable, more powerful.

You hope everything doesn't "move to the web"? Wake the hell up! It's already happened!

Sure, lots of traditional desktop applications have moved to the web.  But I’ve got some bad news for Jeff: not all programming is web programming, and as much as he may wish it to be true, it clearly hasn’t happened already.

Want an obvious example?  How about iTunes?  Here’s a desktop application that hundreds of millions of people are using, so it’s clearly not a niche.  Can we replace it with a web-app?  Theoretically we probably could (we could also write it in punch cards or re-write it in assembly).  But to do that, we would need to not only replicate the iTunes application in a web browser using JavaScript, we would also need to provide a platform-agnostic way for this web-app to talk to an iPod via a web browser.  Perhaps this is possible, but let’s ask ourselves a question: is there any tangible advantage of going down this path?  Are we really gaining anything, or are we just showing off how good we are at hacking a square peg into a round hole?

And we can say the same thing about just about every prominent desktop application that, again, theoretically could be written in JavaScript.  Do we really want a web-based version of Photoshop?  Would we honestly prefer to develop applications in a in a web browser instead of Visual Studio or Eclipse?  Would it please you more to design a PowerPoint presentation in the comfy-confines of Firefox?  Why are we so intent on short-changing our user experience for the sake of cross-platform convenience?  What, so that we don’t need Windows any more – is that really what all of this is about?

But Jeff acknowledges as much when he writes:

Writing Photoshop, Word, or Excel in JavaScript makes zero engineering sense, but it’s inevitable.

This may be one thing that we agree on, but it doesn’t make me any happier.  As much as I want everybody to use the products from the company that I work for, I am more interested in ensuring that our user-experience is as fantastic as it can possibly be.  So it saddens me to watch us all happily trade down just so that we can get away from Windows.  Truthfully, I chalk this gleeful movement up to my employer’s inability to continue creating exciting products and our lack of an app-store for Windows.  But I’ve opined about that somewhere else.

While the web-movement is obviously here to stay and accelerate, I am not convinced that all programming will be web programming.  A large number of things will have to change before that can happen.  And if it does come true that all programming becomes this DHTML mess that we find ourselves in right now, then I will gladly change professions – or at least say hello to middle-management.