Whoever wrote this article has negative knowledge about the state of AI.
edit:
Its also slightly insulting that this person thinks that the modern programmer spends all their time writing if/else/then statement.
Whoever wrote this article has negative knowledge about the state of AI.
edit:
Its also slightly insulting that this person thinks that the modern programmer spends all their time writing if/else/then statement.
I suspect that this will be difficult for the HN community to hear, but we must face the upcoming realities.
Though I think the article may be assigning more abilities to AI than is actually feasible in our lifetimes, let us not forget that most back-end developers are doing basic I/O and data manipulation tasks. Put something into a database, get something out of a database. Front-enders are doing layout, animation, sizing and colouring.
The average modern programmer doesn't spend their time writing if/else/then statements, I believe the average programmer spends their time writing GET/SET/EDIT/DELETE flows.
I believe in the next 10 years, artificial intelligence will be able to model and create these basic systems based on human input. UX and possibly even UI can also be trained. A/B testing can certainly be trained.
Those who think programmers can't be replaced begin to sound like the Luddites who felt the loom could not match the quality of their craft.
Note: I am a full-stack developer, I believe 90% of my day job will be replaced by AI in the coming years. That final 10% often deciding what to do or the best how, will likely be the main task.
• Current methods to generate programs fundamentally do not scale. Most practical research is about how to extend small-scale synthesis systems to large-scale problems, rather than synthesizing large programs outright.
• The best way to scale these systems is to make them more interactive. Let the programmer do what's easy for humans and use synthesis for the parts easy to automate. This is another way of saying that program synthesis is less about fully automatic programming and more about (radically) better development tools.
I am confident that we will not have automatic programming systems that can handle non-trivial programs by themselves in the next 10/20 years, barring the sort of paradigm-shifting breakthroughs we can't really predict. Instead, we will have systems that can generate some amount of code and work in tandem with programmers—perhaps through sketching[1], programming by demonstration or just much-improved Intellisense.
The current trajectory is that programming is to become easier, not obsolete. The result will not be fewer programmers but more programmers, largely because people with less expertise will be able to become programmers: think Jevons Paradox[2] for programming.
Programming as a job will change and people will certainly have to adapt, but the job as a whole is not going anywhere.
Recently AI has proved it can beat expert humans at all perfect information games. Go has a ridiculously huge search space, but by using neural networks AIs can learn to narrow it down to a manageable size.
Program synthesis is just like a perfect information game. You have a search space, a state, a set of goals, etc. You could theoretically make it into a board game, and have human experts challenge computers at it.
Past a certain point the structure of a space is what matters which dictates how well any given search strategy will perform, and that doesn't readily generalize across domains.
I have not seen anything that would lead me to believe that results like AlphaGo will meaningfully generalize to such an extent. I still think that it would take more than just incremental work to get from where we are now to scalable program synthesis.
But not actually. Program synthesis is hard even if you have perfect formal requirements. In practice, gathering formal requirements is by far the most difficult task. You're probably better off building a system using modern development practices than trying to collect formal requirements Let alone translating those requirements into code, which is easier than coming up with the requirements but still difficult.
> Recently AI has proved...
FYI, it's not as if the program synthesis folks haven't heard of neural nets... you're giving researchers who actually do this stuff all day surprisingly little credit.
I mean yes good program synthesis wouldn't replace programmers on it's own. But it would radically change how programming is done and make our lives much easier.
I'm just saying that AI is a quickly advancing field and predictions like "not in 20 years" have been defied months later. Applying deep reinforcement learning to tasks like game playing is relatively novel, and has only really started to succeed in the last 2 years.
Already today standard CRUD web development is largely automateable. I already have my own specialized scripts from years of experience, targeting backend, front end, design components, that generate most of what I want with some basic inputs. I imagine most experienced web developers have some internal tooling like this too.
This kind of approach already does replace programmers, and could do so a lot more. But what do you mean by replaceable by AI? How would that work?
What if the person requesting whatever function (report, process, notification, etc) could have this system built without a developer?
That make developers replaceable. I'm not suggesting this is happening in the short-term, but as you say yourself, you use scripts for your basic CRUD development. What is stopping those scripts from moving up market to the point where you are not needed.
Front-end devs who used to write HTML and CSS would have said they where always needed because a computer can't make a webpage. But look at SquareSpace, Wix and the like. Again, this isn't every job, but this is a portion of the market which is no longer served by a person, and that will continue.
The new jobs will be in training and building these systems, which I think is historically how industrialization has progressed.
I don't think that's true at all unless you're talking about 3rd party tools like rails scaffolding. What languages / frameworks are you using by the way?
The boilerplate stuff that can be replaced by scripts is maybe 10-15% of my time anyway. The rest of my time is spent at a much higher level either trying to interpret client requests, trying to help the client decide what they want, making high level design decisions, or adding features that require way to much customization to use automated code generators.
This is much different if we're talking about a language like C where a much higher percentage of my time is spent on boilerplate code. However with newer languages and frameworks I think we're reaching diminishing returns for what can be automated by either the language itself or generator scripts/frameworks.
There is a huge productivity difference between using C and raw PHP when writing a CRUD app. There's less of a productivity boost (still huge though) when moving from raw PHP to something like Rails. And there's even less of a jump between Rails and something newer like Phoenix. I expect that the next 10 years will give us even smaller incremental improvements.
It's more going to be that a lot of the superficial patterns if/then (and quite a lot of scripting) that are being done today will be easily replaced. Not that writing a new kernel or some other advanced job is going to be handled by machines.
In that context I think it's going to go fast and be in our lifetime.
I'm basing this on the amount of jobs and interviews I've been to where the tasks are normally completely uninteresting from a technical stand-point. I now work at a government science and technology research agency and much of the work here is still quite rote.
I certainly believe that classes of automation problems will be done by machine learning but I have a very hard time believing all programming tasks are going to be replaced any time soon.
Build this -> builds -> fix this -> fixes -> change this -> changes.
Essentially, this is a learning model already.
Sure, programming will be more about asking the right questions than implementing solutions. We'd think that'll be easy, but most people have no idea what they want in life, and philosophy is still hard.
The proportion of systems programmers that can writte assembly code consistently on par with the quality of that from a decent compiler (such as Gnu's GCC) is probably less than 1%, and they take orders of magnitude more time to do so. Yet, you do not observe system programmers dying out. They use C (and increasingly, C++, Dart, etc) to build bigger and more complex systems, with more demanding requirements.
Ditto for application developers. We now have this amazing enginees called DBMS, which handle out of the box a bunch of common requirements, and whose reign and management has spawned a new class of job that did not exist 30 years ago: DBAs. Some of those are glorified IT grunts, but many are not! They build (information) systems that are bigger and more complex than ever by translating business use cases into a description that is understandable by the DBMS engine.
I could keep going on and on: web frameworks, game engines, simulation models, etc, etc. The point is that the hard part about this craft is not to know how to make the machine compute some XYZ calculation, it is to understand that computing XYZ is an acceptable way to fullfil a business need within the limits of available resources (in the dimensions of development cost, runtime cost, infrastructure maintenance, etc).
At the same time, you say "We have been there before", but we haven't had the quality of AI that we are reaching today, so in many ways we have not 'been here before'. Let's not forget, there was a time when elevator operators thought they were irreplaceable by a machine. Today, you can't imagine having somebody operate an elevator.
A few years ago you had to be a 'web developer' to build a web-page. It was unimaginable that somebody who is barely computer literate would be able to put a website online. Today, you can run an online store without knowing anything about programming.
I suspect DBAs won't have an illustrious future as machines learn how to model data. Yes, they will need a person to train them, and tell them what to do, but I suspect an AI system can look at all the potential modeling options and give a layperson the option to pick one which best suits their needs, or recommend one.
As far as 'magnitude more time' for computers to do the work, I often find this argument interesting with respect to processing power in IoT. In life-threatening situations, performance is very important, but often as long as a persons time isn't being wasted, it doesn't matter if a machine takes twice as long.
Automating 90% of the work will only make software cheaper, and more in demand, as we are very far from creating every possibly useful software. Developers pay might even increase because of it.
Automating 100% of it is a completely different thing. But well, that's hard AI definition. Software development is among the last kinds of work that will get automated.
The main problem with replacing programming is that programming is constantly evolving. Weebly can do most if not all of web 1.0 and some of web 2.0, but there is still a lot that it can't do. The rapid pace of technology doesn't slow down enough for our automated tooling to catch up. Unless we are talking about basically a sentient AI then I just don't see this really happening unless we are talking about replacing programmers that are barely programmers at all.
Right now development costs per head are sky high. If there's any way to cut that spend, you better believe executives will be all over it. A lot of businesses don't care so much about quality and craftsmanship - as long as their customers are stuck with them they're perfectly willing to ship the most minimal product they can get away with.
There is already a big trend of automation albeit on the IT side and not on development. Where it used to take a separate IT team and developers and DB admins etc there is growing field of devOps with automation. Companies, especially startups are biting into this trend and vendors, especially Cloud vendors are spearheading this movement.
If there is glare of possibility of automating the development, these vendors and companies would have been all over it. This behaviour is not seen, means that this a possibility that exists in distant future.
(Years from now) ..."humans can learn to be surgeons, but that doesn't mean they should be allowed to do surgery."
For example:
http://spectrum.ieee.org/the-human-os/robotics/medical-robot...