I hope that we stop sharing an ASCII language with the compilers.

It is the root of many of our difficulties in programming.

If we create very good "program editor" (not text editors) and store our programs as a data object in a database a lot of our current "problems" automatically vanish.

Every node of the program will have a unique identifier so the editor can keep track of it across the lifetime of a project.

We will get automatic version control. Syntax war will end because you will be able to customize the syntax exactly how you like.

The editor can track the association between tests and documentation with the objects in the program.

And so much more. At the moment we share an ASCII language with the compiler. This creates a fundamental tension between the human and the computer.

On one hand we want to specify lots of things about our programs to make it more maintainable and reliable on the other hand we want to keep things easy on the eyes and parseable.

So we create a strong dis-incentive to providing information about the code to the compiler.

Because all we have is a single layer of text which will quickly become polluted.

We need our programs to be able to have lots of meta-data but have an editor that is capable enough to allow us to view what matters at a given time.

This can only be achieved if we stop thinking about programs as lines of text, but rather as data objects.

This is known as "Intentional Programming" if you are interested search for it on Youtube.

Also see Isomorf.io for a basic demo (https://www.youtube.com/watch?v=awDVuZQQWqQ) (I'm not affiliated with them).

What would take to use for example image editor like mspaint to write programs instead of text editor? We would still need to write text for interfaces with users i guess

I'm not sure I fully understand your question.

Of course text would still be highly involved in the process. But the unit of a program will not be lines in files stored on a file-system.

The program will be a data structure and what the editor presents to you is just a editable projection of that structure.

And that doesn't mean some clunky tree editor GUI with drag and drop either. A sufficiently capable editor could present itself to you almost like a text editor but under the hood it would be operating on rich data objects that form the program not on lines of text.

This opens up a lot of opportunities, for example in project navigation. You could label an entire section of the program as something (example: "Create user") then the editor could give you nice fold/unfold features you could incrementally dig down and navigate the program that way.

You could tag objects in the program with stuff (example: tag a set of functions with the business topic that they deal with).

Because the editor accurately tracks meta-data related to program objects, for example it could be always aware of documentation related to a particular section or function in the program.

So that editor could give you a shortcut to instantly switch to a "documentation view" or "test case view".

I know some of this stuff is already sort-of possible with smart IDEs but they are still quite fragile and inaccurate and easily tricked as they rely on fragile tricks and heuristics to associate things with each other or they rely on conventions that pile up on top of each other and conflict with each other (file naming conventions to indicate something is a test case, etc...).

Treating programs as data objects gives us a strong foundation upon which we can make these fancy features with ease and high accuracy so that you can let your guards down and trust the editor to always be correct.

If you were going to take a new try at building a system like this, do you think something like Datomic's codeq[1] would be useful? It allows for navigating code semantics across multiple projects using a database query language as the interface. I've never actually used it but maybe it could help for data storage of an intentional programming system?

Thanks for the links, this was the first time I've heard of intentional programming. Neat idea!

[1] https://github.com/Datomic/codeq