crisis in computer programming

Computer programming has NOT advanced in ~60 years!


The last significant advance in (main-stream) computer programming was object-oriented programming, introduced or formalized by the programming language SIMULA. But that was back in 1962.

Now in 2019, computer programming hasn't advanced, not fundamentally. Software is still written primarily in SIMULA-inspired C++ which itself has aged ~40 years.

The object-oriented syntax of C++ has certainly facilitated developing more complex programs. But that in itself is a problem -- programs have become far too complex. The innovation of OOP was a syntax for encapsulating code with an interface. But interface is only a fraction of total code, bulk of most objects is actually written in low-level imperative C, an error-prone way of programming. Writing, or not writing, one silly ampersand & in C++ can easily cause failure: f( obj ) vs f( &obj ). C/C++ were never meant for writing highly reliable software, they were developed on research computers where mistakes were harmless and funny.

During developing of this author's own web-browser Tyrantula, its C++ code developed from easily-comprehensible ~1,500 lines-of-code in ~10 C++ files, to bewildering ~14,000 lines-of-code across ~120 C++ files, at which point, this author decided to stop adding new features. Had went past limit of C++'s ability to scale with program complexity by its object-oriented abstraction. One major problem was simply too many C++ files, reading code of core web-browser requires loading ~80 C++ files into an editor.

  Tyrantula [2020/04]   |     127 files |     14,154 lines-of-code | based on webkitgtk-2.24.2
  webkitgtk-2.24.2      |  17,588 files |  3,947,618 lines-of-code |
  mozilla-19980331-unix |   4,673 files |  1,328,769 lines-of-code |
  Firefox-76            | 284,017 files | 42,067,556 lines-of-code |

next advance in computer programming

This author predicts the next advance in computer programming will involve:

  • The end of writing lines of static code.
  • The end of step-by-step (imperative) programming.
    (No variables, no loops, no if/else, no functions, etc.)
  • Result-oriented programming.
    (What-to-do, rather than how-to-do.)
  • Dynamic graphical representations of a program.