Hacker News new | past | comments | ask | show | jobs | submit login

> 2. Build an agent to win online programming competitions. A program that can write other programs would be, for obvious reasons, very powerful.

The people on top desperately want us gone, and when it happens it'll happen so quickly you won't know what hit you. Software engineers need to recognize this common threat and organize (labor) sooner than later. Even more important is for all engineers to plan for an imminent future where developers are not paid like they are now, if at all. We have it good, but we will be automated away like everybody else, just a little later.

For simple data import / export tasks, simple CRUD, generic admin dashboards, I agree that those tasks likely will be solvable by AI in the not too distant future. As a matter of fact, I think it's somewhat bewildering we still need human developers for that kind of task because the tasks themselves don't really require a lot of intelligence. Problem is, the technologies and systems we use to implement them today still require a lot of human interaction and specialist knowledge.

Other than that, implementing an AI that is capable of understanding business problems and solving them via code probably is nothing short of artificial general intelligence. In that case we won't have to worry about not being needed anymore anyway because by then we'll either very rapidly have a post-scarcity economy or you know ... Skynet ...

My feeling is well. If standard CRUD coding gets automated nicely, my feeling is that many (at least some?) CRUD type coders could simply move into a sort of AI business analyst type role. To be honest, business analysis is already a fair bit of the CRUD coder type job. Current AI requires training data in order to learn what the rules are, which means that most likely they will need a team to formulate the rules in a manner that the AI understands.

If AI gets to that level where the programmer is completely replaced, well, regarding "the top" that "wants us gone"... many of them would also be gone. There's no reason a general AI of that power could not automate (to give typical "the top" occupations) much of finance, law, health care, or even management / executive work.

We already have a post-scarcity economy. There is enough of everything to go around for everybody. Kropotkin talked about this in "The Conquest of Bread" in the 19th century. If history is a lesson, no degree of abundance will result in collective plenty.

The total output of the world economy is about $13,000 worth of goods and services per person per year. That's not enough to provide even just education and healthcare up to a standard that would be considered remotely acceptable by people in the west.

(For comparison: the average public school student in the US costs $12,000 to educate. And yet plenty of people will say that even that is not enough.)

But the good news is if we don't fuck up, that number will continue to grow nonlinearly, just as it has for many decades. We will live to see it cross the point where it really is high enough to give everybody a comfortable life.

> the average public school student in the US costs $12,000 to educate

Why does it cost $30,000 to educate a class of 30 kids for a month? The salary of the teacher should be <$5,000. Double, or triple that to include rent and other costs. It still comes out at half of $30K.

> no degree of abundance will result in collective plenty

Will it? When you look at most First World countries in general nobody there has to starve anymore.

In the Middle Ages only liege lords could get by without ever having to work. Nowadays, even middle-class people don't necessarily need to work till retirement age.

> nobody there has to starve anymore

Use of food banks has increased in the UK, and hunger is very much present: https://en.wikipedia.org/wiki/Hunger_in_the_United_Kingdom

This is a policy choice. For many voters, it's far more important that nobody "gets something for nothing" than nobody starves to death. This has resulted in the benefits system being increasingly punitive leaving some people without money for food for weeks at a time.

You and I have seen very different parts of the "First World", then.

Indeed, hunger is still a problem in the US. Our welfare system is so fragmented and conditional that there are numerous cracks where people of the wrong class/gender/neurotype/etc. can fall undetected and unhelped, and even in cases where resources are available, there is such a strong stigma against using them that some people don't even realize they have the option.

I feel there are a lot of areas where poverty exists in the US, and as a society, we should work to improve them. I disagree though, that 'hunger' is a problem we should be trying to address. If we're claiming that a class of people in society regularly don't get enough food, then I should see malnourished people regularly in the hospital emergency department where I work as a physician, and I never do, except in the case of alcoholics, other substance abusers, people with severe gastrointestinal disease, and some old people with severe dementia living on their own (in which case, the problem is their general inability to care for themselves, not inability to afford sufficient calories). In fact, the most common nutritional problem seen among the poor is obesity. Fyi, all the hospitals I have worked in regularly over the last 8 years have been classified as 'medically underserved areas', which usually corresponds very closely with most other measures of poverty, so I don't think I am seeing an unrepresentative sample. Edit: I should have made explicit, we should of course be putting a lot more effort into feeding those people who are malnourished around the world, of whom there are way too many.

