News for hackers. Stuff that matters.
Re:Computer program fixes old code faster than expert engineers by sz4kerto on Friday July 10, 2015 @08:28AM (#9863502)
Software development is mostly not about syntax and programming languages, but domain knowledge and understanding humans. If a non-programmer could really describe what he wants, then you could write a compiler for that text.

But it's not possible yet, as the AI would need to have a human-like intelligence, and that's very far away.

Re:Computer program fixes old code faster than expert engineers by wsxcde on Friday July 10, 2015 @12:49PM (#9865091)
Some amazing progress is being made in the field of program synthesis. In particular, there have been a lot of successes in generating programs from input/output examples, provided the domain is sufficiently restrictive and/or the programmer provides a "sketch" or partial program to start off the synthesizer with. One good paper to start looking at is: Oracle guided program synthesis, Jha and others ICSE'10. This algorithm has made its way into Microsoft Excel: http://research.microsoft.com/en-us/news/features/flashfill-....

You might argue this isn't "true" program synthesis, but in some cases it can outdo human programs, because the synthesizer can be tied into a verifier to produce only "correct" programs, where correctness is defined by a few simple and declarative properties. One example of this sort of thing is from Udupa and colleagues in PLDI'13: http://dl.acm.org/citation.cfm?doid=2462156.2462174. They're able to generate correct cache coherence protocols from a partial specification and input/output examples. This is a big improvement over the current state of the art, where a lot of very smart people think really hard and come up with a coherence protocol, convince themselves it's correct, and then some other very smart people spend a few months playing with automated verifiers trying to prove the protocol correct, and finally someone actually implements the protocol in hardware, and you might still run into bugs at this stage.

Re:Computer program fixes old code faster than expert engineers by raverbashing on Friday July 10, 2015 @08:33AM (#9863529)
It's closer than you think

You are right about humans knowing about domain knowledge, but you don't need human level AI to have computers writing software

Maybe future programmers will be more like spec writers than actual coders

Re:Computer program fixes old code faster than expert engineers by Qwertious on Friday July 10, 2015 @08:48AM (#9863605)
I'm pretty sure there's either a Paul Graham or Joel Spolsky essay on the subject, but basically: What's the difference between a sufficiently complete and formalised specification, and a high-level programming language?
Re:Computer program fixes old code faster than expert engineers by TheOtherHobbes on Friday July 10, 2015 @09:54AM (#9863938)
Domain specific knowledge?

An AI would know how to fill in the gaps when you said "Make me a blog page" or "Make this server scalable."

This may sound outrageous, but some very large percentage of coding practice is wheel reinvention. Developers the world over solve the same problems over and over again.

One of the first applications for useful AI will be to collect and automate that repetition.

There's already a "make me a blog" project, and Bootstrap is so cliched now I'm surprised there aren't more site builders being developed. So this isn't entirely impractical.

The hard part is the visual design. It's much harder to automate that in a way that includes some genuine original creativity.

Of course web apps != general scientific or business coding. So AI isn't a complete solution. But it doesn't need to be to be useful. (Domain specific, after all.)

Re:Computer program fixes old code faster than expert engineers by nickpsecurity on Friday July 10, 2015 @02:21PM (#9865740)
Download the Tokeneer project's Z specifications and Ada source code to see the difference. I'm sure it will nicely illustrate it.
Re:Computer program fixes old code faster than expert engineers by codeshaman on Friday July 10, 2015 @08:48AM (#9863608)
I think what we're looking at in about a decade are interactive natural language development, in which one 'architect' will replace an entire team of programmers, designers, testers, etc.

"When I tap on this thing " - put the finger on the control "Go ahead and get the latest articles from HackerNews"

The System contacts "Hacker News" and queries for "latest articles" API. The systems negotiate an API key, account, etc and is good to go. The result is a list of articles with title and number of comments.

"Now use a nice table. " System formats output. "Show me other styles" Lists table styles. "This one. Now if the number of comments is more than 100, show them in red" And so on.

In the end, the System can generate source code in a multitude of languages (why?), some kind of pseudo code and of course an interactive, editable video of the "programming" session which others can watch and fix if necessary.

So basically, one person can design the whole "application" in a couple of hours.

We're not that far from that. And as we get closer, it will become better and better and it will be a lot easier to extend and modify this "System".

Imagine developing the System using the System.

Programming as we know it will remain a thing of the distant past as is the case with all things that evolve over time.

Re:Computer program fixes old code faster than expert engineers by bitwize on Friday July 10, 2015 @05:08PM (#9866704)
Now this sounds familiar.

I still remember books about software engineering written in the 80s (mainly intended for manager types) which, in their opening chapters after an explanation of how the discipline of "software engineering" evolved to the present day, painted a rosy-ass picture of the future by describing the year 2010 in which software architects lounged about in easy chairs and gave plain-English directions to HAL 9000 workstations -- replete with line drawings of retrofuturistic offices straight out of The Jetsons, The Incredibles, or Logan's Run.

Needless to say, 2010 came and went and the state of the craft had evolved microscopically compared to anticipated advances despite having plenty more CPU cycles to burn on ever more complicated tooling. In some ways it has regressed. The know-how which produced Unix and ARPANET on limited hardware with limited resources, inside academic, industrial, and government departments which got little recognition or respect, is in short enough supply that we may not be able to repeat the feat if we had to do it all over again.

Alan Kay maintains that programming is pop culture because we don't remember our history but it's worse than that. We're like a primitive Mesopotamian tribe from antiquity who had a history but forgot it except for bits and pieces which got written down and became Religion. Things like "GO TO considered harmful", "object-oriented programming is good", "DRY", "refactoring", "design patterns", etc.

We're saddled with object-oriented programming -- and its attendant complexity -- for life. But most of us don't understand how OO came to be, why it might be good, or what the tradeoffs are vs. other programming methods because we don't ask ourselves these questions.

Design patterns should be treated like TV Tropes, replete with having maybe a great wiki describing them all, and allowing the addition of new ones as well as admitting variations and inversions. Instead we treat them like nam-shubs, strict instructions handed down from the gods on what to do under these circumstances to achieve this result.

And in this culture we await the day when, magically, the Machines will spontaneously evolve the intelligence to relieve us of the burden of software design specifics!

Re:Computer program fixes old code faster than expert engineers by codeshaman on Monday July 13, 2015 @10:16AM (#9878172)
Maybe you're missing the fact that in 2015 we have super computers (by 80s standards) in our pockets which are always connected to the Internet to which we actually issue verbal commands..

In fact, most of the tasks described in those futuristic books didn't involve programming, I suspect they were examples of how you could ask your HAL 9000 to tell you how much is 9999 * 9999 and it would give you the answer in human voice. A lot of the tasks which would have required programming in the 80s are now solved by one of the millions of apps, so that's another angle.

Maybe we're not exactly were sci-fi predicted we'd be at, but there are a lot of things that sci-fi didn't even dream of that we take for granted.

Even the dev environments of today. You'd think they only include the text editor/IDE, but you've also got the browser, google and stackoverflow, github and a myriad of tools and libraries to help use build more and more complex apps.

The fact is, today's programmer-for-hire is an interface between the client (app inventor/architect) and the machine, just like secretaries were interfaces between their boss' spoken messages and the typewritten letters.

And if something can be optimized away by technology someday it will. Maybe it won't involve spoken language (although, why not, if it's done right?), but my bet is that programming will be less of a profession and more of a skill that you learn by using powerful tools.

Re:Computer program fixes old code faster than expert engineers by waitForCompiler on Friday July 10, 2015 @09:43AM (#9863879)
That is highly optimistic and I do not buy into this. This would require an understanding of the human language and here we are FAR off, considering that it is currently even hard for engineers to grasp a user's requirements.
Re:Computer program fixes old code faster than expert engineers by seanmcdirmid on Friday July 10, 2015 @10:15AM (#9864050)
RNNs can already write what looks like viable code without any human intervention. Of course, the code doesn't do anything useful and is just a reflection of its training, but all we have to do is figure how to guide that.

We are doing OK in human language recognition as well as understanding in simple dialogue frames. The technology is also moving awfully fast at the moment. You are thinking in terms of human level intelligence, but it really doesn't have to be that good. It only has to provide enough random-but-feedback guided choices until the user finds what they are really looking for.

Put it this way: if the user could get what they wanted from the computer directly just by "searching", the process would be more efficient since the most inefficient part about programming is human-to-human communication and coordination.

Re:Computer program fixes old code faster than expert engineers by LnxPrgr3 on Friday July 10, 2015 @01:12PM (#9865270)
RNNs are good at learning the structure of their training input—even character-level networks can output vaguely plausible English. Of course, what you end up with often looks like a computational model of a thought disorder. They have seemingly lucid moments, but so do Markov chain generators.

As far as code goes, we've already solved the problem of modeling the structure of any programming language with an implementation. That's not the hard part.

Re:Computer program fixes old code faster than expert engineers by codeshaman on Friday July 10, 2015 @01:36PM (#9865449)
> considering that it is currently even hard for engineers to grasp a user's requirements.

That's because users don't know exactly what they want. They know it when they see it, but they don't know how to explain it. They expect the engineers to guide them through to their idea.

But as per example above, that could be done by an app - guiding a user from nothing to whatever he wants by interactively experimenting with features.

Think of a REPL with access to a huge number of libraries, which is searchable by voice input.

Re:Computer program fixes old code faster than expert engineers by duaneb on Friday July 10, 2015 @12:30PM (#9864956)
Semantics may not be a solvable problem, but the system doesn't exactly have to answer existential identity questions to render a list. A restricted subset of English would probably be necessary to deal with abstract algorithms.
Re:Computer program fixes old code faster than expert engineers by seanmcdirmid on Friday July 10, 2015 @10:10AM (#9864026)
We could have AI assisted tools; e.g. very intelligent code completion systems that are trained on your's and everyone else's code. Sometimes programmers don't know exactly what they want, but when given a few plausible choices based on some initial code, can generally pick out what they really wanted.

Up from enhanced code completion, AI can become effective in coding even before they are human-level intelligent simply by creating a conversational feedback loop with a human; e.g. more to the right, more to the left, redder, yes! One could argue that the human is still programming, but they might not need any specialized programming training to use such a system. In that case, we really aren't as far away as many think.