In the preface to the first edition of the remarkable book “Structure and Interpretation of Computer Programs” (SICP) by Harold Abelson and Gerald J Sassman, there is a quote from Marvin Minsky’s article “Why programming is a good way of expressing obscure and hazy ideas.” The quote is short and full I did not come across a publication in Russian.
Below you can read the translation of this article, and although it was written for a long time, it is still interesting to get acquainted with the thoughts of such a person as Marvin Minsky, the original article can be found
here .
This article is a slightly edited version of a chapter published in Design and Planning II - Computers in Design and Communication (Martin Krampen and Peter Seitz, eds.), Visual Committee Books , Hastings House Publishers, New York, 1967.)
There is a generally accepted and widespread view that computers can only do what they have been programmed for. This false proposition is based on the confusion that exists between form and content. Strict grammar does not mean a rigorous description of the process. The programmer must be very accurate, following the rules of computer grammar, but the content that he wants to express using these rules remains free and is not limited by anything. And the severity of grammar is not due to the computer, but to the programmer who uses it. A programmer doesn’t even have to be very precise in formulating his own ideas: he can have a certain range of valid computer answers in his mind, and it’s enough that computer answers do not go beyond that range. The programmer does not need to limit the computer to specific processes. Under the weight of doubts, he may ask the computer to generate new processes, or he may suggest certain rules of choice and “advise” the computer what choice to make. Thus, computers do not need to be programmed, too clearly and clearly formulating what needs to be done and how exactly it should be done.
The reasoning here is not so much about “design,” but about how computers can help us in our work. For a variety of reasons, people usually underestimate these opportunities. To begin with, I would like to warn about one mistake: do not, like many, who believe that he fully understands the situation, take a “moderate” position. Science fiction writers, scientists of all stripes, economists, analysts, psychologists, and even logicians often repeat, trying to convince everyone that computers can never truly think. "You should not assume that machines can think like people: they can only do what the program contains, they cannot be original and creative." We have all heard something similar and most of us agree with this point of view.
It is easy to understand why humanities scholars love to rant about the obscure nature of the thinking process, because from this it is easy to make a false conclusion about the connection of such ambiguity with the unique nature of human thinking. But the conclusion itself is not important. The whole fallacy of this discussion lies in the widespread conviction that it is impossible to write a computer program that would do something that goes beyond a very clearly stated task, a clear statement of what should be done, and how it should be done. This belief is widely promoted by both scientists (and even “computer scientists”) and the humanities.
')
Everything that we are told about the limitedness of computers usually takes such general forms: “The computer cannot create. He can only do what he was told. If the process is not formulated very accurately, the computer will not be able to carry it out. ” In a sense, this is correct, in the other - absolutely false. Before explaining why, it is interesting to note that long before the advent of computers, the same thing was said about the Devil: he is the only one who could be a creator.
In September 1966, the issue of Scientific American magazine I discussed three programs: Arthur Samuel's program for playing checkers at the master level; the program of Thomas Evans ANALOGY, which allowed at a fairly good level to solve the problem of assessing intelligence using the recognition of analogies between geometric figures, and the program D. Borborwa STUDENT to solve high-grade algebraic problems expressed in informal language:
, , , . 24 , ?
This program solves some problems, but not all. In that article I set the task to go further, to continue work in the direction of a more diversified intellectual development. However, for my purposes, even in their current state, these programs can serve as an excellent example: although they work with an extremely limited number of tasks, they are already doing enough to destroy this old myth that is convenient for all.
The old point of view says that a program is “only” a set of strict rules that clearly indicate what to do in each specific situation. This is a really useful point of view for convincing novices in programming or for analyzing programs written by novices. However, for more complex processes (although in a certain sense this is “absolutely” true), it will also be correct to say that “at home are just constructions made of building materials” or “books are just long chains of words”. And the truth is: a review of my article in Scientific American, made in Computer Reviews 8, 1, January 1967, states that these programs consist of “dictionary searches, a sequence of search and comparison functions, and sorting and merging operations” .
LOGIC AND SYSTEM
Let's begin by discussing a single statement based on the opinions of good logicians and philosophers. We are told that some theorems for proving sequential logical systems have the effect: "It is impossible to completely mechanize the discovery process, therefore people will always have an advantage over machines." I am sure that almost every reader has heard about the Gödel theorem. Most have also heard of the proposed conclusion. But this is not a logical conclusion, since it is based on careless technical observations. If it is generally applicable to problem solving, Gödel’s theorem is applicable exclusively to consistent logical systems. People are not so consistent, so there is no reason for us to feel any embarrassment and limit ourselves to creating machines according to such principles. Instead, we can create machines that could allow a contradiction of actual judgments, which is already being done. To do this, add a set of rules for resolving contradictions, a scale of priorities for choosing from conflicting judgments, etc. A simple example of such a scheme is described in Bertram Raphael’s doctoral dissertation, which he defended at the Massachusetts Institute of Technology in 1964. Here is an example of a dialogue with such a program:
EVERY BOY - PERSON
(I UNDERSTAND)
FINGER - PART OF THE HAND
(I UNDERSTAND)
EVERYONE HAS TWO HANDS
(THIS PROPOSAL IS DOUBLICALLY. REFRAIN IT)
THERE ARE TWO HANDS ON EACH HUMAN
(I UNDERSTAND)
HOW MANY FINGERS DOES JOHN?
(I DON'T KNOW, IS IT A FINGER'S PART OF JOHN)
JOHN - BOY
(I UNDERSTAND)
HOW MANY FINGERS DOES JOHN?
(HOW MANY FINGERS ON HAND)
ON EVERY HAND 5 FINGERS
(I UNDERSTAND)
HOW MANY FINGERS DOES JOHN?
(ANSWER - 10)
HOW MANY MACHINES DOES JOHN?
(THIS PROPOSAL IS DOUBLICALLY. REFRAIN IT)
WHO PRESIDENT USA?
(FORM OF JUDGMENT NOT RECOGNIZED)
BOY ONLY WHICH DID OUT FOR THE TABLE
(G02840 - TABLE)
(I UNDERSTAND)
LAMP - LEFT OF TABLE
(G02841 - LAMP)
(THE ABOVE CONSTITUTION ARE NOT IMPOSSIBLE)
TABLE - RIGHT FROM THE CHAIR
(G02842 - CHAIR)
(I UNDERSTAND)
WHAT IS THE RELATIVE POSITION OF MAN?
(ORDER LEFT RIGHT TO SUCH)
(CHAIR - BOY - TABLE)
The system of collecting knowledge and answering questions from Raphael shows how individual facts are given top priority if they conflict with general principles. Of course, this “exclusion principle” is a very simplified way of resolving contradictions, which can only be used in cases where there is a clear difference between judgments in terms of the level of generality. If they are on the same level, the program simply rejects a later judgment, as can be seen in this example:
ON EVERY HAND ON 5 FINGERS
(I UNDERSTAND)
MAN HAS TWO HANDS
(I UNDERSTAND)
BOY - MAN
(I UNDERSTAND)
TOM - BOY
(I UNDERSTAND)
DICK - BOY
(I UNDERSTAND)
HARRY - BOY
(I UNDERSTAND)
Tom Had Nine Fingers
(THIS CONSIDERATION IS TWENTURALLY, BUT I ASSUME (HAS) MEAN (HAS AS PART))
(I UNDERSTAND)
DICK HAS ONE HAND
(THIS CONSIDERATION IS TWENTURALLY, BUT I ASSUME (HAS) MEAN (HAS AS PART))
(I UNDERSTAND)
HOW MANY FINGERS A TOMA?
(ANSWER - 9)
HOW MANY FINGERS A DICK?
(ANSWER - 5)
HOW MANY FINGERS HARRY?
(ANSWER - 10)
HOW MANY FINGERS DO JO?
(I DON'T KNOW IS THE FINGER A PART OF JOE)
Of course, Rafael could have written another priority assignment rule. By the way, the judgment in the program “This sentence is ambiguous ...” refers to the possibility that the word “has” can mean either “has as a part” or “owns”. The Raphael program usually makes correct assumptions about the study of objects that are already known to possess certain things or are part of certain things, etc. Next, I will describe this in more detail. Rafael clearly showed that such “contextual” solutions can be programmed by illustrating a more general idea or, rather, by showing a different and more sensible look at programs instead of the previously existing “only” approach. Therefore, we will try to explain some of the best ways to talk about programs.
(1) PROGRAM AS A SEQUENCE OF INSTRUCTIONS TO BE FOLLOWED.
The most common and simple point of view: a computer program is a sequence of clear operations that are performed on the basis of certain data. Take a simple example of a program: Suppose that X is a number given as input information:
START: SET R = 1 LOOP: SET S = X/R SET T=R+S SET R = T/2 SET U = R x R SET V = X - U IF |V| > .001, GO TO LOOP ELSE PRINT V
This program, attributed to Isaac Newton, calculates the approximate value of the square root of X. In each line of the program it is absolutely clear what the current state of affairs is and what comes next. Of course, we need a mathematical analysis to prove that the sequence of such situations will soon lead to a valid value of R and the end of all calculations. Therefore, there will be no harm if you consider these judgments as a sequence of steps. The “GO TO” command can be considered a very short version of several copies of the “main loop”. Of course, until the analysis is completed, the program can be considered an expression of a useful, but unintelligible idea.
(2) PROGRAM AS A COURT
In the program of Raphael, it is necessary to decide whether the word “has” means “owns” or “has as part” if we are talking about a judgment in the form “x has y”:
JOHN - MAN
(I UNDERSTAND)
DICK - MAN
(I UNDERSTAND)
CHAIN - PART OF BIKE
(I UNDERSTAND)
PETROL HAS A CIRCUIT
(THIS CONSIDERATION IS TWENTURALLY, BUT I ASSUME (HAS) MEAN (HAS AS PART))
(I UNDERSTAND)
JOHN HAS A CHAIN
(I UNDERSTAND)
DICK HAS A CHAIR
(THIS CONSIDERATION IS TWENTURALLY, BUT I ASSUME (HAS) MEAN (HAS AS PART))
CUCKOO HOURS HAVE A CIRCUIT
(THIS PROPOSAL IS DOUBLISHLY. REFORM IT)
The task, as soon as it is expressed, is transferred to the part of the program that can conduct a review of everything that has already happened before. Such a subprogramme decides on the following basis:
- Is it known that y is part of some other object? Or is u a member of some group that is part of something?
- Is it known that u belongs to someone or is a member of some group that belongs to someone?
- If one of the provisions (1) or (2) is correct, make the appropriate choice. If none of the options apply, stop and collect additional information. If both statements are true, consider the options in clause (4). (Thus, the program uses evidence of how previously obtained information was included in the “model” of the world.)
- If you have reached this point, it means that u is already part of something and already belongs to someone. We need a more accurate test.
Let U1 and U2 be “something” or “some kind of system), existing respectively in the answers to questions (1) and (2). They depend on y. Now we ask: is x a member or subject of U1 and U2? If none of the options fit, stop. If one of the options is correct, select the appropriate result - “part” or “belongs”. If both options are correct, stop and collect more information. Rafael says:
“These criteria are very simple, but they are enough to allow the program to make fairly reasonable decisions with a specific goal in various sentences with the ambiguous word“ has. ” Of course, the program can be made to make a mistake, for example, in the case of the sentence “Dick has a chain”, which stands before the sentence “John has a chain” in the above dialogue. However, when a person encounters a new world in a similar situation, he will certainly make a similar mistake. The fact is that it is possible to solve the problem of ambiguity in a sentence with the help of the description of words in sentence-descriptions, which can be created automatically through previously given unambiguous sentences ”.
Thus, the program is designed to try to search for previously collected information and find out how x and y are related and whether they are related at all. This "part" of the program can be perceived as a kind of small court or as the collection and analysis of evidence and testimony. You should not take it as a straightforward procedure in the framework of a previously defined sequence of solving the problem. It is, rather, an appellate court, which can prompt when the program has encountered inconsistency or ambiguity. Now, when we will write a large program with a large number of similar courts, each of which, if necessary, can call others for help, it is absolutely pointless to consider the program a “sequence”. Even if the programmer himself formulated “legitimate” principles allowing such “appeals”, he may not fully understand when and where in the course of the program such processes will require interaction with each other. As for a single “court”, he has only fragmentary ideas about certain circumstances that can lead to such an interaction. In short, having passed the beginner level, programmers do not just write a "sequence of instructions." They write for individual cases from small groups or processes. But we rarely enough can fully imagine in advance all the details of their interaction. In the end, that’s what computers are needed for.
(3) PROGRAM AS A COLLECTION OF TIPS
There is a misconception that is shared not only by the frightened humanities, but also by the majority of computer “specialists”, it says that programming is essentially an accurate and precise operating environment based on the elementary confusion between form and content. If the poets were asked to write fourteen lines of stanzas, this would not make the process more accurate; if the composers were to use all twelve degrees of the scale, it would not limit the form as a whole; if designers had to use only fourth-order surfaces, no one would even notice! Thus, it is simply ridiculous to observe such unanimity in disputes that strict grammar of (old) programming languages contributes to accuracy in the description of processes. Indeed, one must very carefully follow the rules of computer grammar (syntax) in order for the program to work at all. No spelling or punctuation errors are allowed! But it is wrong to say that this will help you to clearly understand what your program will do. In FORTRAN, if you want your program to refer to an already written process, you need to use one of the fixed commands “GO” (“GO TO”). You cannot say “USE” or “PROCEED ON TO”, etc. The syntax in this case is very strict. But you can “GO” to almost anything, so the content remains free.
It is even more wrong to assume that such severity is due to the computer! It is caused by programmers who have defined the language! In Bobrov's STUDENT program, if you like, you can enter “USE (“ USE „) ALWAYS MEAN TO GO (“ GO TO ”)” once and for all, and in simple situations you can use “USE” instead of “GO”. Of course, this is a simple example of flexibility, but most people do not accept this thought: the severity and clarity of the FORTRAN language, if it exists, is due to strict prejudice, and not the severity of facts!
As an example of a modern and more flexible system, take the programming language PILOT, developed by Warren Teitelman (doctoral dissertation at the Michigan Institute of Technology, 1966), allows the programmer to make changes to his program and to the language itself using external operators in the language (current version ). «», «», .. .
, « », , ..:
, m – -1, c – -2 (- m) (- c ), . ( .)
, , , . . , , «» « , , ». :
«». , , , – , 3 0. .
However, the point is not to reduce syntactic restrictions. The point is in the “advisory” nature of the changes made to the program. The judgment about “moving forward” can be expressed without knowing how this “promotion” is carried out and where exactly it is in the “program”. The situation may change under the action of another council, and you can not even imagine when the new council will be used, and when it simply will not be paid attention. Under the influence of the councils, a completely different function may change, in some situations there will be no “advancement” at all and someone may be eaten anyway. If this happens, you will need to try to understand why.(1) «» (2) - , , , . , . , . , , , .
. , , . , , . , . (, , , !) « , ». .
FREEDOM OF EXPRESSION AND RESTRICTION OF IDEAS
Finally, we come to the question of what to do, when we need to write a program, but at the same time we do not fully understand what needs to be done and how. A false conclusion that only keeps everyone away from solving a problem is very simple:- Main premise: If I write a program, it will do something private, as each program performs something specific.
- Small prerequisite: My idea is unclear. I have no definite result in my head.
- Conclusion: Therefore, the program will not do what I want.
So, everyone thinks that programs cannot express fuzzy ideas.In fact, there are two misconceptions. First, it is not enough to say that you do not have a clear result in your head. You have a set of poorly defined acceptable functional characteristics (operations). You will be happy if the machine can perform tasks in this range. The wider the range, the wider the freedom of the program’s tasks. It is not necessary to nullify everything: even if someone writes certain words or instructions, the other still has the right to consider this program a separate example. In this sense, a separate written history can be considered a special case of a concept that is still not clearly expressed in the mind of the author.. - . , . , , , «» «» .. , .
And here you can argue for the last time: is it within this framework? Remember, I am not saying that programming is an easy way to express poorly worded ideas! To take full advantage of the amazing flexibility of this tool, huge technical, intellectual and aesthetic skills are needed. It is very difficult to drive the behavior of the program into some specific framework. Similarly, a writer needs certain skills to express a certain degree of ambiguity. A computer is like a violin. You can imagine a beginner, who first tried the player and only then - the violin. And the sound of the latter, in his opinion, is terrible. This is the argument we have heard from humanities and many specialists in the field of computer science and computer technology. They think that computer programs are good enoughbut not flexible enough. The same can be said about the violin and the typewriter, until you learned how to use them.