i strongly recommend reading "the limits to growth" (don't remember authors, but it's easy to find) and "the culture" series by late mr Banks. we're nowhere near post-scarcity. in fact, i don't believe we can reach post-scarcity without a benevolent AGI that can deal with psychopaths.

For simple data import / export tasks, simple CRUD, generic admin dashboards

Tell that to the people who insist that Real Programmers™ always write these things from scratch, never use a library to help them with it, etc.

I hear what you are saying about CRUD, but then I look at Kendo and weep...

Why does Kendo (UI) make you weep?

1. You can't use standard UI automation test tools on it (easily).

2. This may just be my projects, but people tend to re-make excel on the web with it.

3. Its easy to get started coding with it, but quickly turns in to spaghetti filled with glass shards when you try to do advanced things with the controls.

They took a pretty good swing at solving CRUD with CASE tools. It was an interesting approach, but never had the flexibility to get by without customization.

I spent a few years of my life back in the 90s working on CASE tools at Oracle. The main useful remnant I now have of that time is a useful ability to spot when developers go too meta - i.e instead of just solving the problem in hand they try to build a generalized solution that can solve even problems they haven't seen yet.

>I agree that those tasks likely will be solvable by AI in the not too distant future.

What experience or understanding about "AI" do you base your opinion on?

The people on top desperately want us gone

This is a cynical view of the world. Maybe the people "on top" simply want to improve their company's efficiency in order to return value to investors, etc. My point being its economics, not some evil intent.

Software engineers need to recognize this common threat and organize (labor) sooner than later

And the point of that would be what? To protect our jobs by demanding that industry ignore and no longer pursue innovation? That seems like heresy for anyone in Tech.

If the day does come that AI starts writing code, the lost of our fat salaries and stock options will likely be the least of our problems; or perhaps the world will be void of problems altogether.

When automation comes and replaces us, we need to be owners of robots and AI, in other words to have some kind of capital and enjoy a revenue stream from it. If not robots, then at least we need to have land to cultivate for food. When nobody gives you a job any more, you either cultivate your own food, or associate with others to become investors in the new tech.

Those who already have capital and can invest it smartly might fare much better than those who only rely on BHI, which is at the whims of politicians. A person need not be super rich, if she can associate with other to buy land for agriculture or robots for manufacturing. Robots are analogous to land. You gotta have one or the other :-)

Why should we fight that? That's no different from taxi companies fighting Uber, or how Intuit lobbies congress to avoid automatic filing of taxes. Hampering progress for the greater good just because it harms you in the short term is never a good idea.

This wouldn't harm me in the short term alone, it would be a lost career and a life catastrophe. A taxi driver can work as an Uber driver. I cannot become an automated programmer. So I don't give a damn about the "greater good" in this context, and question that premise also: Sibling mentions getting used to everybody being retirees, but what I see is collective poverty with token conveniences. Time will tell, etc.

A Taxi driver can't become an Uber driver when all Uber cars are self driving, which will happen and likely happen far sooner than programming gets automated away.

HN doesn't bat an eye at Uber, AirBnB, Netflix, Amazon disrupting and taking away jobs. But it's interesting once programming jobs are threatened, some become defensive.

In any case, HN is not one person, and you will not find me defending those businesses.

Are you saying you don't think Uber, Amazon, etc should exist? Why? Because they are disruptive and potentially taking away jobs?

That's not what you said. You said no one on HN doesn't bat an eye at Uber, AirBnB, etc. I personally think the way those two companies in particular flaunt laws is unethical, and I think they should be punished until they start following them. That's not the same as thinking they shouldn't exist.

I think that's a different issue. And I also agree with you, I personally don't give AirBnB business because of ethical issues. But, I was entirely referring to how they are disrupting things.

