Keep in mind that this was a product made in the times when Microsoft still had yet to IPO and most product was still touched by Bill Gates. And I think largely why Excel emerged as the spreadsheet leader was the ethos behind Bill and the Excel team.
In fact, Klunder gives credit to Gates himself for the idea behind how to implement the product-defining intelligent recalc feature, despite Gates telling him he implemented something completely different. The story pares down to a team that focused on long-term objectives and built up a system that could and would be be a market leader for decades to come.
It took something that only a few people could process data and allowed the world to touch it, see it, and manipulate it. There was no longer just a black box. The concept of enabling access is something we as users often take for granted, but a principle that technologists have been leveraging for decades.
This access bridge simply needs to identify a constraint for many individuals and to remove it, ideally with technology, just as Klunder enabled high computation on slow machines with intelligent calc. Without these tools, only a small subset of individuals with tailored experience could participate. Now, the whole world can. And what can be built to enable these individuals? PS: Come join the conversation on Twitter. Therapist: And what do we do when we're feeling restless? Stay up to date!
Microsoft Excel? But I do want to reflect on it. Even after decades of innovation, I want to talk about Excel. From light-weight databases, to todo-lists and scheduling, data gathering, data analysis, and sophisticated business processing. These are all examples of common uses for spreadsheet software, and this is obviously by no means a comprehensive list of the things spreadsheets are used for. I love Excel! These are also referred to as constructors, tag, and qualifier.
Not all elements are present in all variable names; the only part that is always present is the base type. This type should not be confused with the types supported directly by the programming language; most types are application specific. For example, an 1b1 type could refer to a structure containing symbol information; a co could be a value specifying a color. Type that are not defined must be added As the above exam- ples indicate, tags should be short typically two or three letters and somewhat mnemonic.
Because of the brevity, the mnemonic value will be useful only as a reminder to someone who knows the application, and has been told what the basic types are; the name will not be sufficient to inform by itself a casual viewer what is being referred to. For example, a co could just as easily refer to a geometric coordinate, or to a commanding officer.
Within the context of a given application, however, a co would always have a specific meaning; all co's would refer to the same type of object, and all references to such an object would use the term co. One should resist the natural first impulse to use a short descriptive generic English term as a type name.
This is almost always a mistake. One should not preempt the most useful English phrases for the provincial purposes of any given version of a given program. Chances are that the same generic term could be equally applicable to many more types in the same program. How will we know which is the one with the pretty "logical" name, and which have the more arbitrary variants typically obtained by omitting various vowels or by other disfigurement?
Also, in communicating with other pro- grammers, how do we distinguish the generic use of the com- mon term from the reserved technical usage? In practice, it seems best to use some abbreviated or form of the generic term, or perhaps an acronym. In speech, the tag may be spelled out, or a pronounceable nickname may be used.
In time, the exact derivation of the tag may be forgotten, but its meaning will still be clear. As is probably obvious from the above, it is essential that all tags used in a given application be clearly documented. This is extremely useful in helping a new programmer learn the code; it not only enables him or her to decode the otherwise cryptic names, but it also serves to describe the underlying concepts of the program, since the data types tend to determine how the program works.
It is also worth pointing out that this is not nearly as onerous as it sounds; while there may be tens of thousands of variables in a program, the number of types is likely to be quite small. Although most types are particular to a given application, there are a few standard ones that appear in many different ones; synonyms for these types should never be used:.
There are some more types that appear in many applications; they should only be used for the most generic purposes:. There a few types that are used widely within the applications group, but may not be applicable to others:. Base types are not by themselves sufficient to fully describe the type of a variable, since variables often refer to more complex items.
The more complex items are always derived from some combination of simple items, with a few operations. For example, there may be a pointer to an lbl, or an array of them, or a count of co's. These operations are represented in Hungarian by prefixes; the combination of the prefixes and base type represent the complete type of an entity. Note that a type may consist of multiple prefixes in addition to the base type e.
The term constructor is used because a new type is constructed from the combination of the operation and the base type. In theory, new prefixes can be created, just as new types are routinely created for each application.
In practice, very few new prefixes have been created over the years, as the set that already exists is rather comprehensive for operations likely to be applied to types. Prefixes that have been added tend to deal with the specifics of machine architecture, and are variations on existing prefixes i. Once can go overboard in refusing to create a new prefix, however; some new concepts really are logically expressed as prefixes, not types.
A couple of examples of incorrect usage in the list below derived from the reluctance to create a new prefix. Since the prefixes and base types both appear in lower case, with no separating punctuation, ambiguity can arise.
Is pfc a tag of its own e. Such questions can be answered only if one is familiar with the specific types used in a program. To avoid problems like this it is often wise to avoid creat- ing base type names that begin with any of the common pre- fixes. In practice, ambiguity does not seem to be a prob- lem.
The idea of additional punctuation to remove the ambi- guity has been shown to be impractical. While the prefixes and base type are sufficient to fully specify the type of a variable, this may not be sufficient to distinguish the vable. If there are two variables of the same type within the same context, further specification is required to disambiguate. This is done with qualifiers. A qualifier is a short descriptive word or facsimile; good English is not required that indicates what the variable is used for.
In some cases, multiple words may be used. Some distinctive punctuation should be used to separate the qual ifier from the type; in C and other languages that support it, this is done by making the first letter of the qualifier upper-case.
If multiple words are used, the first letter of each should be upper-case; the mainder of the name, both type and quali always lower-case. There is one special case to watch out for; defined constants specifying the size of a type are often of the form cbFOO or cwFOO, where foo is the type. Strictly speaking only the F in FOO should be capitalized, but the incorrect usage is fairly common.
Exactly what constitutes a naming context is language specific; within C the contexts are individual blocks com pound statements , procedures, data structures for naming fields , or the entire program globals. As a matter of good programming style, it is not recommended that hiding of names be used; this means that any context should be con sidered to include all of its subcontexts. In other words, don't give a local the same name as a global.
If there is no conflict within a given context only one variable of a given type , it is not necessary to use a qualifier; the type alone serves to identify the variable. In small con texts data structures or small procedures , a qualifier should not be used except in case of conflict; in larger contexts it is often a good idea to use a qualifier even when not necessary, since later modification of the code may make it necessary. In cases of ambiguity, one of the vari ables may be left with no qualifier; this should only be done if it is clearly more important than the other vari ables of the same type no qualifier implies primary usage.
Since many uses of variables fall into the same basic categories, there are several standard qualifiers.
If applicable, one of these should be used, since they specify meaning with no chance of confusion. In the case of multi ple word qualifiers, the order of the words is not crucial, and should be chosen for clarity; if one of the words is a standard qualifier, it should probably come last unfor tunately, this suggestion is by no means uniformly fol lowed. The standard qualifiers are:. When possible, structure members are named the same way variables are.
Since the context is small only the structure , conflicts are less likely, and qualifiers are often neither needed nor used. If the language does not support separate contexts for each structure e. Thus, the following declarations are equivalent the one on the left is for C, the one on the right for masm :.
In some cases, one type is a special instance of another type. When this is the case, the special instance names should consist of the base instance name plus a character. Unfortunately, the simple rules used for variable names do not work as well for procedures.
Whereas the type of a variable is always quite important, specifying how that variable may be used, the important part of a procedure is typically what it does; this is especially true for procedures that don't return a value. In addition, the context for procedures is usually the entire program, so there is more chance for conflict. To handle these issues, a few modifications are made to the simple rules:. Macros should be handled exactly the same way as procedures; for historical reasons, you may find some macros that do not follow the correct rules e.
Labels can be considered to be a variant on procedures; they are after all effectively identifiers specifying a chunk of code. Within C, they are named similarly to procedures; they obviously neither return a value nor take parameters, so no types are specified. The first letter is upper case, and the name itself is just a few words specifying the condition that causes the label to be reached either by falling though, or via a goto.
Since the context of a label is limited to its procedure, these can be pretty generic terms; typical examples are GotErr, OutOfMem, LoopDone.
Within assembly, labels are somewhat trickier. Today there are 13 versions of Excel for Windows and 13 versions for Mac. According to some researchers in it was created stable version of Excel for MS-DOS, but it is never launched officially. For Windows:. For Apple:. Interesting Facts about Microsoft Excel. In our page Microsoft Resources you will find the links to some of the most authoritative websites devoted to Excel — the greatest software ever created by Microsoft.
And finally, do not forget — Happy th Birthday, Excel! Notify me of follow-up comments by email. Notify me of new posts by email. This site uses Akismet to reduce spam. Learn how your comment data is processed. This website uses cookies so that we can provide you with the best user experience possible.
Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful. Strictly Necessary Cookie should be enabled at all times so that we can save your preferences for cookie settings. If you disable this cookie, we will not be able to save your preferences.
This means that every time you visit this website you will need to enable or disable cookies again. Facebook Twitter. Deepfake researchers have long feared the day this would arrive.
By Karen Hao archive page. By Charlotte Jee archive page. By Lucas Laursen archive page. By Tanya Basu archive page. Stay connected Illustration by Rose Wong.
0コメント