Apple Dylan IDE (2014)
In case people don&#x27;t know, this is often referred to as a &quot;projectional editor&quot; and the paradigm is also known as &quot;Intentional Programming&quot; in the sense that the programming environment helps capture the intent of the authors.<p>Popularised (if we can call it popular!) by Charles Simonyi of Microsoft&#x27;s fame who created the company called Intentional Software that was recently purchased by Microsoft.<p>There was interesting editor called Isomorf that demonstrates the benefits of a non-text-based editor.<p>(site is down <a href="https:&#x2F;&#x2F;isomorf.io&#x2F;" rel="nofollow">https:&#x2F;&#x2F;isomorf.io&#x2F;</a>)
(youtube demo <a href="https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=awDVuZQQWqQ" rel="nofollow">https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=awDVuZQQWqQ</a>)<p>I would really like to see something like this take off.<p>I firmly believe we can only unlock the next generation of software engineering by breaking free from plaintext. Think about it, how many more ASCII symbols can we mangle together to create meaning and context?<p>A structural editor takes all of that away. Suddenly syntax becomes a choice just like the colour theme of your editor.<p>Plaintext programming puts us into a fight with the computers because on one hand we need to keep the syntax parsable and on one hand humans need to read and write it.<p>It&#x27;s a huge conflict of interest. You want to provide information to the compiler now the syntax becomes hard and complicated (rough example: Java). You want to keep the syntax human-friendly now the program becomes weak from the compiler&#x27;s point of view (rough example: Python).<p>Our editors need to be context aware so they can hide&#x2F;show relevant information and to encourage the people to provide as much information about the context&#x2F;domain as possible.<p>If you look around you see we have been doing a lot of this stuff in the past decades but for some reason we just half-ass it by baking stuff on top of plaintext.<p>For example embedding documentation or even unit tests (python &quot;doctests&quot;) in comment blocks in ad-hoc languages.<p>Or we embed naming conventions and so on to relate concepts with each other.<p>For example a &quot;User.js&quot; file and &quot;User.spec.js&quot; file for a test.<p>If we kept information in a structured manner suddenly so many of our problems would go away.<p>For example we will get structured version control. No need to have something like git tracking lines in files.<p>We will get unit testing that is always correctly tied to its relevant components.<p>We will get documentation that is structurally accurate. The editor could switch between programming and &quot;documentation&quot; mode. But the documentation would be a first-class object of the program not just some text that is shoved into it somewhere.<p>We will get much smarter re-factoring.<p>We will get much better compatibility across versions. Because there&#x27;s no syntax to worry about breaking from a textual perspective. Because the program becomes a semantic tree and older programs can be &quot;transformed&quot; to fix them or make them compatible or something similar.<p>Because we are text-free the environment can encourage the programmer to provide a lot more information because it can get folded&#x2F;hidden&#x2F;etc.<p>The &quot;units&quot; will all have unique identifiers so confusion in naming and so on will be significantly reduced.<p>Perhaps you could create and publish modules&#x2F;units in some central repository then use them in your projects. Kind of like NPM for example but a lot more structured.<p>So you could import a bunch of &quot;units&quot;&#x2F;functions from someone else&#x27;s catalogue.<p>Because everything could have metadata attached to it you could imagine for example &quot;security advisories&quot; could be attached to certain units such as a function and published.<p>The environment would know exactly in which places you are calling that exact function and it could alert you to the fact.<p>You could do semantic find and replace (&quot;show me all sql queries&quot;, &quot;show me all untested functions&quot;, &quot;show me all functions modified by John Smith since last 14 days&quot;, &quot;show me all undocumented functions&quot;, etc...).<p>You could do smarter CI&#x2F;CD by way of defining rules and constraints on the structure of the program.<p>Made-up Examples:
- If the changeset involves objects tagged with &quot;security&quot; require approval before deploy
- If the changeset introduces new SQL queries ping the DBA team
- If the changeset introduces more than 1 function without corresponding documentation show warning
- If more than 50% of the new objects introduced in the changeset lack corresponding test cases fail the build
- You get the idea..<p>The point is, all the cool stuff we&#x27;d like to do depends on us having a lot more structured information and context about our programs and a plaintext environment is not suitable and is hostile towards that.