I will shortly be heading out to a day-long game development workshop called A Day of Unity which will give me an opportunity to port Flutter HD to Windows Phone. Flutter, if you’re unfamiliar, is the game that my buddy Travis and I recently developed, and you can check it out for most platforms, including playing for free on Facebook, at http://www.sheepshapestudio.com.
The event is hosted by Microsoft and there was a time in which that in and of itself would be sufficient to make me question the value of the event. When I moved from Windows to Mac in 1997/98 it was kind of a big deal. I had built and owned a succession of Windows PCs going back to Windows 3.1 in 1993, I had a Windows NT laptop at work where I developed applications for, you guessed it, Windows. Growing up, of course, I rarely used Windows or even DOS for that matter. I had a Commodore VIC-20, then used Radio Shack TRS-80, Commodore 64, Apple II, and occasional Macintosh machines in school. I had a friend, Stacy Jackson, who had an IBM PC running DOS and she introduced me to Sierra’s King’s Quest series on it, but as a general rule I didn’t encounter Microsoft enough to have any opinions on them whatsoever. When I started working with DOS/Win 3.1 at CDI, it seemed a little primitive compared to the Macintosh, but it was clearly miles ahead of a TRS-80 and to my mind, a computer was a computer.
I remember the first time I really got mad at Microsoft. It was a little thing, in retrospect, but it nearly cost me a job. I was early into my software development career. I had been coding for about two years and I was working primarily in Powerbuilder and Visual Basic. The web/Java market hadn’t really taken off yet. I was working as a contractor at Mortenson Construction writing a time-tracking app for work crews and I had just moved from Visual Basic version 3 to version 4. I had read about VB4, and some cool new features it was supposed to have for database manipulation. I decided to build my app using the cool new features. After weeks of development I ran into a major bug. There was some code that just would not work no matter what I did even though it seemed like it was correct and there were no errors. It was as if the method I was calling to do what I needed to do was pretending to work but silently failing. Which made no sense. I mean, why have a function available if it doesn’t do anything? That would be insane. So I read the documentation and re-read the documentation and tried over and over again to get my code to do what it needed to do and one day, with my manager getting more and more annoyed with my “wheel spinning” every day, I went back to the documentation for about the 45th time and this time I read it top to bottom and found a footnote, tiny print, that I had overlooked. You know what it said? It said that this feature hadn’t been complete in time for the release so, while the method was still there, IT DIDN’T DO ANYTHING. The insane option, the “we shipped this product knowing it was impossible to use the major feature we promoted in all our marketing material” option, was the truth. Microsoft had promoted, as the reason to move to version 4, a great new feature that they had then failed to actually finish building. Instead of waiting until they finished the job, they put a footnote in the documentation telling unfortunate developers like me not to use the new functionality because it didn’t work. This nearly cost me my job. I showed the whole thing to my manager and explained I would have to re-write the majority of the application. All in all, their marketing first, functionality second, approach cost me a few months of wasted effort, gave me a serious black eye with my manager, and made me doubt every claim they ever made from then on.
Over-reaction? Maybe. But it was the first time I ever had an experience like that. When you are a software developer there are so many thousands and thousands of methods and functions and libraries and language features that you could never store them all in your head. One of the primary skills of a software developer is knowing how to navigate dense collections of API (application programming interface) documentation to find the information you need. Building software is like assembling the mechanism of a complex watch but instead of gears and springs you work with ideas and words and logic. The behavior of a statement in code like makeMeASandwich() needs to be trustworthy. Let’s just say the documentation says “The function makeMeASandwich() takes the parameter SandwichType and returns an instance of the specified type of sandwich or the value ‘null’ if no ingredients are available for that sandwich”. When you put makeMeASandwich(SandwichType.PB_AND_J) in your code and receive no sandwich, you assume that you are out of peanut butter and/or jelly and your code may then call the checkCupboard() and goShopping() methods. What you do not assume is that the method is lazy and will always return null no matter how many ingredients are available because the company that wrote the documentation never bothered to write the method. This is a betrayal of the highest order and was serious enough that I actually decided then and there I didn’t want to base my career on a company that would do that. Again, maybe an over-reaction, but hey, I was 23 years old at the time and my brand loyalty was not that strong. Yeah, I bought Windows 95 the first day it came out but it wasn’t like I thought it was cool.
I toyed around with other operating systems. A friend gave me a book with a free operating system called Linux on a CD in the back and I messed around with that. You wanna talk primitive, a Linux distro in 1997, now THAT was primitive. I installed OS/2 Warp at one point, and it was fine, but it was clearly dead in the water. Apple wasn’t really an option. Jobs hadn’t returned yet, their stock was trading at $7 a share and people were taking bets on how long it would be before they just collapsed. I looked around for options and all I found was that there was something wrong with every option I could see. After that initial experience with VB4, I started to notice that Microsoft demonstrated over and over that they couldn’t be trusted. I got into Java and web development because I hoped that one day platform-neutral and standards-based coding practices and technologies would take over (I was right, woot!). Then I had my first Apple experience, and it was so the opposite of my Microsoft experience I was hooked.
It was simple enough. The company I was working for (doing Java for the first time!) had bought a Mac at my insistence for the purpose of testing our web apps on the Mac platform. Nobody knew what to do with the thing. This was still pre-Jobs. It was a PowerMac 7200 and they dumped it in my cubicle. I didn’t know how to set it up or anything. Hadn’t used a Mac since writing lab in high school and that was an 1980’s-era compact. I managed to plug everything in thanks to the extremely simple documentation in the box. I started it up and it smiled at me, which was friendly. When I got to the desktop I realized I needed to get it on our network but didn’t know how. Getting a computer on the Internet or a corporate network at this time in history was rather complicated and usually involved a lot of configuration. It wasn’t like “pick the right WIFI network from the drop down”. There was no WIFI yet. Our network guys had no clue and figured it would take them “a few days” to figure it out. So, I clicked on Help and typed “TCP/IP Network” and an amazing thing happened. The Help turned out to be interactive. A red circle was drawn around the place I was supposed to click and when I clicked there, another circle was drawn around the next spot. In 30 seconds I had it on our corporate network and the Internet. Mind. Blown. I started gravitating to using it when I didn’t really need to. When Jobs came back and then the iMac appeared, I bought one. I never really looked back… Until now.
Now the world is very different. Apple has conquered, commercially. Platform neutral development platforms are everywhere. The Win32 API exists but most people are writing apps for iPhones and Android phones and HTML5 and Microsoft is in the dog house and everybody hates Windows 8 and tons of people are still clinging to Windows XP. The worm has turned. Microsoft is now the underdog. And I’ve always been a fan of the underdog and I’m discovering that I kinda want them to succeed. I kinda want Windows 9 or whatever to be really great. I kinda want Apple to get down off it’s $500/share price and it’s hipster bullshit advertising and it’s thinner and thinner and thinner devices that all seem to come with major limitations and restrictions on your freedom to use them and start to Think Different again. I got what I wanted in 1997/98, but now I’m finding that I have slightly more fun with my MacBook when I boot it into Windows 8 instead of OSX Mavericks. I have had three iPhones and two iPads and I’m kind of excited to have an excuse to get a Windows Phone just because it’s different. Sometimes it’s fun to mix it up a bit. It’s not as if Microsoft hasn’t been a major part of my life all these years. Of course it has. I have a home-build Windows PC in my recording studio and that thing has been upgraded and maintained for a decade or so. I work on Windows every single day professionally. The only Windows flavors I don’t think I’ve ever run are ME and Vista. But one of the great things about Windows 8 is that I don’t use is every day professionally. Companies are not rolling it out. It’s a minority platform and it’s quirky and slightly buggy, and has some bizarre design decisions, kinda like Linux. It is maybe not as good, but it’s a little more fun than the solid, staid, predictable, Mac.
And that’s where I sit today. About to get in my car and spend they day doing the unthinkable… porting my personal work to Microsoft’s mobile platform using a Mac that is booted up in Windows. The event is called A Day of Unity because of the Unity game development engine but maybe it’s also a day of unity for former Microsoft users who turned to Apple to re-unite with the stupid marketing-driven company with the weird, stupid, technology. Let ’em back into my life a little more, give them a chance to put some pressure on Apple. Maybe something good will come out of it.