I have redesigned the
software development interface to use natural language. Software Robots
make it easy to develop applications, so much easier, that it is
becoming more evident that it might be possible to use words to describe
I have placed a few
statements on my home page that use words to build applications. I find
that a single word or phrase "tree", "plant tree", "look at tree" is all
that is needed to describe the noun / verb interactions. Add in an
adjective, "quickly", or a phrase, "on the left" and actions can be
modified. There is a limited set of verbs that apply to any given noun,
maybe not "fly tree" but maybe "fly to tree", which are context
sensitive, "run like a bird, fly to tree".
In building applications
using natural language, I used this same context. "Title bar", "sexy
title bar", "accounting's title bar", "one inch from the top", "blue"
phrases and adjectives to adjust the design of an application and
When I say "title bar"
everything I know about a title bar is applied by the software robot. It
is placed on the top of the form, it is 45 pixels high, and nothing can
go above it... any number of rules. A single company may only have one
title bar, so it has no adjustment. We can go further and add context,
that all my application's forms have a blue title bar, so there is no
need to specify "title bar" at all.
To build an application's
forms we need to describe two items: Information we want on the form,
and a place to put them. As we saw with "title bar" one or both of the
items can be automatic. The information and the places I give names to
("employees", "files", "list of towns"), ("left", "top", "bottom").
With software robots as an information resource, every action needed for
that resource is completely automated; "left panel, select an employee,
right panel, edit the employee", or "on the left select employee, on
right edit the vehicles he drives"
software robots being accumulative, it makes this style of development
possible and even preferred over fixed formatted descriptive languages.
"All my life I've looked at words as though I were seeing them for the
The Unconscious Computer:
The unconscious Adam
is a term that sticks in my mind related to the development that is
being done on software robots. We are the conscious part of the Adam
and, as such, want to control the Adam without concern for how it is being
We humans think in
"words", we communicate in "words", we remember "words", our whole
thought process it tied to the "word". As an example "tree", the
look, types, colors, smells, images, many pieces of knowledge that as
instantly available to us when we think "tree". The word "tree" has
other words associated with it, such as "big tree", "shade tree"
have other related pieces of information.
It is these words and
word pairs that we remember and use to think and communicate. I believe
that to communicate with Adams we should use "word" and "word
pairs". A single word communicates a great deal of information, both
consciously and unconsciously. So we get the Adam to think in words:
"title", "title bar", "employees", "payroll", "inventory", and we the
supply the actions of "edit employees", "change title". It is with
these word and word pairs that we could use to control software
"Read file" is all I
really want to communicate, not the 50 to 90 Adams statements to
perform the same action. I use words inside software robots to
communicate, this works extremely well; I now hope to see if I can use
that same logic on the human software development interface.
Can software development not require documentation? This will happen if humans can remember
what to say to get something done. The Adam can remember anything;
it is the humans that need to remember the right words needed to
communicate their thoughts.
"Open a form to edit
employee vehicles". If the form does not exist, it could be generated
from this statement. The security restrictions, and access requirements
are already known to the Adam from the words and word pairs used in
I have started on the natural language software development system.
One of my
main design considerations is that it should be language independent. I
hope to illustrate a few examples next month, in Chinese and Arabic.
لقد بدأت على نظام
تطوير البرمجيات اللغة الطبيعية.
واحدة من بلدي اعتبارات التصميم
الرئيسي هو أنه
يجب أن تكون لغة مستقلة.
آمل أن توضح
بعض الأمثلة الشهر المقبل، في
Redesign of HTML:
Last month I had thoughts
about redesign of HTML. This month, with the move toward natural
language development, I have eliminated the direct use of HTML, and
therefore it now has little impact on my software development efforts.
The target of an
application could be anything - "html", "Java Spring", "an Executable",
"an IPhone App". I use html as an output format, which is good for
demonstration purposes. In the future I might also generate p-code or
machine instructions to increase speed and remove the limitations in the
The structure and use of
html is hidden by the software robots. Html is simply one
format that can be generated by the application maker.
Do Not Reuse Code:
I copy code from one file
to another instead of building libraries. I find that between any two
uses of code there is always some difference. It is these differences
that produces failure and hinders development.
As an example, in the
natural language parser I used a find-in-an-array function. This was
used in three or four places in the same file. Each time I copied the
code and make a unique function. In doing this, I saved myself probably
five hours on a 20-hour project by not wasting time on eight lines of
code. I copied the code instead of trying to make one function work for
almost the same purpose.
Programming is simplified
when I can change code to meet logic demands. The list is sorted, it's a
number list, or it needs to be case sensitive. I can have four very
simple functions instead of one complex multiple use function that is
prone to failure, difficult to write and impossible to maintain.
This was a very simple
example of not reusing code. Copy the code has helped in every case
where software has similar use, similar but not exact. I can always
change the function without breaking other parts of the system. When
conditions change, I can see the code and make changes. The overhead of
30 seconds to copy code, which can always be deleted, has never been a
burden. Coding is far easier, never breaks, and is independent.