Always remember, however, that there’s usually a simpler and better way to do something than the first way that pops into your head.
Worldwide shortage in professional programmers is projected to grow by 25% every year. The US Labor Department estimates that the global shortage of software engineers may reach 85 million by 2030. SlashData, a leading analyst company in the developer economy, projects a global 45 million software engineers by 2030. This means that by 2030, for each software engineer position, there would be about 2 positions missing.
This shortage in programmers and the costs and time involved in current software development methodologies are pushing the industry to invent No-Code tools that enable development by citizens who are technical people with no programming skills. These No-Code tools keep the promise of creating a solution without typing a single line of code, but they are by far less expressive than a full blown General Purpose Programming Language (GPL), lacking any pretention to be Code.
In fact, these No-Code tools are missing the most important property of software being “soft”, resembling hardware more than software, since they use pre-compiled components. In order to retain the “soft” property, they must be expressive like a programming language; that is, be Code. At the same time they must be simple enough for citizen developers; that is, be No-Code.
1 in 5 Turing prizes has been awarded for direct contribution to programming languages; thousands of books and scientific papers were written on programming languages; yet, programming languages remain complicated. Furthermore, programming languages are constantly invented (see the table below with Typescript and Rust invented in the last 10 years), but they are not going in the direction of simplification (from the table below it seems that these two languages are among the most complicated ever invented).
The first attempt to create a simple GPL was put forward by three software engineers that invented Go language: Robert Griesemer, Rob Pike and Ken Thompson. In order to keep the language simple, each could veto new features. This kept Go at about 2 times smaller than other popular languages at that time, such as C++ and Java. Creating a simple GPL is a complicated task, emphasized by Rob Pike in his talk “simplicity is complicated”.
We took this idea to extreme and created TOO – a very simple programming language and a platform. 70 years after the first programming language was invented, TOO enables both citizen developers and professional programmers to create any software solution in minutes, without typing a single line of code.
TOO is influenced by the powerful and compact Go language. It contains all the key features of Go, but it is about 10 times smaller. TOO is formally defined as statically typed, event-driven and object-oriented.
Language | Keywords | Operators | Syntax rules | Year | Author(s) |
---|---|---|---|---|---|
Fortran | 39 | 16 | 170 | 1957 | John Backus |
C | 32 | 27 | 100 | 1970 | Dennis Ritchie |
C++ | 90 | 35 | 200 | 1979 | Bjarne Stroustrup |
Python | 33 | 39 | 90 | 1991 | Guido van Rossum |
Java | 51 | 34 | 250 | 1995 | James Gosling |
Ruby | 13 | 28 | 60 | 1995 | Yukihiro Matsumoto |
C# | 78 | 41 | 220 | 2000 | Anders Hejlsberg |
Go | 25 | 34 | 100 | 2009 | Griesemer, Pike, Thompson |
Typescript | 50 | 35 | 150 | 2012 | Microsoft |
Rust | 35 | 45 | 250 | 2015 | Graydon Hoare |
TOO | 1 | 4 | 10 | 2022 | Assaf Zeira |
Simplicity and expressiveness are two contradicting goals. Making a language very simple might render it crippled, limited to a certain domain of problems. On the other hand, making a language very expressive with many statements, syntax rules and operators, might render it too complicated for citizens. In order to achieve both, TOO was gradually simplified while maintaining expressiveness. In this process we adopted the KISS Principle ubiquitously. TOO language, at the core of our technology, is simple, the accompanying tools are simple, and the methodologies are simple. The resulting programs are simple to read, develop, debug and evolve. The following are the main simplifications.