My 90s Life at Microsoft: Task Manager, ZIPFolders, Space Cadet Pinball and More - Dave Plummer

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
Good evening. Traditionally, for me to do any public speaking would require that someone die or get married. And so, with this being quite literally my first ever attempt at actual public speaking, that obviously means that the first thing I did was to Google “actual public speaking”. The conventional wisdom seems to be that one should open with a joke of some kind. I don’t know if it qualifies as a joke, but I have an anecdote that I bet will tie in with your very first question. I was in Las Vegas once and at the end of the night, through what I will just call a “combination of factors”, I wound up following someone else off the elevator one stop too early, walked to what would have been my room had it been the correct floor, coincidentally found the door was propped open, and so I walked on in. That led to what I’m sure is that same question many of you have right now: Who are you, and what are you doing here? The answer to the first part is easy, as that’s just my name, which is Dave Plummer. During my professional career, I like to think not unlike Prince or Sting, I entered the single-name stage of my career, where I was just davepl, which was my email alias at work. You likely won’t be surprised to find out that short, single-value unique names that never collide and that are issued by a central authority are a much more elegant and efficient way of naming people, as opposed to when I was born back in 1968 and you were either named Robert, Michael or David like all of the other boys. So that explains the who part, but what of the why? Like many of you, I’m a University of Regina computer science graduate, so that’s the real reason. But why me specifically? I have zero papers published but about a dozen patents, so I’m definitely more on the practical side than the academic. So, what have I done that you might heard of? And that’s the beauty of it – without even knowing it, you’ve probably been using my code all along. For years. In fact, going back to the 1990s, it was pretty much inescapable that most people would be using my code at some point during the day. And that’s because I was a relatively early employee at a company called Microsoft down in Redmond, Washington, which is where I have lived for over 25 years now. Throw in a trivial contribution to the Linux source tree and my work on Office for Mac, and you might have been living the Davepl life all along without even knowing it. You’ll pretty much have to hide out in the Java VM if you want to escape me entirely. I started in MS-DOS in 1993 and spent a little more than a decade at Microsoft, leaving after Server 2003 so back in the days when software came on those little plastic coasters, my fingerprints were on most of them. I’ve already had the Windows 95 20th year reunion and the Windows NT 25th, and I was going to make some reference to going back to meet up with “old grey bearded programmers” until I realized that I literally am one of them now! And since I’ve already jumped back to 1993, I might as well go all the way back and give you a little bio. I was born just two months before this department was founded back in 1968 at the Regina General Hospital here in town, where my mom was an operating room nurse. My Dad owned and operated Plummer’s Hardware over on College avenue. The store was just down the alley from our house, as was my Grandfather’s workshop, and so every day from about the age of 5 on up, especially in the summers, I would wander down and hang out with my Dad at the hardware store for a while and then visit my grandfather at his shop. Not only did his shop feature a Coke machine, he had the key, and sometimes he’d open it up and grab us each a bottle. As a little kid, being able to open the Coke machine seemed to me to be the ultimate in power and privilege! Between the hardware store and grandpa’s shop I spent a great deal of time hanging around with folks that were busy fixing, inventing, and building things, and I think that was formative. Of course, what was hardware for them would turn out to be software for me, but the core instincts are very similar, I think. Several years later, when I was 11 and able to venture a little further from home, I made my way into the local Radio Shack. There, out of the boxes but not yet set up, sat something I’d only heard of: a computer. The TRS-80 Model 1, with 4K. When I asked when it was going to be ready to see, they said they weren’t sure how to hook it up yet. In a move that would become somewhat of a theme in my life, I offered to set it up even though I clearly had no idea what I was doing. They must have felt I was precocious enough to humor with their expensive system because they said “sure, kid, have a shot” and left me to it. In all honesty, it wasn’t much different from connecting a component stereo, except Tandy, in their infinite wisdom, used the exact same round 5-pin-DIN connector for video, power, and keyboard, but I still somehow managed not to blow it up. It was to be my first experience with “Das blinkin lights” and I loved it. The more LEDs something had, as far as I was concerned, the better. Once up and running, I naively performed a Turing test on the machine by typing English commands into the BASIC interpreter. It failed miserably and responded only with SN? which I decided must mean spelling error. Later I would figure out it was a Syntax error, but at that age I didn’t know what syntax was anyway. I didn’t get very far that first day, but I walked or rode my bike down there every Thursday night and Saturday morning, and the manager, Brian Patmore, let me key in the BASIC programs I had dreamed up in elementary school in the days prior. I didn’t even save any of these early programs to cassette and keyed something new in every time. I initially had no idea how limited the interpreter actually was, but I learned quickly. There were no books on how a kid could learn Zed 80 assembly language, at least not that I could find. While the Radio Shack guys were friendly, initially they knew less about the machine than I did. And as gracious as they were about letting me exploit Regina’s Thursday night shopping policy, I couldn’t spend all my days sitting on a stool in the corner of a retail store. And -that- is the moment I discovered the University of Regina. I found a convenient shortcut through the park near the old Power Plant that could take my bike from my house to the university in just about 10 minutes. And there, on the first floor of the Lab building, was Minerva. Or maybe it was Vinerva. Or maybe there was both. But for certain they had a PDP-11 and I had discovered that on Saturday mornings, kids were tolerated. I don’t to this day know if someone was actually opening the lab up to kids or the security was just light on Saturday mornings, but I got in somehow. The PDP had the most Das blinkin’ lights of all, and the HELLO prompt of what I think was likely RSTS awaited. My mom looked into it a little further for me and found there was actually a class you could take in that very lab, on that very machine, and the public was welcome. We signed me up immediately, and I’m afraid to say I don’t actually know who organized that class, but it could well have been Dr. Maguire. I think I remember that perhaps Dr. Cullimore in the science department was somehow involved as well. I’m still a little ambivalent about that “class” because it really entailed the typing in of a giant Snoopy ascii art calendar. So, on the one hand, I learned very little about programming, which was unfortunate. But lo and behold, by the time I was done, I was also very proficient on a Decwriter 110, knew what to do at a PDP/11 login prompt and even have had my own account where I could save and retrieve my programs, so I used that knowledge to continue coming in on Saturdays to tinker while the summer lasted. Because they were so new and rare, access to computers would be scarce for a while. Prices would come down over time, but my family just didn’t have the thousands of spare dollars it took in those days. I would continue to rent/beg or borrow whatever computer time I could get. As much as we might disdain the BASIC language, at least it’s reasonably portable, especially if you were going from one Microsoft interpreter to another, but even if you wound in AppleBASIC, you weren’t totally lost. So, these little BASIC masterpieces could be adapted to wherever you could manage to get access. And then, after renting a Vic20 from the public library for a couple of weeks, my parents surprised me with the news that we would be getting a Commodore 64. I don’t think it was anywhere within the family budget, so it was really a stretch for them, going out on a limb. I wasn’t especially familiar with that computer going in, but in retrospect it was the best possible choice for me, and it was literally the last thing anyone has ever bought for me. Everything else I own stems from that C64. It came with a machine language monitor that allowed me to get my feet wet. In those days a quick test of how fast a computer was, was to increment the screen color register in a tight loop and see what it looked like. In the BASIC interpreter you’d get a colorful flashing of the whole screen. But in machine code, it was DIFFERENT. The electron beam on the screen barely advanced an inch across the scanline before the color changed again. You could SEE the speed, and it was intoxicating. Did I just say that a 1MHz machine was intoxicating? It really was! The leap in speed and power from BASIC to assembly language was several orders of magnitude, not just one. Armed with the excellent Commodore 64 programmer’s reference manual and a pad of graph paper, I set out to revolutionize the video game industry. In truth, I wrote something similar to Galaga but with fewer attackers. By this time, I was smart enough to save programs, and this was important enough that I even was going to make my first backup. Except I screwed up… floppies didn’t come preformatted in those days and I managed to format my original! I’m still a little bitter about that one! But ironically in truth, that moment is now so burned into my brain that I have a pretty good mental image of what the game looked like, likely better than if I would have saved it! You’ll notice I’ve been saying machine language, and not assembly language, and at first it truly was, as the C64 monitor that I was using didn’t have an assembler built in yet! And it certainly didn’t have labels or line numbers, so if you wanted to insert an instruction, you’d have to jump out to free memory, do your work, and then jump back to where you were. It was the true definition of spaghetti code, something you don’t hear much about these days, but it was a real thing on early projects written in unstructured languages. The year I turned 16, I finally met a kindred soul who was doing the same thing as me – whiling away the long summer months coding assembly language on his Commodore 64 in his mom’s basement. His name was Kris and he knew a lot more than me, so I spent the rest of the summer standing over his shoulder watching him code and I learned by observation. He had actually lived across the street for many years, but it was a busy street and I wasn’t allowed to cross it as a little kid, so our meeting had to wait until I was driving age! In high school about the only class I truly enjoyed was computer science and I was fortunate to have a dedicated computer science instructor in the aptly named “Mr. Breit”, who was not only a great teacher in general but also a knowledgeable computer enthusiast in particular. Not unlike a Microsoft interview question, the assignments he came up with for us often had a trivial answer that could then be vastly improved. For example, one assignment was to find prime numbers. If it worked, you passed, but to get a great mark, it had to be fast, too. Just as you see some kids training for football for hours after school to be the fastest, Mr. Breit would keep the lab open for us and we’d hang around and optimize our prime sieves. By late high school, however, I sort of drifted away from computers for a year or two as I worried about cars and girls and whatever else teenaged boys care about. You’ll notice that I didn’t say I was particularly worried about school, which I was not. In fact, at some point in 12th grade, I just stopped going. My kids still will ask me “How did you drop out of high school? Wasn’t that a huge decision? Why did your mom even let you?” and it turns out that dropping out of school is one of those things that just happens slowly and inexorably, not overnight. You miss a class here, a test there, and pretty soon you’re working the night shift at 7-Eleven staring down a shiny blade at 4AM. And that’s when the call that saved me came out of the blue. I’d been drifting through life for the last year or two, not in school, working in warehouses and retail, and I had no grand plan. That’s when I got a call from John White, who was also a couple of years my senior and a true computer savant. He had gone to my high school where he was well known as a super genius. I’m literally still doing the odd project to replicate stuff I saw John do on 8-bit computers in the 1990s, because he really was just that gifted. And now he was working for a big video game company in Ottawa and they were desperate for good programmers, and did I know anything about the Commodore 64? When they asked if I could handle video interrupts and multiplex the sprite hardware, I confirmed that I was indeed well versed in such topics. That’s my way of saying “I’ll figure it out before I get there”, and I’ve done that too many times to count. But I’d watched Kris do similar tasks and I knew how the general idea worked, so I sat up late into the night and got a rough demo up and running. I made a VHS demo tape of the video output from the C64 the next morning and overnighted it to Ottawa so that I could await their judgement, which was that I should load all of my belongings into the trunk of my old Pontiac and head east if we could only agree on a dollar amount. I could tell they were desperate, so I really reached for it: I told them I would need at least $6000 to write the game over the course of four months. And yes, that works out to about 9 dollars per hour, but it sounded like a lot of money to me at the time! I moved into John’s attic in Ottawa and basically lived at work anyway, cranking out the game code in 6502 assembly. When I returned to Regina, Kris and I set up a small video game studio in the offices of Wicker Warehouse in the industrial area and we contracted out to companies like Electronic Arts and Accolade. Eventually I was making decent money under my new contracts, and things were looking up. Except I still hadn’t even finished high school! About that time a friend took me on a tour of U of R and the Adult Entry Program. Unfortunately, I didn’t even meet those relaxed requirements as I needed a number of classes I didn’t have. Rather than pursuing a GED, however, I drove down to the high school to chat with the principal. After all, I wasn’t a kid any more, I was a professional young man! I should be able to handle high school. Even though I was 21 years old, Mr. Grzesina kindly relented and let me in. It’s not just that being in high school at 21 years old is a little surreal…. For example, one day I was waiting outside in my car for the girl I was dating, and someone let her know her Dad was there to pick her up! And so, seven years into high school I finally qualified for the restricted Adult Entry Program here at the U of R. I had to take Math 90 and 91 and some remedial classes, but once I got into the swing of things, I turned out to be a pretty good student. I had never been one of those autodidacts that looks down upon higher education as too removed from practice. I was always the opposite – I craved whatever knowledge they had acquired and wanted to make it my own, even a little jealous that they had information I did not. But I was always fascinated by links to the practical. I remember sitting in the lecture hall and learning about Shannon’s theorem. I pulled out a piece of paper and did the quick math on a telephone’s signal to noise ratio and out popped a number surprisingly close to the maximum speed of the better modems of the day. I love it when theory predicts things correctly. The grade field on transcripts back then was only two digits wide, and there were two classes I came close to getting 100% in, but I never did it. In CS 200 I got 100% on every assignment and every test. And I can see the look on my son’s face which says “Oh no, Dad’s going to tell the JSR story again!” I went into the final exam with a 100% average and got 100% on all the programming sections. But then I made my one mistake. There was a large True or False section, and one of the questions was “For every JSR there must be an RTS” for which I said, “Well duh, True, every JSR needs an RTS”. Problem is, of course, many JSRs can share the same RTS, so while I’ve been arguing for 30 years that it depends on how you read the wording of the question, I still got it wrong. My other 99 came in one of my favorite classes, CS300. That was our assembly language programming class. Better yet, it was all done on the PDP-11 instruction set, and we might have been using the same PDP-11 that I’d been using as a kid, but I couldn’t tell for sure. Our major final project in that class was to write a game for the PDP-11 that ran on a terminal. Blackjack and Tic Tac Toe were common choices, but I wanted to try a video game. I got ahold of a VT-220 reference manual and figured out the various weird and special modes that are supported and put them all to good use for a version of the old arcade game Omega Race. It opened with a scrolling title intro like the Star Wars movie using the special double-height character mode and did character-based graphics. At 2400 or 9600 baud, in my mind it was super-impressive that it ran at all, but it wasn’t something you’d ever play twice for fun! My other two favorites were CS405, graphics, and CS440, the languages tour. In the languages class we took Prolog and Lisp and Ada a number of languages that I would never have likely touched if not for that class. As cool as functional programming was, I was very enamored with Ada because it always felt like if it compiled, it would probably run! That’s kind of how I feel about well written C#, my current favorite language that I never get to use! In the graphics class we started with the very basics and worked our way up to shading a simple house model, but all from first principles. In other words, we weren’t learning how to use OpenGL, we were learning how to write OpenGL, and that’s to me always been a key difference between higher education and a trade school system. Someone has to write the languages and tools and operating systems that the other programmers use. Meanwhile, back at home in the 80s, I had an Amiga, not a PC. In fact, I wouldn’t even own a PC before I worked for Microsoft, other than an old key-start Philips 286 that I literally pulled out of my father in law’s dumpster to learn Excel on. I really enjoyed the 68000 instruction set, as it reminded me of the PDP-11 in a way, and it was still made for humans to code in, unlike the RISC chips of a few years later that were really designed for the compilers, not the coders. I was working my way through the U of R, so on the side I started to write an app for the Amiga. It wasn’t a big market by any stretch, however, so I went commercial from the start rather than shareware. My first success was a program called HyperCache. The Amiga operating system, while advanced in the sense that it supported pre-emptive multitasking and similar features long before they became commonplace, completely lacked disk caching. The difference with and without my software on the machine was night and day, and it became quite popular. By “popular” I mean it payed my way through school, but I was still driving a rusty old 1975 Monte Carlo. So, hundreds and then thousands of copies, but never millions! I drew up the cover art in Corel Paint and we had the production run by a fellow down at the UofR’s Print services in the Admin building, so each day after school I’d head home with a bundle of HyperCache under my arm, and on days I couldn’t make it my girlfriend, now wife, Nikki, could be found shrink-wrapping software in between her own classes. During my second-to-last summer in college I was working at SaskTel and really not enjoying it. I still didn’t know what I was going to do for a living ultimately, and while I knew it would be programming, I didn’t know if it would be embedded microwave oven code or video games – I had no idea. Each day at lunch, I’d eat in the Cornwall Center food court and read a book. On one occasion I wandered into Coles bookstore and grabbed a copy of “Hard Drive – The Story of Microsoft and Bill Gates”. As an Amiga enthusiast Microsoft was always kind of the enemy, but I was still interested in learning more about the story behind them. And once I got into the book, “interested” is not the word I’d best use to describe it. Enthralled perhaps, or entranced. I don’t actually know – but certainly fascinated by the people, the projects, the environment, and how they got things done. I knew immediately, and with great certainty, where I wanted to be and what I wanted to do with my life! The only problem, however, was that I was sitting in the Regina Cornwall food court and Microsoft was, at the time, receiving over 100,000 job applications per year. They did recruit a bit out of Waterloo in Ontario, but suffice to say the U of R was not on their radar at the time. The odds of even getting an application noticed seemed very remote. So, what do to? My HyperCache program, like most software packages of that day, came with a little registration card that you could fill out and mail in so that I could notify you of upgrades and so on. I would come home after school and type in the stack that had arrived in the mail into a little database I’d written. Fortunately, even though it was barely 1990, I had included an email field on the form, so I went through digging for anyone I could find that had a Microsoft email address. I found two or three, and one fellow responded: Alistair Banks– he’s now in the UK so I’ve still never met him in person but remain in contact with him to this day and send him thank you notes on my major work anniversaries. I asked him where or to whom I should send a resume to maximize the chance of it being seen, and he gave me the greatest gift you can give to an aspiring graduate: the contact email of a few managers that were actively hiring new developers. I put together my resume and fired it off directly to them. Within a few weeks I had a phone interview with Ben Slivka, who ran the MS-DOS development team and who would later start the Internet Explorer project. Although even the phone screens with Microsoft were rather technically demanding, you didn’t have to code live on the phone, so I could hide my lack of x86 specific experience to some extent. I managed to net an interview loop in Redmond in February. Microsoft, to its great credit, “takes care of everything”. You just show up. Their legal department does the Visa work, for example, and they make all the travel arrangements. Although they assumed, being Canadian, that I’d fly through Toronto, because all Canadians must fly through Toronto! Microsoft interview loops used to be famously grueling. You spend the entire day there. You start with an HR interview to make sure you’re sane and bathed, and if so, you’re then off to a series of 5 one-hour coding interviews where you stand at a whiteboard and answer brain teasers and write C and assembly code until you can’t go any further. They push you until they stump and/or break you, and then depending on how those first 5 go, you might make it to the “As Appropriate” interview, which is the hiring manager. The answer is Boolean at each of the steps – Hire or No Hire. There are no maybes. You only get to the final interview if most everyone else has said “Hire”, since the team must be fully bought in on who gets hired: it’s not just up to the boss. The coding problems are simple tasks that you can fit on one whiteboard, like how to reverse a doubly linked list. Or how to count the number of bits that are set in a word. Attempt to factor a prime, that sort of thing where there’s an obvious and trivial approach that can be refined and then optimized. You want to see their thought process, and you want to see what they consider “good enough”. Take the case of counting the number of bits that are set in a 32-bit word. The naïve approach is to OR it with one, increment a count if true, shift the word, and repeat. Do that 32 times and you’ve got your answer. But that can be improved – you can stop as soon as the remaining word is zero, right? As the interviewer, you watch to see if the person picks up on those little optimizations as they chew on the problem. But what about long runs of zeros separated by ones, that seems like a waste of time. Well, it turns out that instead of ANDing with one, you AND with the number itself less one, and that way you only do one operation per actual bit that was set. If three bits are set, you only do three tests. In other words, there’s the simple answer, the fast answer and the “smart enough to get yourself hired” answer. I learned quickly that I’d made it, and right after final exams finished here at the U of R, I flew down. After a couple of hours of New Intern Orientation, they gave me an office, an account, and a copy of the MASM assembler. From there, it’s sink or swim. Remember, it’s still 1993: There’s no World Wide Web. There’s no Google or Wikipedia or Stack Overflow. I’ve never written a line of x86 code before, and they’re expecting me to be productive immediately. I’m sitting in an office with a chair, a desk, a used PC and a network cable. I can’t overstress the ‘straight into the fire part’ – it’s not like SaskTel where they give the intern a token task that he can’t screw up and won’t cause a problem when he inevitably does anyway. In contrast, Microsoft has me working on the core codebase on new features for MS-DOS, which is a multi-billion-dollar business. Bill Gates has us over to his house for a BBQ to talk about it over a few beers, and I’m supposed act like this is all normal for me. They take their interns seriously. There are only perhaps 5 or 6 developers in total on MS-DOS and most of that team is feverishly rewriting the hard disk compression engine to not use a hash-table, which it turns out the Stac Corporation managed to somehow get a patent on and that Microsoft lost a lawsuit over. Thus, it’s me and one other intern developer responsible for pretty much every new feature in the operating system, including the new setup program! To ease into things at least a little, my first task was to make DISKCOPY single pass. At least it’s a standalone app that I can assemble and build, something I can get my head around and tinker with. The prior implementation was limited to RAM only and so would require many swaps to complete a disk copy. The hardest part is finding a safe place to store a temporary copy of the floppy disk when there a million different possible system configurations. Remember, you accidentally store a temp file on a metered network share and that’s a class action lawsuit. If you assume the C drive is a hard drive perhaps you crash a helicopter, ATM, or defibrillator, who knows. That’s the biggest trick to coding for a billion machines. You’re coding one bull to be released into an infinite number of china shops and you’ve never seen any of them before. If it can break or go wrong, it will somewhere. It’s truly a completely different philosophy of coding. My next task was to limit the RAM use of the Doublespace compression program. As you might recall, memory back then was limited to 640K on MS-DOS so everything you could move above that barrier meant more free memory for useful things like your applications. And the x86 has an interesting feature where your segment and offset registers can add up to just slightly more than 1 megabyte. Basically, your pointer wraps around to the start of memory again… sometimes. It actually depends. If the A20 keyboard line is high, then pointers wrap around back to low memory. If the A20 line is low, they point past the 1M boundary. I used this hackery to move the engine up above the 1M boundary and stub every function call into it to do this funky pointer math and exploit the CPU bug, freeing up a fair bit of low memory. And that’s the kind of thing that got magazine cover stories back in the day! Next was to attempt to save the company money by putting the upgrade on a single floppy disk. While MS-DOS 6.2 might ship on 4 or 5 disks, what if you already have MS-DOS 6.0? What I did was to write an upgrade system that patched the 6.0 binaries in place with the deltas to make them into 6.2 binaries and discovered that all of those deltas combined were still small enough to all fit on a single floppy. Thus, we were able to offer the MS-DOS 6.22 “Step Up” upgrade on a single disk, saving several dollars per copy, multiplied by tens of millions of copies. A single little project by an intern generated millions in savings. After that the real work began. Because of my experience with HyperCache, they appointed me to write the SmartDrv cache engine to be more generic and support all kinds of block level devices, most notably the CD-ROMS that were just coming into the market at the time. Caching made an epic performance difference on CDs. All of this work took only three months, which I still have trouble believing when I look back at it. If I had to schedule that amount of work now, I’d be looking at a year, but it’s amazing what you can accomplish when you’re young and broke and hungry! Even though I felt I had done a good job, there was no guarantee that an internship would ever translate into a full-time position. When my summer was over, I came back to Regina to go back to class and hope the phone might ring one day. And I remember exactly where I was and what I was doing when that offer call came in that fall. I was being offered a full-time software design engineer position in Redmond with complete relocation benefits, visa and immigration assistance, the works. And the salary? Are you ready? You’ve all heard of the Microsoft millionaires of that era… well, it was $35,000 a year. That’s all they were paying, but I didn’t care. I didn’t negotiate. Whatever it was, it was enough. I wasn’t in it for the money, even if I thought I was at the time. It wasn’t until the UPS drivers went on strike that summer that I found out they were making 50% more than I was! But I didn’t care, and there were these other things called “stock options?” that worked out OK in the end, so don’t feel bad for me. What I found especially interesting was to compare notes with the other new hires from places like MIT and Harvard. They got the -exact- same offer as I did, right down to the penny. I don’t know what it costs to go to Harvard, but I’d bet you could save 15% or more by switching to the U of R. Microsoft again suggested that when I fly down, I come through Toronto because they had been having trouble in Vancouver – too many Canadians coming through to work for Microsoft all of a sudden, and they were starting to push back hard on the visas. Toronto being a little silly, we agreed on Calgary. My fiancé and I flew in and I got taken into the glass room for my immigration interview. As she watched from the outside, she could see him flailing his arms and turning red in the face and yelling. Clearly, I was headed back to Canada and my Microsoft dreams were not to be. But what she didn’t know, because she couldn’t hear anything, was that he had already long since stamped and approved my work Visa. He was upset because every time he printed a document in Word it would print blank piece of paper at the end, and it was wasting paper, and since I was going to work for Microsoft, he wanted me to fix it for him. That May I flew back one weekend, convocated from the U of R on Friday, got married on Saturday, and then permanently relocated to the US on Monday. And by the way, if you’re planning a wedding, I strongly endorse the approach of hiding out in another country while all the hard decisions are made for you. Then just fly in the day before, get married, and fly back out. Truly hassle free! As for my career, other than that internship in MS-DOS, I managed to dodge the x86’s ugly 16 bit mode entirely. While the 16 bit guys were working feverishly on Windows 95 on the other side of campus, we saw ourselves as the “real” programmers, working under David Cutler who had just finished the VMS operating system in perfect hand-coded assembly language, and we produced “real” code. In pure C, for multiple platforms. In a somewhat ironic turn I still didn’t have a PC as my main machine because I was assigned the job of porting the Win95 user interface over to RISC chips, so I had a MIPS R4000 workstation instead. Working at Microsoft before and after my final semester at school led to something that I think is entertaining, though it might have been a source of annoyance for Dr. Hamilton at the time: I had run off before my fourth year to write major portions of the world’s most popular operating system. I guess it’s perhaps somewhat fitting that my work on MS-DOS came in between the “Introduction to Operating Systems” and the “Advanced Operating Systems” class. If nothing else, if I wasn’t the only guy in the operating systems classes with a published OS under his belt, at least I’d bet mine was the best-selling! I spent the majority of my career in Windows NT, which became Windows XP, and is today Windows 10. I continued to write projects at home as well, which I’d sell as shareware. One such example was a product called VisualZip that let you treat compressed zip archives as if they were regular directories, browsing down inside them and so on. I was selling maybe a dozen copies a day when I received a call early one morning from Microsoft, who was interested in purchasing VisualZip for inclusion in the Windows operating system, and would I be interested in coming in to talk about? I hadn’t left for work yet, so I asked where their office was located so I could stop on by. This led to some awkward confusion until we finally realized that the person I was dealing with didn’t know I already worked there. They had just cold-called the author of the program, who happened to be me, at home. We came to an agreement where Microsoft purchased VisualZIP from me and included it the operating system. I’ll abbreviate a long and complicated story to just say that when your options are “take the deal” or “quit your day job to compete with us on your own instead” you tend to take the deal! The Windows Task Manager that you’ve no doubt seen also began that way, as it was another shareware app I wrote in my den that I was planning to sell on the side, but when Dave Cutler saw it he agreed to let me check it into the product, so I donated that one to the cause. Surprisingly, both VisualZip and Task Manager are still alive and well in the product some 25 years later. A large part of my early work was to take all of the code that was coming out of the Windows 95 and Windows 98 projects and rewrite them for NT. That meant taking code intended for the X86 processor running 8-bit ANSI text in the home and making it ready for server-level quality on a RISC machine with 16-bit Unicode text. Because char and byte are used interchangeably by most C programmers, it really means you’re changing the assumption about how big a byte is, and it becomes 16 bits, and almost all code breaks immediately. There were just dozens of other issues as well, like they assumed a broadcast style small network, while we were on TCP/IP with long timeouts, so many things became entire architectural rewrites. Of course, on our behalf we were immune from the realities of being forced to be compatible with a million random software titles going back to the 1970s, not to mention operating with a lot fewer system resources. And so, you can imagine that when your job is to take someone else’s code, tell them why it sucks, fix it properly, and give it back to them – which is what we did, day after day, week after month – some tensions develop between the teams. And then they merged those teams, which, as you might imagine, didn’t go so well, I wound up moving to head up the copy protection team. [Await chorus of boos] Yes, it’s true. I’m the evil monster responsible for making you enter a product key in order to activate Windows. Or at least I’m the guy that is responsible for making sure two different people in the universe don’t use the same key. There are two major tensions in such copy protection. You cannot annoy the users, at least not any more than the bare minimum required, and you can’t let normal, everyday people steal the product. And the worst case to me is annoying regular users without slowing the real pirates down. I can’t go into all of the cool technical details of self-modifying code that decrypts itself on the fly and all of that, because I suppose they’re all still trade secrets, but suffice to say I think it was almost 18 months before an easily pirated version of Windows XP actually hit the web, so in my mind the protection was a great success. On the side I had been selling three small performance utilities for Windows – MemTurbo, NetTurbo, and a program called ClipTrakker. On a good day I might be sending out two dozen mailers, making a few extra hundred dollars that day. And then one day I discovered Internet advertising. This was in the Wild West days of popups, no less. I was by no means the first – but my ads were very effective. When you are selling software on the Internet your two basic, fundamental metrics are how much did it cost me, in advertising and everything else, to sell it? And how much did I earn? Computers are great about tracking those details, and in those very early days I found that it cost about $10 in advertising to sell a $50 product, for a profit of 40 dollars per copy. You just rinse and repeat, as fast and as often as you could. And so, I bought MILLIONS of advertising impressions that ultimately became BILLIONS of impressions over time. My problem was that now, overnight, I was selling 1000 copies a day. It sounds great and it IS great, but I had to come home after work to duplicate a 1000 floppies, and then I had to print 1000 mailers, a 1000 diskette labels, I had to get them assembled, and there would be about 2500 emails to answer and probably 50 returns to process and it was just me and my wife! And I had two kids and a dog and a rather demanding day job. So, we hired friends and family to come in and put stickers on disks and answer emails as fast as we could until we eventually got caught up. All this was making it rather hard to pay attention to my day job, but Microsoft was great, and they allowed me to take a 3 month leave of absence to figure out what it was that I wanted to do with my life. And it turned out that what I really wanted to do at that age, like a lot of people, was just to make a lot of money and be my own boss. As a result, I turned my back on everything I had come to love about my day job to focus on my side business, which was now the main business. As of this point, at least, I’ve never gone back to work another day for anyone else. Running your own busy software business is fun and exciting, and I had a great time doing it. I hand wired every office for Cat5 and hand-terminated every cable myself, because I wanted things just so, but in reality, I’d already worked for the world’s biggest software company – I didn’t want to try to build a little clone of them. And to be honest, when I was peddling my bike down here to the computer labs on Saturday mornings as a kid it was NOT because I wanted to manage a group of other productive kids! I wanted to program, to code, to figure stuff out and write hard logic that would impress myself and my friends. And that’s how I wanted to spend my days too, not with customers and program managers and lawyers. In addition to the boring business side of the company, the live data reporting, analysis and AI systems that we built to optimize sales were fascinating. But in the end, like the company itself, it was all in the service of simply making money. My first attempt to retire away from it was to hire professional management, but that didn’t go especially well. I ultimately decided to sell the business entirely to Support.com down in California and officially retired to sit around and write more “fun” code all day! There’s a great book I recommend called Showstopper about the early development of Windows NT. In it they discuss a conversation between a friend of mine, BobDay, and his wife, when they were talking about what BobDay really likes to do with his free time. Bob likes to code. Well, there must be -something- else he likes. Cars maybe? Sports? Science Fiction? No, Bob likes to code, and that’s what Bob still does too. And it’s what I do as well… I just love to code. So sure, I get to spend more time with the family and I’ve travelled a little but, mostly retiring has meant I get to write as much code as a I want! To be fair, though, I also spend a lot of time restoring antique cars, and I undertake a lot of mechanical projects like solar panels for my shop or this microcontroller controlled, 1,500hp twin-turbo, fuel-injected, intercooled big block engine that I built from cheap eBay parts. So, I actually alternate – I code obsessively until I need a break, then undertake some other project in another discipline until I miss coding again. Why the focus on writing new code? I think it is perhaps because that is the biggest difference between expectation and reality as a new programmer entering the workforce. As a student you come to think that you’ll be crafting great template libraries that drive some super-complex production process with great elegance, but in your first years you’re really just tracking down an off-by-one string buffer error in some ancient client billing code at the Saskatchewan Wheat Pool. [Who passed on me, by the way.] Unless you wind up at a startup, and maybe even then, you’ll start out fixing other people’s code. So, your experience as a student writing 95% new code becomes 95% debugging and maintaining other people’s code. That will change over time as you gain experience, and debugging other people’s mistakes is actually a great and effective way to develop that experience. And because I love to write new code as much as the next person, in the last couple of years I will pick a project – whether it’s writing shaders that look like natural water phenomena or running my home automation. I’ll start a new notebook and just start building. Anything I start like that has maybe a 20% chance of getting truly finished with a website and help files, but I think that’s still a pretty good ratio for someone in my position. The hardest and easiest part is finding information about what you’re working on. By that I mean we have the blessing and curse of StackOverflow, which can be a bit of a rough and tumble environment if you’re new to a subject. If you can find the ear of an expert, you can learn a great deal quickly, but if your topic is too general, like “How do I get started coding in C on the Mac”, it can be a rough crowd some days. My project this summer was to build a cool LED audio spectrum analyzer. Back in high school John White had built one out of discrete components like filters and op amps, and there was an entire daughter board assembled on top of the motherboard of his PET2001. But I was going to use a modern microcontroller, and so I wanted to do it all on one chip. The ESP32 has two CPU cores and they each run at 240MHz, so I have one core continually processing the math FFT while the other core is continually drawing the display. As those cores are churning away, the chip wakes up 44000 times a second to sample the digital audio. The chip is really quite about at its limits, and I love projects that do that – it’s like when you get your washing machine working really hard on a cycle. If no one else is home, sometimes I’ll still jamb the lid switch and sit back and watch the machine at work, even at the age of 50, and I really have no idea why. Now of course a spectrum analyzer has been done before, and it will be done again – and again – because it’s a cool and beautiful programming project and when you’re done you wind up with a lot of das blinkin lights. And the more das blinking lights in your life, the better. And that almost brings us full circle – from a childhood of tinkering to a retirement of tinkering. Although advice wasn’t really my goal, in summary I will offer two little suggestions for those just entering the field. My first piece of advice, and it might even be bad advice financially, is simply that if you love coding, find a career path at a company that will let you code and advance until you’ve got it out of your system. Resist the temptation wherein you code only briefly before you start accumulating reports and management duties and living in meetings unless that’s what you really want. David Cutler is 76 years old, has 30 put in years at Microsoft alone, and he still codes all day every day. My other is to find mentors. I learned a great deal from a small handful of great teachers and professors and I imprinted on a few key people that were about my own age, give or take, but I never had an official industry mentor to lean on and to learn the ropes from during my career. This sounds obvious in any field, but I contend it’s much more challenging in computer science because the people you really want to talk to may not be the chatty, outgoing, ebullient folks you’d find in sales and marketing or HR. They say there is a wide spectrum for people with Asperger’s, and I think I’m likely somewhere on it myself, though off in what I like to call “the non-visible part of the spectrum”. But I don’t think alone out there! One of the guys on my team at Microsoft had actually won an Oscar for previous work at Pixar, but even he said they give out the technical Oscars on a different night, with no fanfare or red carpet or acceptance speeches. That makes any opportunity to speak about a technical career all the more rare, and so for that I am deeply indebted to you for your time tonight, and I want to thank you all for coming out! Goodnight.
Info
Channel: Dave's Garage
Views: 80,827
Rating: undefined out of 5
Keywords: zipfolders, David Plummer, Microsoft, Regina, U of R, Computer Science, Careers, interview, ms-dos, windows, task manager, Space cadet pinball, davepl, bill gates, windows 95, university of regina, computer science career, finding a computer science job
Id: Ig_5syuWUh0
Channel Id: undefined
Length: 41min 13sec (2473 seconds)
Published: Sat Dec 08 2018
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.