How does Amazon flaunt the law?

"Those two companies in particular" were Uber and AirBnB, the only two companies I named in my comment. I never said Amazon flaunted the law.

If I had an AI that could write code better than I it would be AMAZING. As a solo game dev I could be 1000000 times more productive and spend all of my time designing and balancing the game with the help of the greatest dev of all time!

Yeah but: how are you going to turn your labor into "food" and "shelter".

If he's a game dev, he could sell his game?

Retirees aren't the richest bunch, true. Collective poverty isn't an unlikely outcome for the vast majority of humans. Still, "poverty" need not be uncomfortable when "token conveniences" like a private home, food, entertainment, and opportunities for (even if economically useless) creativity and learning are in abundance.

An interesting analysis on a world with increased automation via emulated brains of the best of humanity: http://ageofem.com/

> Hampering progress for the greater good just because it harms you in the short term is never a good idea.

I'd love to hear your thesis for this, in a way that doesn't whitewash away the negative effects on the individual. If you're going to claim we should all be throwing ourselves on the burning pyre of progress no matter what I'd love to hear more of a compelling argument than "never a good iea".

Not OP, but I'd like to offer up a reframing. Progress gives us the opportunity to grow, to adapt, and to learn new things. Do you want to be the person who is stuck as the person they were when they first entered the workforce? Wouldn't you rather be someone who remains present in whatever moment in history it is now, and constantly redefines themselves according to the environment they are.

There's no reason why you have to think "I'm a software engineer, therefore any attack on software engineers is an attack on me." You could, just as easily, define yourself by "I'm a person. I do software engineering because the money is good right now and that is what the economy happens to need right now, but if in the future society ceases to need software engineers, I'll retrain with whatever skill is highly valued then."

I remember coming out of college, happy to learn about the world, and thinking how sad it was that people's identities were so wrapped up with their jobs that they were broken when their jobs were eliminated. I felt that shift happening soon after I turned 30, where I started to get just a little bit too comfortable and too proud of what I was rather than what I did, and then quit so that I'd have that opportunity to grow again.

You always have these great insights - you should blog! Or at least tell us what you have been reading...

>I'll retrain with whatever skill is highly valued then.

Software development has been invaded by mouth-breathers who don't give a shit about what they're doing, and I don't see a way to switch careers as an adult chasing money without becoming one of those.

Well, it might involve respecting fellow human beings and acquiring a bit of humility.

And I don't meant that facetiously - interpersonal skills matter. A lot more than pure technical skills, because they allow you to leverage groups of people to achieve bigger goals.

One way to do that would be to give a shit about what you're doing even after you switch careers.

But I'm not whitewashing away the negative effects of the individual. We'd all be personally very screwed if programming was automated. But I've never seen anyone on HN ever stand up and defend truck drivers, lawyers, taxi drivers, hotel workers, factory workers etc all who currently have their job threatened to various degrees. The double standard is what I'm complaining about. You can't have it both ways.

I'm not the person you asked. But for me, I think we have for too-long "fought" pure progress in the name of social-welfare and protection. So much so that that effort affects and pervades every facet of life. Just look around you and think how many jobs would not exist, or how many generations of people would not have made it this far if it weren't for societal-level intervention on the part of a state. The net-result of that is that if we were to now have some sort of revolutionary piece of progress, it would displace millions if not billions of individuals. Of course that is bad.

I know it sounds cruel to talk about people like a resource or as an animal, but that is precisely how I see society as treating lots of us in the name of a greater good. Under the guise of social-welfare we've increased our numbers to levels that never would have occurred naturally by us simply taking care of the really needy.

So now we're stuck in this predicament. Either we progress our society, and potentially affect a lot of people negatively. Or help everyone slightly-struggling and below out by preventing a technological-revolution so we can grow a bit at a time, and delay the problem for the next generation.

Maybe it's never a good idea at a species/progress level. But it's acceptable that trying to stop progress is a good (albeit selfish) idea at the individual level.

I have no interest in organizing to artificially give myself a job that isn't necessary. In fact that seems insane.

I think the better way to avoid our replacement is to think about our non-coding contributions to our companies.

