This book is addressed to anyone who implements large softwaresystems or who wants to know the considerations that go into suchsystems. It focuses around text editors. Although not required, anunderstanding of programming will be helpful.
Computers have physical limitations. These limitations include thenature of user-interface devices; CPU performance; memory constraints,both physical and virtual; and disk capacity and transfer speed.Computer programs that perform text editing must operate within theselimitations. This book examines those limitations, explores tradeoffsamong them and the algorithms that implement specific tradeoffs, andprovides general guidance to anyone who wants to understand how toimplement a text editor or how to perform editing in general.
I do not present the complete source code to an editor, nor is thesource code available on disk (at least from me: see Appendix B). Forthat matter, you won't even see a completely worked out algorithm.Rather, this book teaches the craft of text editing so that you canunderstand how to construct your own editor.
This chapter will only review those aspects of users that are mostrelevant to text editing: full discussions of users and design can anddo fill many books in themselves, some of which are listed in theBibliography. This chapter (and this book) does not address thequestion of non-people users.
Experience from the field of artificial intelligence can shed morelight on this issue. AI researchers found it (comparatively) easy towrite programs that can handle advanced mathematics such as freshmancalculus. However, as the researchers pushed on to handle such easy(to most people) areas as filling in coloring books, the programmingproblems got harder and harder. Some of this difficulty is due to thefact that the task of teaching college-level courses is wellunderstood--especially by college professors--but teaching coloring isnot. For example, how many textbooks have you seen on "how tocolor"? More to the point, computers have been designed toprocess information in a certain way, one that is mathematicallyelegant, but not necessarily related to how people's minds work. Aspeople write programs for more and more "basic" tasks, thisdifference becomes increasingly apparent.
Second, there is no carryover from one part of the editing task toanother. Sure, it may be easier to write the program, but the taskof editing text strings and comments to the program has not beenaddressed by the programming-language editing commands. The userstill needs a full-feature editor to handle the strings constants, thecomments, and other documentation that are an integral part of anyprogramming project. By adding the structure editor, either acompletely separate editor or a complicated new mode has beenintroduced and consistency has been lost. (I will completely skipover the question of how to handle the programmer that is editing morethan one programming language. I will point out that I have worked onprojects where I have been editing programs written in more than fivelanguages at the same time.) 2b1af7f3a8