I have many ideas, in various stages of completeness, about programmable systems. Specifically I'm interested in foundational or fundamentally different ideas that may tranform our interaction with computers—whether it be programming or another creative endeavor. I feel we are stifled by an environment of tedium in computing and there is much yet left to be unlocked, discovered and invented if we make the computing medium richer, more powerful and smoother.

I also believe that many present day ideas in computers and programming that are accepted and even celebrated are actually holding us back. We've reached the local maxima and need to abandon most such ideas as we seek out new ideas, or look into some of the many older ideas that have not been well explored.

Below are some write-ups organized into three sections. You can also find me harping about this stuff on twitter.

Misfits

Misfits are small and big annoyances in the prevalent systems of today. They show where the current systems, conventions and ideas are weak or broken. These are one-sided essays that emphasize the problems. The reason to lean into these problems (besides ranting) is to hope to find insights that help avoid such problems altogether, rather than to fix or workaround them.

Let's start out discussing plain text. As a programmer I have quite a few problems with the popularity of plain text. It's quite a stifling medium, when you consider the richness that computer interfaces can provide:

Stuck with Plain Text

Misfeatures of Plain Text

It's not just plain text though, the standardization around files and formats as the de-facto design space is a real problem. Somehow we've ended up with programs tightly coupled to encodings, instead of higher level semantics:

Files, Formats and Byte Arrays

On a different note, our programming culture values mental simuation of machines so much that the self-selection of folks has unforutnately ensured that powerful tools for computer aided program and system simulation are not valued:

Where’s my Simulator?

We build systems with a lot of heterogenous parts but our ideas to integrate these parts are so bad that we have a neverending supply of "solutions":

On Composition

Philosophy and Meta Ideas

These are ideas that help in the discovery and discussion of other ideas:

Finding the Frame Are we solving the right probems?

Positions

Here are my positions–what should be the key features and ideas behing things we should build:

Systems, not Programs We need programming, but do we need the program?

Offload Mental Simulation An essential feature for all future programming systems.