I'm a full-time software engineer, but I spend maybe 50% of my day implementing code. I spend a lot of time figuring out trade-offs, exploring edge cases, and verifying that the business/marketing people know what the side-effects of a given feature will be. There's also a lot of flag-waving to make sure that small problems don't become big problems.

I've run into the "that should be able to be automated" hand-wave of a thought before. I think it's always done by people who haven't actually spent time thinking about the edge-cases and all the little decisions that are put into a final software project. Sure, you can hand-wave and get a CMS, but you're going to be unpleasantly surprised when the defaults don't match your subconscious expectations.

Here's how software engineers could retain their position in a world where our code is automatically generated:

- Understand and communicate the trade-offs of different solutions

- Embrace product design-- a lot of us unwittingly become novice visual designers and product designers during our work, and we should embrace that domain knowledge that we learn, rather than being frustrated that we're being taken away from our primary task, coding.

- Explore edge cases, and explore new ways of doing things

- Understand and get involved in the business process!

The capital holders in all industries would love expensive human labor to be replaced by cheap automated labor. If programming AI is created, no labor organization could save software engineers, just as it would be ridiculous to think horse and buggy drivers or telegraph operators could have stopped the march of progress.

The bigger issue is what has we've already started to witness: automation leads to accelerated accumulation of wealth and resources among those who already have the most capital. Historically, corporate profit and labor demand went up or down together. Now they're diverging: corporate profit grows while demand for labor shrinks. The spoils of corporate success goes to those who own the tools of automation, and others lose their job and income.

In any case, OpenAI's vision here is much bigger than making software developers obsolete: they want to study (or create) AI that can improve itself (i.e., a singularity scenario).

Almost every reply to my comment talks about saving jobs, but I never even brought that up. Organization is important because you want to be left with something more than a seat at the unemployment office when your job does disappear.

Apparently what you wrote has given everybody this impression. What are you really suggesting?

Pensions. There will likely come a time when most of us are no longer employable. We have (or will have) put our lives into this and made a small group of people very wealthy. Without negotiating from a position of relative strength, we will be left with nothing when we are no longer necessary.

> Software engineers need to recognize this common threat and organize (labor) sooner than later.

Has organized (labor) ever saved organized labor's job?

From obsolescence? Never. The only thing it does is anticipate it.

Organized labor is useful against a whole lot of problems, but not this one.

The solution to everyone being automated away isn't to halt the advances of automation and inflict inefficient make-work on the economy, it's to get used to the idea that we will all become effectively retirees.

If we can be automated away, we will be. No amount of organizing is going to stop that. And even in some alternate universe where it could, why would you want it to? Automation is what we do.

I see this coming from a much smaller perspective as well.

If one would reflect back on the applications that they've built in their career I suspect a number of those applications are now available generally as packaged software with customizable components.

E.g. The dawn of the web saw many publishing, & catalog systems being built. Now you don't need to, you can simply grab a commercial or OSS package and customize it for your needs. Same is true for document management, workflow.

This hasn't impacted jobs yet because we are still early in this industry, and growth is still outpacing this commoditization. But, yeh, I see the day where software developers become quite rare and software customizers are common.

The tricky challenge is organizing our labour efforts. It's already easy for IT organizations to outsource development to cheaper markets, I fear labour organization would accelerate that movement.

Imagine the potential of a world where anything can be built nearly instantly. If a computer can program itself, we can concentrate on trying to come up with useful things to make, instead of worrying about what we're capable of making. I have a really cool idea for a video game, but it's not going to be made because I don't have time to build it... but if a computer could make it. Wow. I become an imagineer, not a software engineer.

Step it up a level further, if computers could think of programs to build themselves (which they probably would have to if they are going to be anywhere close to practical), that's when the "singularity" truely starts to take off. At the speed that computers operate, programs would very quickly go beyond what humans are capable of.

Organize to do what, exactly? If software engineers became obsolete, why should anyone listen to an organization of them?

It's not in any danger of happening soon, but if/when it happens, you might as well join the union of street gas lamp lighters.

