My friend, colleague, and homonymous intellectual doppelgänger Evan Teran always likes to remind me of Betteridge’s law of headlines:

The answer to virtually every clickbait title that asks a yes/no question is: “No.”

Mark Cuban, in an interview on Bloomberg TV, claimed that the next wave of automation will be “the automation of automation.”

By that, Cuban means software will soon begin writing itself, which will ultimately eliminate those lucrative software development jobs. About writing software, Cuban said: “It’s just math, right?” Humans will no longer be needed.

Hold my beer, I’ma explain some math.

Remember *The Imitation Game*? The Academy Award winning
movie from a few years back, starring Buttercup Cummerbund and British
Natalie Portman? It was loosely based on Alan
Turing’s groundbreaking work cracking the Nazis’ cryptographic
codes, helping the Allies win the war. That very same dude is much
more famous among mathematicians and computer scientists for his work
on the *Halting Problem*.

The Halting Problem dates back to the seventeenth century, from none other than Gottfried Leibniz—the same dude who independently discovered Calculus, even though Isaac Newton usually gets all the credit. Leibniz dreamt of building a machine that could automatically check whether mathematical formulas were correct or not. If you’ve gathered by this point that mathematical formulas are effectively the same as computer programs, then congratulations! Take a sip of my beer as a reward.

Fast forward to the early 20^{th} century, and a sort of
revolution was going on in the world of mathematics: New systems were
being developed to formally encode *logic*. Think of it like
the system of algebra you learned in grade school, except that instead
of numbers you’re working with logical statements. David Hilbert was at the forefront of
this research, and in 1928 posed the question: Is it possible to
devise an *algorithm* (*vi&*, a computer program)
that can *automatically* determine whether a given logical
statement is universally valid? This became known with the
extraordinarily Deutschtastic name *„Entscheidungsproblem“*. A
few years later, Austrian expat Kurt Gödel—who is also famous
for discovering a “bug” in the US constitution at an
immigration court appearance with Albert Einstein—proved that
the answer to the entscheidungsproblem is: No, it is provably
impossible. In his seminal paper titled *„Über formal unentscheidbare Sätze der Principia
Mathematica und verwandter Systeme I“*, he shattered the
entscheidungsproblem both in theory and in Deutschtasticness.

So, back to Turing. A few years later, but before the events that
inspired *The Imitation Game*, Turing created a mathematical
definition of a computer which we now call a *Turing Machine*,
and on which practically all modern computers and computer science is
based. Turing realized that the logical statements and algorithms
Hilbert and Gödel were working with were in fact no different than the
programs that could be computed by his Turing Machine. He then
restated the entscheidungsproblem in this context: Is it possible to
write a program for a Turing Machine that can take *another*
program and that other program’s input and *automatically*
determine whether that other program will terminate? This became
known as the *Halting Problem* and, just like the
entscheidungsproblem, Turing was able to prove that the answer is
“No”: **It is impossible to create a program that can automatically
determine whether another program will terminate.**

Please indulge me as I briefly delve into metaphysics and, dare I
say, even digital physics. Can our universe be described
using logic and/or computation? In other words, if there were some
infinitely powerful Turing machine, could one write a program to run
on it such that it could accurately simulate the entire universe?
If so, then we humans are bound by the same theorems that prove
mathematical logic is incomplete and that the Halting Problem is
undecidable. In other words, it’d be impossible for even
*humans* to prove that a given program is correct.

The Halting Problem is part of what makes programming computers hard: Any program with even a modicum of real-world complexity cannot have provably correct behavior. Those logical flaws and unintended behaviors are precisely what hackers exploit to make programs do things that the programmer never intended. Human programmers are only able to do a passable job of quality control because we have the benefit of heuristics and instincts that are guided by our general intelligence.

Let’s say we develop a computer program that can take a human’s high-level description of a task and automatically generate a computer program that can complete that task. There are two possibilities:

- the human is specifying all of the complex logic, and the computer is simply translating that specification into a program by rote; or
- the human is not specifying any complex logic, and the computer needs to determine the logic that needs to be in the program to accomplish the task.

Could I write a program that accepts inputs like, “Create a program that displays pictures of cats,” and then automatically generates a program to do so? Sure. Could I create a program that automatically creates a program that is able to interface with the highly formally specified interface of another automatically generated program? Probably. But the vast majority of software projects are for solving complex human problems, and typically involve integration with numerous legacy programs and software that were written by crazies, idiots, and crazy idiots. Professional programming sucks. Don’t believe me? If you take away nothing else from this essay, please read this article. I’m serious, read it. Any professional-grade program that can automatically generate other programs will have to grok how to interface with the undocumented source code of other humans. That’s impossible unless the computer is intellectually indistinguishable from a human.

**In order for a computer to automatically generate a program that
solves a human’s problem, there either needs to be a human deciding
the logic ( i.e., a programmer), or the computer’s
intelligence needs to be indistinguishable from that of a human.**
And if we have computers that are intellectually indistinguishable
from humans, we’ll have more issues to deal with than simply losing
software jobs.