Without fail, when people hear what Unqork is and what it can do—when they’re shown its drag-and-drop-interface and told about the applications that have already been built with it—they turn to one question:
“If Unqork is so powerful,” they’ll ask, “then can it be used to build Unqork?”
It’s a fair question, and we hear it from all over. Prospective clients, job candidates, and even employees all tend to train their curiosity about the platform on this capability, with the implication that powerful software can only be created by writing real code.
We’ve proven that Unqork can not only be used to build Unqork, it can be used to build any software imaginable. How did we prove that? By building a working Turing machine with Unqork, thereby demonstrating that Unqork is Turing complete.
If any of these terms and claims are confusing to you, don’t worry. We’ll walk through what it means to be Turing complete, how we proved that Unqork meets those standards, and what this all means for the future of the platform and no-code as a whole.
What does “Turing complete” mean?
“Turing complete” refers to any abstract machine that can be used to emulate a mathematical computation model known as a Turing machine. That’s already a lot of terminology, but for now, it’s most important to remember that any programming language that can build a Turing machine is considered Turing complete, and anything that is Turing complete can theoretically be used to solve any computing problem.
Let’s start with a quick history lesson. In 1936, legendary mathematician and computer scientist Alan Turing wanted to build a machine that thought like a person, breaking problems down into steps and then working through them. To do so, he first sought to provide a mathematical description of a very simple device capable of arbitrary computations, in order to prove the properties of computation in general. This device has come to be known as a Turing machine, and it’s the gold standard for defining computational complexity.
A Turing Machine, reconstructed by Mike Davey as seen at Go Ask ALICE at Harvard University (Photo by Rocky Acosta – Own work, CC BY 3.0)
To get a sense of how a Turing machine works, let’s zoom way out and think about what the computers we use today really do.
On a fundamental level, every computer takes in an input and stores that input in its memory—say, the right-click of a mouse in your web browser. Then, the computer processes the input stored in its memory and manipulates it to produce an output—i.e., the menu that appears in response to a right-click.
All computers work on the principle that when you, the user, provide a given input and a given state, the computer will provide the same corresponding output every time. Any computing problem, from processing a right-click to executing a complex machine learning algorithm, can theoretically be broken down into discrete steps, from input to memory to process to output.
Think of it like counting from 0 to 10 and then stopping. If you start at 0, your next step is to get to the next number, so you add 1 and bring the count to 1. From 1, you want to get to the next number, so you add 1 and get to 2. You remain in this counting state until you get to 10, at which point you stop the counting process.
A Turing machine represents this idea in an elegant way. It carries out the starting step, intermediate steps, and the final step. In order to move through these steps, the machine must understand which step it’s currently at by transferring information from input to memory. Then, it processes this input and determines what to do next—to move on to the next step or stop—by transferring information from process to output.
The 1936 iteration of a Turing machine obviously predated mouse clicks, web browsers, and every programming language we use today, but what the machine represents in the abstract has remained the same. If you can build a Turing machine with a particular programming language, that language is theoretically capable of executing all tasks accomplishable by any other Turing complete language.
What else is Turing Complete?
It probably comes as no surprise that powerful programming languages like Python, JavaScript, and C++ are Turing complete. They’re currently the standard for building software, and they could theoretically be used as the foundation of any computable task.
Beyond these programming languages, some technologies you may not expect have been proven to be Turing complete after a little hacking. That includes Microsoft PowerPoint, Pokémon Yellow, and Minecraft.
Don’t let these examples fool you. Though the image of a Turing machine built in Minecraft may the concept of Turing completeness seem like it doesn’t mean much, incredibly powerful technologies like the scripting language behind Bitcoin are not Turing complete. And as far as we could tell at the time of publishing this article, no list of Turing complete technologies has ever included a no-code development platform.
How we proved that Unqork is Turing Complete
Doubts about the serious programming chops of Unqork, and of no-code platforms in general, compelled us to seek definitive proof of Unqork’s capacity for complexity.
To establish that Unqork is Turing complete, we used the components housed within the platform to build a binary flipper, which takes a string of 0s and 1s as inputs, stores each one in memory, and then “flips” them to become the opposite number:
This example fulfills all of the requirements of a Turing machine because it follows each of the input to memory to process to output steps we outlined above.
With a functioning binary flipper built entirely within the platform, Unqork is the first no-code application platform to be demonstrably Turing complete.
What comes next
It’s a mathematical truth that, with enough time and effort, Unqork can be used to build anything that any programming language can build, including Unqork itself.
We’re not saying that Unqork can be used for machine learning applications as easily as you might be able to with Python’s TensorFlow library today. This article should instead serve as a spark of inspiration, and as an indicator of what’s to come.
Python has been Turing complete since it was created in the late 1980s. However, it couldn’t practically be used for the game-changing machine learning applications it’s currently being used for until libraries like the aforementioned TensorFlow were created within the past decade. It’s taken an innovative, faithful community that trusts the language’s capabilities to continually push it forward.
Consider this an open call for the no-code community to do the same. We’ve demonstrated that Unqork can handle all of the passion and creativity you can throw at it, so don’t hold back. And the next time you witness somebody claim that no-code is applicable for certain cases, but real development needs real code, point them here.
You now know that Unqork can be used to build a Turing machine. If you want to see what else it can do, we recommend watching our platform overview.
If you’re interested in Turing machines and want to learn more about computing at its most foundational level, we recommend this article from Quanta Magazine.