Stephen Reed wrote:
Richard,
In a comment to a recent blog post of mine
<http://texai.org/blog/2008/01/20/bootstrap-dialog-system-design>
Evgenii asked for my comments on the following automatic programming
task. I responded with an enumeration of the types of problem-solving
knowledge and behaviors that a solution requires:
[Evgenii] ... I’ll share my use case which my system used. My ultimate
goal for the first stage was to create an automatic programmer who would
be capable of parsing the following specification, and capable to emit a
Java program that implements this specification.
The specification was:
Write a TCP echo server. (Client connects to the server, sends bytes to
the server, and receives them back immediately, until client does
disconnect on behalf of its own). Server must be able to serve more than
one client simultaneously. The server should be implemented in Java.
[Steve] ... I expect that your [Evgenii's] system should have an
adequate commonsense understanding of the application domain, and
relevant domain algorithms:
* TCP socket protocol [at the transport layer, e.g. how to listen,
how to connect, how to read/write, & close a socket]
* Client/Server paradigm
* multithreading, including thread safety
* what “echo” means
It should have an understanding of the generally applicable programming
algorithms that are relevant:
* object-oriented program classes and instances
* variable typing
* statement sequencing and control
* method definition and invocation
* program composition (e.g. initialization, process, finalization,
and exception handling)
* test case generation
* programming safety (i.e. be Friendly and do not cause the host to
crash)
And it should understand the relevant Java concepts:
* how to compose a Java class
* how to map attributes of domain objects to Java instance variables
* how to compose Java statements
* how to use applicable class libraries
* how to compile and execute a Java program
If the Texai dialog system were applied to your [Evgenii's] use case,
then I expect a great deal of the effort would be to acquire the
background algorithm knowledge from human teachers. Furthermore, I think
that the specified program would be developed during a dialog with the
teacher. It would only be after the system has adequately learned the
subject, that it could program automatically from text specifications.
Interesting.
It might be worth sharing my (brief) reaction to this.
I see certain "deep" knowledge that is required to do this task (I will
explain what that is in a moment), and I wonder when and how that kind
of deep knowledge would get into the system, or whether it would be
missed entirely...
For example: if I were the system right now, I would have to do some
work to figure out the almost-trivial question of where to put a
"server" process on my machine, to test it, because writing
client-server code is not my specialty.
Now, assuming that the AP system were coming across a new type of
programming task, in this example (the way that I am), would the AP
system have to be explicitly told such background knowledge about how to
handle client-server tasks, or would it have the ability to look up a
textbook that would give the answer? I suspect it would not be able to
use the textbook.
Second: the software development environment used by Mac developers was
recently rewritten (again) and one result of this is that all the books
that describe how to get into Mac programming are out of date. So out
of date, in fact, that it would take a very experienced developer to
figure out how to relate the layout of the new environment to the
instructions given in the books. Would the AP system be able to
recognize a change like that, and cope with it? Again, I doubt it.
Obviously, this is expecting quite a lot from an AP system at this point
in time, but what worries me is that so much of *real* down-n-dirty
computer programming is either (a) having to go into territory that you
have never been in before, which requires research done under pressure,
or (b) adjusting to massive structural changes, with no guidance, that
an AP system might find itself falling over just because of miniature
versions of the two problems I just described.
It seems to me that most AP approaches are geared toward the "plain
sailing" problems that do not have the nasty little issues described
above, and that the "rough seas" type of problems are postponed for
another day. Since an awful lot of good work can go into solving plain
sailing systems that are very large (Czarnecki & Eisenecker, for
example), it can seem like good progress is being made. I think what
then happens is that people do not realise that, in order to go on to
the nasty type of programming problem (i.e. 99% of all programming
problems), all the previous work may count for nothing, because it did
not even in principle address such deep issues as what to do if the only
way forward is to find the right textbook, read a couple of pages, and
understand it.
Of course, the same criticism can be levelled at many approaches to the
entire AI problem, never mind just the AP problem. :-)
Richard Loosemore
-----
This list is sponsored by AGIRI: http://www.agiri.org/email
To unsubscribe or change your options, please go to:
http://v2.listbox.com/member/?member_id=8660244&id_secret=94201972-9013fa