![]() ![]() Years that are divisible by 100 are not leap years, unless they’re also divisible by 400. “Good guess, but no cigar,” Ed said, and left me wondering for a while. 1900 was a leap year! It’s divisible by 4!” I went to find an Excel developer who was old enough to remember why. I started working through the various date and time functions in Basic and the date and time functions in Excel, trying things out, when I noticed something strange in the Visual Basic documentation: Basic uses Decemas the epoch instead of January 1, 1900, but for some reason, today’s date was the same in Excel as it was in Basic. In Excel, today’s date, June 16, 2006, is stored as 38884, counting days where January 1st, 1900 is 1. The integer part of the number is the number of days since some agreed-upon date in the past, called the epoch. In most modern programming environments, dates are stored as real numbers. Later that day, I had some time, so I started working on figuring out if Basic had enough date and time functions to do all the things you could do in Excel. I rushed to get the spec printed and sent it over to his office. It was basically one ream of laser-printed paper. I was told to send a copy of my spec to his office in preparation for the review. Basically every major important feature got reviewed by Bill Gates. In those days we used to have these things called BillG reviews. (“Waterfall,” you snicker yeah yeah shut up.) I think it was 500 pages by the time it was done. Then I sat down to write the Excel Basic spec, a huge document that grew to hundreds of pages. And I got two pet syntactic features into the language: For Each, stolen from csh, and With, stolen from Pascal. COM Automation, because the original design for Silver required a deep understanding of type systems that the kinds of people who program macros don’t care about. I got them to add late binding, which became known as IDispatch, a.k.a. I got them to add Variants, a union data type that could hold any other type, because otherwise you couldn’t store the contents of a spreadsheet cell in a variable without a switch statement. I managed to get four pet features added to Basic. The Excel team convinced the Basic team that what we really needed was some kind of Visual Basic for Excel. MacroMan was, as I said, misguided, and it took some persuading, but it was eventually shut down. The marketing manager for Silver, Bob Wyman, yes that Bob Wyman, had only one person he had to sell his technology to: me. There was a misguided effort underway with the code name MacroMan, and another effort to make Object-Oriented Basic code-named “Silver.” The Silver team was told that they had one client for their product: Excel. Visual Basic 1.0 had just come out, and it was pretty friggin’ cool. I spend some time negotiating with various development groups. The implication was that the solution would have something to do with the Basic programming language. My title was “Program Manager.” I was supposed to come up with a solution to this problem. On June 17, 1991, I started working for Microsoft on the Excel team. ![]() The only thing that made it look reasonable was that it looked great compared to Lotus macros, which were nothing more than a sequence of keystrokes entered as a long string into a worksheet cell. It had advanced features like “Goto” but the labels were actually physically invisible. It was a severely dysfunctional programming language without variables (you had to store values in cells on a worksheet), without locals, without subroutine calls: in short it was almost completely unmaintainable. In the olden days, Excel had a very awkward programming language without a name. ![]()
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |