Thoughts on Programming Environments - tifojo/knowledge_base GitHub Wiki

The Problem

As the complexity of modern software increases, and as software penetrates ever deeper into modern life, the need to make the tools of software creation more humane and accessible has never been greater. The lack of diversity in the software industry, and the concentration of power in the hands of a few large corporations, are now widely discussed issues, but the role that the fundamental tools of the software industry—languages, libraries, frameworks, and programming environments—play in creating these problems largely goes unaddressed.

In particular, I believe that the dominance of text-based program editing is a major stumbling block. While the expressive power of text-based syntax and the universal utility of generic text editors is obvious, at a high level these tools obscure much of the underlying structure of a program. For complex software systems involving many layers of data sources, transformations, modules, and services, the situation is even worse. A hierarchical directory tree of flat text files is, in many ways, a particularly poor way to represent such systems. I believe a better approach is possible, where the user-facing representation of a software system is decoupled from its underlying abstract structure, and the most appropriate representation can be chosen freely based on the needs of the programmer, the level of abstraction being used, and the problem domain at hand.