See an article on 9CBS, saying that computer automatic programming, the original link is:
http://www.9cbs.net/develop/read_article.asp?id=27403
I feel some meaning, and I will talk about computer automatic programming.
First, disclose the programmer, let the computer realize the idea of automatic programming, it is very meaningful, nor is it all in the sky. As far as I know, the concept of "automatic programming" can be operated, as a genetic program design GP's goal, has been put forward in the evolution calculation (one of intelligent calculations); and in some relatively simple but practical fields, It is already a good practice. For example, the teacher of Kang Lishan, who took the Three Gorges Dam Rock, has evolved the design of a program, and a good model for its issues.
As in the text, maybe in the future, it can really change the identity of the programmer. They are no longer "programmers", but have to become a "secondary programmer"; the computer can be automatically programmed, so for general problems, just buy some automatic Programming components (such as this call), allowing assistance programmers to operate a certain interface, can be programmed by the computer, and better than people.
However, the scientific "automatic programming" concept is still in the stage, and in fact, the work currently do, or in a relatively simple problem. The principles of the basis, the results achieved, and there is still a big gap with our goals. Such as the large-scale engineering used in the original text, it is still a thousand miles.
Why is this? There is no in-depth discussion in the original text. And how to achieve "automatic programming", original text only means the development of artificial intelligence, and use massive network information. However, it is quite hard.
I am talking about the programming of advanced language C .
The simplest problem, we take the plurality of addition, subtraction operations. For example, the following problem:
Question. Use the C language to write program modules to complete the two integers A and B.
Programmers have programmed them, they will complete the following procedures:
// compute the sum of a and b
Int Sum (Const Int A, Const B)
{
RETURN A B;
}
The programmer completed this programming, and the general thinking step is:
1. For this problem, the data structure used is integer, and the C language provides data type INT. Two integers are A and B.
2. For this problem, the algorithm used is incorporated herein by reference, and the C language provides the ' ' calculation operator.
3. For this problem, the programmer is designed to the module, the module is called SUM, the input parameter is const Int A and Const Int B, and the return type is integer.
Obviously, 1 and 2 are the core of the program, which is the programs definition in the traditional sense. 3 is the structure of the program, I think the structure of the program is also very important. For this issue, the use of the "function" design module is of course ok, but the encapsulation of the C category is not tasted.
So, for computer programs, the concept I understand is:
Computer program = data structure algorithm program structure.
This simple problem is to be able to complete it by computer automatic programming?
In fact, "automatic programming" currently evolved is to inspire the "computer program = data structure algorithm". Let's take a look at the solution to the above problems. For this problem, establish a basis for computer automatic programming - two collections:
Data = {A, B}, OP = { }.
The program obtained by computer automatic programming is a relationship between DATA and OP. R &V. We use a string. Such as
S1 = aa ; // is S1 = a a;
Now for a string S, the computer can perform automatic design:
s = a; // has not been successful
s = aa; // has not been successful
S = aa ; // unqualified program, discard
s = a; // has not been successful
S = a ; // illegal procedure, discard
s = a; // has not been successful
s = ab; // has not been successful
s = ab ; // program success, exit
In other words, the computer is automatically programmed, which is defined here as
Computer program = data * OP.
Of course, get a computers that are required, not an enumeration process. The evolutionary solution is to use a random strategy to achieve good procedures by evolution.
Data and OP two episodes are automatic programming basis, and can be designed relative to problems in the fields and complexity (like the computed complexity of the programmer needs). For example, the above DATA adds two integer variables x, y, which is a program that can be designed and equal to SUM module. If DATA and OP are expanded as follows:
Data = {A0, A1, A2, ... AN, N, X}, OP = { , -, *}.
Where X is a real variable, then the computer can be programmed by the computer to design a plurality of approximation procedures.
Moreover, logical operations such as IF, ELSE, and cyclic operations, can be added to the OP collection. Then, the automatic programming can be resolved will be larger.
However, automatic programming is still just starting. Say it will replace the work of the programmer, and it is early.
First, computer automatic programming is based on aggregation DATA and OP, which can be compared to computer automatic language, but this language is very imperfect. For individual problems, you can design a viable language, but most of the problems have no way to find the right language, not to say a more common language. The computer language used by the programmer has reached a fairly perfect level. After the OO language occurs, the programmer can design your own data type, and the computer's automatic programming is currently unable to do this.
For example, for the above questions, the programmer can design a data type to encapsulate integers (we don't talk about its practical significance for this problem, "Obviously we value its abstract significance):
// define new type: integer
Class integer {
// ...
PUBLIC:
// ...
}
Thus, the programmer is quite effective when modeling the real world. However, computer automatic programming DATA and OP, judging engineering calculations and simple logic, can create a model, but far behind the programmer in depth and breadth.
Secondly, I think the concept of computer program must join the "program structure" factor; the factors of program structure are important for large-scale engineering applications, and it is a wisdom of programmer. Procedures for a complex problem, bad structure, often fatal. For example, a global pointer object will have too many traps that make the system that is not designing is completely paralyzed. However, a good structure is not. In addition, the programmer fully utilizes the experience on the "program structure", summarizes the best design mode, develops a good performance class library, program framework, so that the program design continues to be a benign loop. But the current automatic programming has not planned this issue. The first definition is based on the Data and OP, and the process of Data * OP is currently made by evolutionary calculations. If the programmer in assembly language program design period, the program structure that can be considered is very small, only Desperately use a smart head to deal with the complexity of the problem.
Finally, of course, it is currently constrained by the computer. It is still difficult to handle complexity on the main problems of automatic programming. The further improvement of computer itself, and good algorithms further develops automatic programming. But the problem is not isolated, solving the complexity of the problem, of course, has to consider the development of automatic programming itself, such as breaking through the above boundaries.
In the original text, it also refers to the use of network information resources, learning ability to computers, of course, these steps are inevitable. Automatic programming must face these discipline resources. But this involves more problems. Concentrated, networks and distributed systems, with artificial intelligence, to solve a large number of problems, can enter the automatic programming range in engineering. At present, it is also the most closely intelligent computing and automatic programming relationship and the main promotion discipline.
What is mentioned here is from the perspective of software. In addition, the automatic programming of cross-system (such as Windows and UNIX), I think this problem is more painful. It may be more broadly that due to accidental or inevitable reasons, the computer architecture is currently a variety of diverse, and the programmers of natural programmers are based on a computer based on certain architecture. The program of a CISC machine, runs on the RISC machine; then programmed on the former (whether programmer or automatic programming), how to seamlessly transplant, I think this is not only the problem of programming. .
I felt very interesting in the original text of "Assisted Programmer". Since programming work, deprive it to your computer, the auxiliarization programmer is to manage the "automatic programming" computer, which has some tastes of the project manager.
Obviously, the programmer is restricted by some regularity of software engineering when designing. And the management of this process is very complicated; most project managers have experience. So, what is it like when multiple computers appear when "Synergistic Automation Programming"? Where can they explore? I think that although the computer can be automatically programmed, the programmer will be relieved from the programmed work; but the industry is not a decrease in people's requirements?
Perhaps it should be said that the era is in development, the industry's requirements for people will always be improved.
Unless, artificial intelligence is completely mature, the machine and people have the same behavior. People may be casual.
So, "Accessories", you are afraid? This problem is not only the internal problems in the industry. If the computer is salary, the whole society will pay attention to it.