I actually think that there has been a long-term awareness of this fact in our industry, for decades now, and its one of the driving, motivating factors behind the entropy of the field. The OS-vendor guys know if they improve their OS'es, the systems-programming guys will get automated away, and if they get automated away, the applications-programming guys will be next .. so, subtle imperfections and flaws in the way things operate at a system level are allowed to persist, such that further downstream there are still opportunities to perpetuate the need for hands-on engineering. I can think of a few examples of where it feels like OS vendors/systems developers intentionally hobbled the functionality of their environment in order to make the long-term viability of the industry more resilient ..

So, I think it'll be a long time until 'the people at the top' get what they want. Until they start coding a replacement for Dropbox or SublimeText that will be the end-all of filesharing/file-editing, we'll always need another IPFS, another Atom, etc., etc.

The people on top? How about the software engineers themselves? As a software engineer myself I look forward to the day I'm forced to change careers due to obsolescence if my skills. I can't wait to see what people can achieve when anyone with an idea can make it happen with such ease.

Just in case, since I think I'm up against Poe's law here: I am, in fact, 100% serious.

I'm going to venture a guess that programming will be among the last jobs to be automated away. It's not clear that there will be a career to change into.

>>The people on top desperately want us gone, and when it happens it'll happen so quickly you won't know what hit you.

Isn't, given a problem 'X', produce a solution 'Y' kind of automation, called AGI?

Well then you have little to worry about. If AGI is indeed invented you have bigger things to deal with than worrying about your job.

In any such eventuality 'people at the top' are likely to be eliminated rather more quickly than us. Because an AGI with huge resources can make far better decisions than any CEO ever can.

If everybody else will be automated, who will buy all of these products and services? I dont suppose that AI will need anything else beside electricity and cpu time.

You aren't thinking at the right scale. If a computer program can do any complex task humans can do, worrying about unemployment is the least of our problems. Such a world would be so different than our own. It may have an entirely different economy, and it may not have people at all. I don't know, but I think it's equivalent to a caveman predicting what the effects of steam power would be.

If we end up being automated fully, I think that least important thing anyone can think of is that we will be paid less. I think that something like this is unavoidable but quite dangerous, singularity, etc.

The upside is that I think it would be really accessible for anyone to have it's own personal army of programmers. Although that's also quite dangerous.

Personally, I think you overestimate how difficult it is to translate an arbitrary set of human business rules to an API/website. And how arbitrarily the business side wants to change things without a concrete understanding of what they want the result to look like.

Programming jobs are protected by the halting problem. It has been proven that no program cannot detect if other programs halt or not (i.e. goes into an infinite loop or completes). I paraphrase, but this is the general idea. As long as this is true computers will not be able to program themselves except in very limited ways.

The only way around the halting problem is to use something other than computation as we know it. I.e. an entirely new kind of machine based on different principals. And no, quantum computers do not solve the halting problem since they are still Turing-complete machines.

The halting problem is often misunderstand as "computers can never detect if a program halts". It actually states that "computers can never detect if an arbitrary program halts".

There is a fairly large subset of useful programs that can be proven to halt. Anything that uses straight-line linear control flow. So can anything with that plus conditionals. So can that plus foreach loops, as long as iterators do not reflect updates to their underlying collections. Add a "forever { ... }" construct and you can prove that the program will not halt; in combination with the other constructs, you can prove liveness on each request handler while also guaranteeing that the server itself will never go down.

The two constructs you have to watch out for are loops that mutate state used in the conditional and unbounded recursion. Even for these, there are techniques to increase the set of programs that can be reasoned about, eg. using dataflow analysis to identify which state is mutable and preventing it from being used in conditionals or tracking data & codata through the typesystem.


Such a language would not be Turing-complete; you won't be able to write an interpreter for a Turing-complete programming language in it. But the majority of common business problems don't require an interpreter for another programming language; most of them focus on storing data, triggering events, or computing functions of data.

I commented in a similar vein on a piece that said that smart contract environments should never use Turing-complete languages because of the undecidability of program properties: https://news.ycombinator.com/item?id=11942015 (That piece seemed to have a misconception that you can never prove properties of programs, rather than that you can't always prove properties of programs.)

