How would you build a human computer so that people can write possibly ambiguous code in high-level English and have it "execute" by others using common sense?
6 comments
Consider for example writing a sorting algorithm in plain English and "executing" it on sample inputs using crowdsourcing.
If the algorithm is ambiguous, the people executing the code could use their common sense, vote on interpretations, and even get back to you if they are really stuck.
The execution would be done by hand, although some users who know how to program might write some code to help them out.
You could of course do this sort of thing at a very high-level of abstraction. Consider prototyping a word processor in this way for example.
If the algorithm is ambiguous, the people executing the code could use their common sense, vote on interpretations, and even get back to you if they are really stuck.
The execution would be done by hand, although some users who know how to program might write some code to help them out.
You could of course do this sort of thing at a very high-level of abstraction. Consider prototyping a word processor in this way for example.
I'm not sure if this is what you mean, but for example:
"Give me a list of search engines sorted from best to worst" (an ambiguious english expression - http://www.tallstreet.com/view/Search_Engine/ )
Then people nominate answers (by investing in them), which get weighted by how many people nominated, how they weighted different answers compared to each other, and also takes into account the persons "judgement history" (net worth - i.e. if they have been previously good at making good nominations they have more authority)
An then when people run the "algorithm" they rate the output which is fed back to the nominators who are rewarded or punished based on the quailty of their answers - so over time the system improves.
"Give me a list of search engines sorted from best to worst" (an ambiguious english expression - http://www.tallstreet.com/view/Search_Engine/ )
Then people nominate answers (by investing in them), which get weighted by how many people nominated, how they weighted different answers compared to each other, and also takes into account the persons "judgement history" (net worth - i.e. if they have been previously good at making good nominations they have more authority)
An then when people run the "algorithm" they rate the output which is fed back to the nominators who are rewarded or punished based on the quailty of their answers - so over time the system improves.
You can explore such a human computer along multiple dimensions.
On one level, you can have someone specify a spec in English so that human workers would execute an algorithm of their choosing on the supplied input.
On another level, you can have someone specify an implementation in English so that human workers would execute that algorithm on the supplied input.
Such a human computer would be extremely slow, but..
- it would have common sense.
- it's a way to give everyone a feeling of what programming is all about
- it's a way to prototype ideas without getting down to specifics
Moreover, you can have an error correction mechanism by making sure that enough human workers have validated each other's work for you to trust the results.
On one level, you can have someone specify a spec in English so that human workers would execute an algorithm of their choosing on the supplied input.
On another level, you can have someone specify an implementation in English so that human workers would execute that algorithm on the supplied input.
Such a human computer would be extremely slow, but..
- it would have common sense.
- it's a way to give everyone a feeling of what programming is all about
- it's a way to prototype ideas without getting down to specifics
Moreover, you can have an error correction mechanism by making sure that enough human workers have validated each other's work for you to trust the results.
The right way to do such a thing would just be to have a very abstract language with "common sense" embodied in the right defaults.
is anything closer to a layman's pseudo-code than python?
The biggest barrier to solving this problem is the difficulty of formally defining English words. It took us several years to figure that out (with the Epistemolgy Aesthetics Study group and heavy reading of Aristotle's Organon) and we ultimately found that definition through an inductive approach was key to success. There will come a time in the not too distant future that people who can correctly define concepts will make serious money.