Spreadsheet programfor VISIble CALCulator Spreadsheet programming language by Dan Bricklin and Bob Frankston Pioneer spreadhseet system - first "killer app", and initiator of a design that still dominates its class Related languages
References: Introduction Many people justifiably ask what today's personal computers are good for, aside from playing games. Typically equipped with a Basic Interpreter as the human interface, these machines either require extensive programming by the user or else require the purchase (when they are available) of restrictive canned programs for specific appli-cations. Few people can be expected to be able or willing to expend the effort to write programs in BASIC (or PASCAL) for simple applications. Canned packages tend to be very specific, Procrustean beds to which the user's application must conform. This is not to say that there is no way to make effective use of the personal computer. As we can see by the acceptance of a primitive personal computer, the pocket calculator, a flexible aid will be used extensively. We would like to capture the convenience and familiarity of the calculator in a personal computer. Looking at the way most people use calculators - normally with the aid of a sheet of paper to plan their work and record intermediate results - we can see how the calculator plus a flexible video screen could be a powerful tool. This is the premise or starting point for VisiCalc. How can we make the personal computer with its CRT screen an improvement over a sheet of paper? One limit of a calculator and paper is the difficulty of erasing and recal-culating. How often do people sit down with these familiar tools and try to work out a problem, be it income tax calculations, checking book balancing, business forecasting or whatever, only to finally give up or settle for a partial answer because of the difficulty of dealing with the recalculations necessary either to correct for errors or to try different starting values? How nice it would be if the paper and the cal-culator worked together so that whenever you changed anything on the paper the other values would automatically be recalculated. VisiCalc addresses these needs. It is like a magic sheet of paper that can perform calculations and recalculations with ease. Basically, VisiCalc represents a very large sheet of paper organized into rows and columns of entries. By simply moving a cursor to an entry you can place values and expressions to be calculated on the screen. You can also type comments and titles. Of course, being limited to the current personal computers, you must view this sheet of paper through the window of the CRT screen. VisiCalc does, though, let you scroll through this 'window' in all four directions over the sheet of paper. The benefits of VisiCalc go beyond its humble origins as calculating paper. It represents a way of using computers that allows the user to ask 'what if' questions that would be too tedious to carry out by hand. Not only are such questions important in planning, they can be vital to the user in learning and coming to understand his own application. Both the words 'serendipity' and 'synergy' are appropriate for VisiCalc. As VisiCalc evolved it showed us how effective personal computers can be as streamlined interactive tools. But, VisiCalc was not simply a lucky extrapolation of the basic ideas. Both authors of VisiCalc have extensive background in using large mainframes as personal computers and in creating systems to be used by large numbers of people with little training. Word processing background was of special importance since it provided experience in designing screen-based, highly interactive interfaces. More important for VisiCalc, it made us very aware of the need for a carefully designed and tuned user interface. This interface was constantly refined during the development process. Extract: The software problem The software problem As personal computers become more common, the software problem becomes the limiting factor in the ability to use the personal computer. The current attempt to get every-one to learn and use BASIC is not the answer. Much of what is involved in programming is conceptualization and description - the hard parts of problem solving. Even the ultimate in general-purpose procedural languages will not remove the difficulties in programming. These languages are, of course, necessary for those people who do programming, such as the personal computer software engineers. But there are simply not enough programmers available to write all of the canned applications that can be anticipated. Thus our task as professionals becomes one of finding the appropriate level of tools that correspond to the level at which the user deals with an application. On large computers this has been done with database languages such as IBM's Query By Example (QBE). At MIT, the Macsyma system provides a powerful tool for doing symbolic manipulation of mathematical expressions. For personal computers, VisiCalc presents an interface to the user which builds upon that with which he is already familiar. It is, of course, constrained by the memory and processing limits of the current generation of personal computers. Even simple decisions were only simple in context. They were all intertwined and I will try to reduce the confusion by separating aspects of implementation, design and business. External link: Online copy Extract: Calculations and Formulas Calculations and Formulas At its heart, VisiCalc is about numbers. One of the early decisions we made was to use decimal arithmetic so that the errors would be the same one that an accountant would see using a decimal calculator. In retrospect this was a bad decision because people turn out to not care and it made calculations much slower than they would have been in binary. We did want to have enough precision to handle large numbers for both scientific calculations and in the unrealistic case it would be used to calculate the United States budget. Of course, as it turned out, that was one of the real applications. Since the formulas did depend on each other the order of (re)calculation made a difference. The first idea was to follow the dependency chains but this would have involved keeping pointers and that would take up memory. We realized that normal spreadsheets were simple and could be calculated in either row or column order and errors would usually become obvious right away. Later spreadsheets touted "natural order" as a major feature but for the Apple ][ I think we made the right tradeoff. The functions or, as they were called, the @functions each had a story. Some, like @sum seem simple enough but we did have to deal with ranges (as in A1+AIU-A2). @average skipped over empty cells and @count could be used to find the count of nonempty cells. For @npv (net present value) we decided on a formula which was different from that used in COBOL (a programming language). The COBOL committee was later asked to be compatible with VisiCalc though I don't think they made the change. One of the early applications for VisiCalc was my 1979 tax form. I created @lookup for that purpose. The transcendental functions like @sin were going to be a problem so we decided to omit them in the initial version but, unfortunately, in this review of VisiCalc, Carl Helmers praised that aspect of VisiCalc and we felt obliged to implement them. This was a real pain because I had to find books on such functions and how to compute them for the appropriate precision and range of values and all this had to be done in very little space. It took a week or two but eventually we did them. At this point Dan was available and joined in the programming. Resources
|