The halting problem also makes an assumption on the program's size. In practice we probably only care about programs under, say, a billion petabytes (or any other finite limit you can think of). In theory you can have a Turing machine that solves this regardless of the program's structure.

If you mean "programs that can only use a billion petabytes of storage", then that's true, but if you mean "programs whose code is less than a billion petabytes long", it's not true. (Someone recently calculated a result that I think can be interpreted directly as an actual decidability bound, and it's dramatically shorter than that.)

I meant that there exists a TM which solves HP for programs smaller than a given size. This makes it computable. Now, just because we can prove the existence of a TM, doesn't mean we can find it. It's true that for programs which use a finite amount of storage we can actually describe the algorithm for the TM, but that's not what I meant.

This seems to be a weird issue conceptually:


Because of the list of correct answers for a finite subset of the Halting Problem is finite, the Turing machine you mention does exist, but we not only can't find it, we can't know when we've found it!

Where the Math Overflow post mentions that "experts could compute the particular value of n", there has recently been such a bound published in a thesis, such that we can be confident that we can never construct or recognize the solutions beyond that point (using a particular axiomatization of mathematics).

You referred to the idea that "you can have a Turing machine that solves this", and we can agree on that with the caveat that, above certain problem instance sizes, you can't know or verify in any way that you have such a Turing machine!

Yes, this is absolutely correct. If you give up on Turing-completeness you can prove that a subset of programs halt. A computer could search this infinite space for programs that solve a particular problem. However, there may not be a program P in this space that solves the problem in question so the problem of finding P in the subset of provably haltable programs does not necessarily halt.

My argument stands. Unless the halting problem is overcome, there will still be jobs for humans to write Turing-complete programs.

You merely defined halting problem. You did not argue the following:

Turing machine X can produce programs that meets certain specifications => Turing machine X solves the halting problem.

I'm not trying to make that argument.

Humans can't solve the halting problem either.

Here's a nice simple one for you:

    def collatz(n):
        while n > 1:
            n = n/2 if n%2==0 else 3*n+1
Is the above program guaranteed to halt for all integer inputs?

In practice, programming doesn't require solving halting problems. We write programs that are on average easy to analyze, especially if you're calibrating the scale with busy beavers. There's no fundamental reason that a computer program can't collect requirements, collect clarifications, and translate those specs into executable code. Clearly it's hard (How do you do the translation? Optimizing Prolog isn't easy! And how do you avoid asking for millions of things that humans take for granted as obvious?), but I don't see anything that makes it impossible.

If we take the simple case of genetic algorithms, we already know that it is possible to brute-force the problem of programming.

The halting problem doesn't really matter that much in this context. Just spawn up a bunch of threads that churn away at the problem, using random mutations, and any that go on too long can just be considered flawed, regardless of whether they have any redeeming qualities.

Then you select the winners, based on the selection criteria, and churn away on some more mutations of those new variants.

Sorry multiple threads will not get you around the halting problem. The brute-force genetic algorithm you describe also suffers from the halting problem. Just look at the algorithm as a whole. Say you are searching for a program P and you have some criteria for recognizing it, including a maximum run-time. There is no way to know if the genetic algorithm will ever find P or will itself just run indefinitely.

In general, you will not be able to easily find P using a genetic algorithm (which amounts to a random walk through the space of all programs) even with many threads. The problem is that the algorithm is exponential in the length of P. It only works if you only consider a very limited set of possible programs. E.g. very short programs or programs which are only slight variations on a known program.

There exist equivalent problems for human minds, though. E.g. the Riemann Hypothesis - people keep trying to find the proof, but noone knows if the proof exists, so it's not a given that the search will ever finish.

That's the only way to totally solve it. You can get pretty far with imperfect shortcuts. Maybe far enough that it doesn't matter.

This profession is probably the only one that automates itself. It has always been like that for developers, yet they 're still in high demand.

Seriously, why would you need programmers if the machine does it better (this needs to be assessed somehow first)?

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact