Automated Software Programming System: Difference between revisions

From GM-RKB
Jump to navigation Jump to search
m (Text replacement - "([^\s])([\s]{1,7})\<P\>" to "$1 <P>")
m (Text replacement - "\<P\>([\s]{1,7})([^\s])" to "<P> $2")
Line 14: Line 14:
=== 2014 ===
=== 2014 ===
* ([[Marcus & Davis, 2014]]) ⇒ [[Gary Marcus]], and [[Ernest Davis]]. ([[2014]]). “[http://www.newyorker.com/online/blogs/elements/2014/06/do-we-really-need-to-learn-to-code.html Do We Really Need to Learn to Code?]&rdquo;. The New Yorker, June 7, 2014
* ([[Marcus & Davis, 2014]]) ⇒ [[Gary Marcus]], and [[Ernest Davis]]. ([[2014]]). “[http://www.newyorker.com/online/blogs/elements/2014/06/do-we-really-need-to-learn-to-code.html Do We Really Need to Learn to Code?]&rdquo;. The New Yorker, June 7, 2014
** But before we reach the era of [[self-programming computer]]s, three fundamental obstacles must be overcome.        <P>        First, there is currently no [[software specification method|method for describing what a piece of software should do]] that is both [[natural for people]] and [[usable by computer]]s. Existing “[[formal specification language]]s” are way [[novice produceable|too complex for novice]]s, and [[English]] itself is still way beyond [[machine readable|machine]]s. Programs like Siri have improved dramatically in recent years, and they can comprehend English in limited contexts. But they lack the precision required for building computer programs. When [[Siri]] hears “What Italian restaurants are around here?” she knows your location, and it’s fine that she only understands the words “Italian” and “restaurant.” But there is a world of difference between “Delete every file that has been copied” and “Copy every file that has been deleted.” For now, there is no reliable way to make a computer understand the difference between the two.        <P>        The second problem is that [[good program]]s aren’t just [[montage]]s of [[existing code]]. [[DARPA]]’s [[DARPA MUSE|MUSE]] tries to solve the [[programming problem]] with an [[intelligent version]] of [[Web search]] that [[automatically mines]] the [[massive libraries]] of [[online software code|online code]] that are now freely available, hunting for [[software code|code]] that might sensibly be stitched together.        <P>        This might work in limited domains, but it is unlikely to work as a general solution. A [[good programmer]] doesn't just cut and paste snippets of code together (though that is part of the job); a [[good programmer]] understands, deeply, a [[problem that needs to be solved]], and then creates an [[architecture]] for solving a problem]] that's never been solved before. It’s one thing to [[find relevant snippets]], and another to ensure that [[they connect up right]].        <P>        The third obstacle is that [[computer]]s still have too little [[understanding of how the external world works]], and therefore too little [[understanding of how the programs they create will actually work]]. Consider, for example, this seemingly simple, hypothetical programming task: “Add a [[feature]] to [[Google Maps]] that allows a user to place a [[simulated entity|simulated]] [[boat]] on a [[river]] and have it [[float]] [[downstream]].” To do this, you need to know what a river is, what a boat is, and what it means for a boat to float downstream. Any [[human programmer]] knows that, but no [[computer system]] has the [[real-world understanding of an average human being]]. As [[Tom Dean]], a [[researcher]] at [[Google]], told us, “[[Programming]] is [challenging for [[artificial intelligence]] not because it requires concentration and attention to detail but because the path from the [[conception of what you want to accomplish]] to the [[realization of code that actually accomplishes it]] requires [[artistry]], [[insight]], and [[creativity]] as well as incredible [[mental dexterity]].” …        <P> … It’s certainly possible that [[machine]]s may someday be able to [[program themselves]], but in a generation in which even the nerdiest, most cloistered [[programmer]] in [[Silicon Valley]] continues to have a far better [[intuitive sense]] of the world than any [[software system|computer]] does, that day still feels a long way away.
** But before we reach the era of [[self-programming computer]]s, three fundamental obstacles must be overcome.        <P>        First, there is currently no [[software specification method|method for describing what a piece of software should do]] that is both [[natural for people]] and [[usable by computer]]s. Existing “[[formal specification language]]s” are way [[novice produceable|too complex for novice]]s, and [[English]] itself is still way beyond [[machine readable|machine]]s. Programs like Siri have improved dramatically in recent years, and they can comprehend English in limited contexts. But they lack the precision required for building computer programs. When [[Siri]] hears “What Italian restaurants are around here?” she knows your location, and it’s fine that she only understands the words “Italian” and “restaurant.” But there is a world of difference between “Delete every file that has been copied” and “Copy every file that has been deleted.” For now, there is no reliable way to make a computer understand the difference between the two.        <P>        The second problem is that [[good program]]s aren’t just [[montage]]s of [[existing code]]. [[DARPA]]’s [[DARPA MUSE|MUSE]] tries to solve the [[programming problem]] with an [[intelligent version]] of [[Web search]] that [[automatically mines]] the [[massive libraries]] of [[online software code|online code]] that are now freely available, hunting for [[software code|code]] that might sensibly be stitched together.        <P>        This might work in limited domains, but it is unlikely to work as a general solution. A [[good programmer]] doesn't just cut and paste snippets of code together (though that is part of the job); a [[good programmer]] understands, deeply, a [[problem that needs to be solved]], and then creates an [[architecture]] for solving a problem]] that's never been solved before. It’s one thing to [[find relevant snippets]], and another to ensure that [[they connect up right]].        <P>        The third obstacle is that [[computer]]s still have too little [[understanding of how the external world works]], and therefore too little [[understanding of how the programs they create will actually work]]. Consider, for example, this seemingly simple, hypothetical programming task: “Add a [[feature]] to [[Google Maps]] that allows a user to place a [[simulated entity|simulated]] [[boat]] on a [[river]] and have it [[float]] [[downstream]].” To do this, you need to know what a river is, what a boat is, and what it means for a boat to float downstream. Any [[human programmer]] knows that, but no [[computer system]] has the [[real-world understanding of an average human being]]. As [[Tom Dean]], a [[researcher]] at [[Google]], told us, “[[Programming]] is [challenging for [[artificial intelligence]] not because it requires concentration and attention to detail but because the path from the [[conception of what you want to accomplish]] to the [[realization of code that actually accomplishes it]] requires [[artistry]], [[insight]], and [[creativity]] as well as incredible [[mental dexterity]].” …        <P>       … It’s certainly possible that [[machine]]s may someday be able to [[program themselves]], but in a generation in which even the nerdiest, most cloistered [[programmer]] in [[Silicon Valley]] continues to have a far better [[intuitive sense]] of the world than any [[software system|computer]] does, that day still feels a long way away.


----
----

Revision as of 23:02, 17 August 2021

An Automated Software Programming System is software programming system that is an automated system.



References

2014