A Robot Whose Function Is To Build Software

This is a concept I’ve been thinking of for years and recently proposed to the Boulder Hackerspace. Post a comment or contact me via LinkedIn (or otherwise) if you’re interested in forming a team to explore this concept.

What if we could talk to our computers to build programs instead of writing code? What if we could talk to them in our native language – say English, Russian, or Swahili?

Here are 5 examples:

Hello World:
Me to Computer: “create an Application named quote helloworld unquote that prints the message quote hello world unquote to the screen in the color red, go”
Computer to Me: done.

result= Computer builds an application named HelloWorld as described

Defining an Object:
Me to Computer: “define an object with 8 members and go. the first member is named quote foo unquote, go. show available data types [pause]”
Computer: shows a window in an IDE with available data types
Me: touch screen or say, “the data type of the first member is string, go”
… and so on to define an object …
Computer to me: done

result= Computer defines the object as described

Defining a Procedure:
Me to Computer: “create a method named ‘foo’ with 3 inputs, go”
Computer to Me: “describe the inputs”
Computer: a window pops up in an IDE that shows the available data types
Me to Computer: “input 1 is named ‘bar’ and it’s an integer [pause – just got distracted by incoming Email]”
Computer to Me: “describe the remaining two inputs”
Me to Computer: “they are [finish description…] period”
… and so on to define a method signature …
Computer to me: done

result= Computer defines the procedure as described — we skipped how to bind the method to an object or something that can be executed

Implementing a Procedure (method):
Me to computer: create a local variable named quote foo unquote of type string, set it’s value to quote bar unquote, next
Me to computer: return foo from [name of procedure]
Computer to me: done

result= Computer displays a visual description of the method I’ve just described and binds it to the appropriate object

Implementing a database connection within a Procedure:
Me to Computer: “show available database connections”
Computer: opens a window that shows the database connectors defined in my programming environment
Me to computer: “open a database connection to the MySQL server on this computer and call the file handle ‘foo’, the login username is ‘bar’, and I’ll type the password, go”
Computer to Me: “you need to install the MySQL binary and [driver/software interface] first”

Architecting this properly would ultimately require a team with deep skills in several disciplines – including at least a couple of disciplines I know nothing about such as linguistics and lexical analysis. Still, I think we could learn what we need to find natural and efficient ways to speak to a computer and generate code. I think we can do this for initial prototypes without the need to build or purchase a massive lexical analysis engine – a small one should suffice at first. We would prototype a system that allows humans to write code in their native language with the goal of being 100% translatable to both humans and machines.

Think http://www.antonraubenweiss.com/gibson/gallery/johnny_mnemonic-scr/johnny_mnemonic-x8.jpg


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s