Sometimes I wonder if I was supposed to be a programmer. My job at Microsoft does not require that I write any code... that's not what Program Managers do. Instead I do all sorts of other stuff, but I enjoy it a great deal. However, sometimes all the context switching from multi tasking KILLS me. I mean if I am juggling 2-3 super high priority items at once I get really burned out.
That is why I really enjoy programming so much in my spare time. I don't have to multi-task and I can focus on one problem at a time. I find that to be incredibly rewarding. The ability to create something from nothing, to take an idea and make it work all by myself. I sort of get to do that at Microsoft but the process is lengthy, I don't actually build the thing, and you often don't get that satisfaction till you "ship". Depending on where you work, that could be every 2 months to every 2-3 years, sometimes longer.
The funny thing is, when I came to Microsoft I didn't really ever write code. I took two 4 months classes in college (C++ and Java). I hated C++ cause after 4 months all I could do was write a console app. Java was neat in that I could draw stuff, make games, silly and cool little apps in days. After that I pretty much never tried again. In May of 2003 I was frustrated at how difficult it was to add words to the Tablet PC Dictionary (which was supposed to improve recognition). I was on a mailing list where some one forwarded a word doc that described how to add words to the dictionary in VB.NET. I installed Visual Studio that day, and started to work on the application. I marveled at how cool the .NET Framework was. I read a few dozen books, not understanding most of the stuff, but learning little by little. I sent the application around to the Tablet Discussion List we have at Microsoft and a few days later I got an email from some folks on the tablet team asking me if I wanted to publish the application as a PowerToy.
That was really thrilling for me. It demonstrated that I had the creative power to take my own idea and make something that people could download and use. Looking back at this application and the code, I can't help but laugh. I later rewrote the thing from scratch cause none of it made sense to me, and I had long since switched to using C#, so VB looked funny and confusing. Soon after that I discovered BlogX and started playing around with that. I was mostly interested in the Windows application for posting to BlogX but soon after I started to dive into ASP.NET which was a rather difficult thing to get my head wrapped around. My hunger for learning more, and doing more really accelerated. I wrote a bunch of little applications, utilities etc and finally got most of it out of my system ;-). But the ability to do things like extending Media Center, Outlook and add value where I wanted was like an addictive drug. I was empowered to make things the way I want. Such things were:
- Making the Vacuum Fluorescent Display on my Media Center do something useful
- plugin for Outlook that could create OneNote notes from Emails and other items
- NewsGator plugin to post to dasBlog
- An application to edit the DateTime of photos as well as automatically rotate pictures
- A small program to zip and unzip files quickly
- An application to clean all the cruft from a VS.NET project (bin, obj)
- An application to download RSS and send that to OneNote
- An Outlook toolbar to replace the GettingThingsDone toolbar out there (that I dislike)
- A Pocket PC Phone Edition app to switch the device to Vibrate during meetings
- A Smartphone app for calculating tips
- An ASP.NET Mobile Forms app for Wine that I have tried.
Some of these things I've shipped, and others I haven't cause I don't have the time to finish the last 10% to make them shareable. Finally, the product that I currently am having the most fun working on, dasBlog, is also one that I have learned the greatest from. Both Clemens and Scott Hanselman have taught me an immense amount about programming through their code, or through interactions with them. Scott actually spent a bunch of time the past few weeks chatting over IM, Skype and Phone explaining things to me, and is a really great teacher. Clemens wrote so much code in dasBlog that there are still parts of it that are teaching me new things, and some I don't quite fully understand. But each time I decide to tackle some area of the code base that I'm unfamiliar with, I learn a bunch load more. Fixing bugs forces you to understand and learn how things work, which is a great way to learn new stuff.
The amazing thing about .NET is you can really take your skills and apply them to the Internet, Win32 apps, Mobile apps, Media Center plugins, Tablet PC, Office, COM, etc. Knowing the language is an incredibly powerful tool and can be used consistently across a large spectrum of devices and products. I'm not sure you can do that with anything else. Since I am such a gear head, and out of the box never satisfies me, I have currently touched almost every product we sell that can be extended using .NET for about 12 months of investment of time on my part. That's a pretty decent value proposition for the framework. From my Smartphone to my Media Center, and everything in between, I can change things, make things, and custom tailor software to my liking.
What's my point? Well I'm getting to that. In the last 18 months I have learned a crap load about programming and .NET. When I was in the MacBU this had zero relevance to my job. However, now in Hotmail it has a lot of relevance, especially since my team is responsible for the Front Door Architecture and Infrastructure. This means that I often spend an enormous amount of time with our developers thinking about .NET, designing for scale, solving problems when things break etc. The interesting thing is that every time I learn something new about programming or ASP.NET it comes up a few days later at work. This past month it's happened at least twice. This means that I can actually play a part in the design or the solution for a problem, and help to actually influence direction and add value where I can. In many ways I feel like my job is a lot like being a student. I learn every day that I am here, in almost every meeting I am in, and from most of the people I interact with. I really find it rewarding to also learn from looking at other people's code and trying to influence my ideas into something that ships. That's really what makes working her addictive for me, and would really make it hard for me to do anything else at this point in my life.
A lot of the time my wife looks at me staring at my computer screen and has no freaking idea what could be so interesting that I would glue myself to the same chair for hours typing away. Sometime I wonder myself, but often I hardly even notice. I've tried to explain it to her, but just like I can't understand what it's like to save some one's life, deliver their child, or help them create a baby when they cannot otherwise do so (things she does), it's hard for her to understand how this drives me. I consider myself pretty dammed lucky that my ability to do my job benefits from this kind of learning, and that as I learn more, I can contribute more. It's sort of win-win I guess.