At the University of Michigan in the early 1990s, I knew I wanted to go work for Microsoft. I had long been a fan of Apple, but their computers cost so much I felt they would be relegated to a niche in the computer industry. I thought Microsoft had a much more expansive view of the power of the PC. Even on my Mac Plus, I spent nearly all of my time inside Word and Excel.
I took lots of interesting CS classes in college, but I wanted to learn about real software, like how a word processor stores text. I knew you couldn't just store text in one big array, because typing text at the beginning of a document would be very slow as it shifted down all of subsequent characters in the memory buffer. I wanted to see production code and learn the craft of programming, and I felt MS would be the best place to do it.
Microsoft's reputation has taken a hit over these last 15 years, but at the time, it was the best option for me. They had people working on many aspects of software: kernels, compilers, class libraries, word processors, databases, and researchers doing fancy things. And they were just getting going!
In 1993, I got a job as a summer intern in the FoxPro group. It took me a day of hard interviews, where I had to write little routines to do bit manipulation, and be generally grilled by smart and experienced programmers, but I passed and got hired as an intern programmer in FoxPro. At the end of the summer, I asked if I could stay on and not go back to school, and they offered me a full-time job, which I accepted.
I worked for my first two years of MS in that team. I got paid, while I was learning more about programming that I could possibly have learned in my last year of school. I had read enough Homer and psychology for a lifetime and was ready to get down to the business of working on computers, which I loved. Getting paid to learn is not a bad thing. If only college worked that way!
FoxPro was not my ideal choice of technologies to work on. I thought the xBASE language was bizarre but it was my step in the door, and the team was friendly and smart. I absorbed a lot from my team, and from people working on other teams. I remember spending some late nights browsing through the source code to NT, porting FoxPro to the MIPS processor, reading the fascinating discussions on the internal perf alias, etc.
After that, I left and worked for five years on text engines, two years in Sweden on mobility and server software, where I also learned about .Net, which was a major epiphany for me. I then returned to Redmond to work on the watch and accompanying data network, Spot.
All were interesting and my experience gave me a flavor of many aspects of software technology, from embedded to internationalization to databases and services.
One day it just hit me I should quit. There were no big reasons, only a lot of little ones. I had just launched v1 of the client and server side of Spot, and while it contained sophisticated technologies, I didn't really believe it would take off in the marketplace. I had gained lots of knowledge yet only understood the Microsoft world. I had made some good money, but I had no time to enjoy it. Though my boss was happy with me, I was losing motivation to just keep doing the same thing I had been doing for over a decade. I looked around the company and saw a lot of ancient codebases and unprofitable ventures.
My mom didn't approve of my quitting before finding my next job, but I knew I could only properly figure out what was next after I left.
Little did I know what was in store for me.
A few weeks after leaving, I decided to try Linux. I had played with Firefox and OpenOffice for a few hours while at the company, and even wrote an e-mail to our legal team telling them that my friend Alex Mogilevsky's patented work on background spell-checking had been stolen by OpenOffice. But I had never used those apps beyond my brief testing, and had never run Linux.
I have forgotten more about Windows than most people will ever bother to learn, so I was extremely scared about setting Linux up, because I didn't want this little experiment to screw up my main environment.
Every little decision was big for me: do I dual boot or should I be safe and get another machine? Which distro? Will it corrupt my hard drive or should I get another hard drive? I got some tips and assurance from a former co-worker who had installed Fedora, and with that help I proceeded with the installation.
While I came to not be all that thrilled with Fedora Core 3 itself, I was floored merely by the installation process.