Mar 2014
May 2014
Application Maker:

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 development.

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 products.

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"

With 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 first time.

Ernest Hemingway

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 performed.

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" - these 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 development. 

"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 the statement.

Language Independence:

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 browsers.

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.

Author: Clif Collins
Houston, Texas

April 1, 2014