This is a snapshot of what’s on my mind right now.
Modern computing is far too rigid. Applications can only function in preset ways determined by some far away team. I am currently exploring how to make programs more malleable and computing more humane so that anyone can reshape, extend, compose, and share new functionality in ways that were never anticipated or planned for. I hope to restore some of the magic that mainstream computing has forgotten and give people more power to create the computing environment that works for them.
It’s quite depressing how much software is isolated in hermetically sealed silos and is rewritten many times over rather than recomposed. I have a dream of giving people more control of their whole computing environment through tools that make it easy to reshape programs across multiple devices however they like. In the same way that a web browser is meant to be the user’s agent, we need to create a user agent for the whole computing experience.
I am planning to add a specific project page about this once I’ve explored existing research in this space and developed my own thoughts further. Here’s some of the related work I am examining:
- Cake language for composition and the concept of an “integration domain” from Stephen Kell
- Smalltalk, Self, and similar environments that support inspecting and altering capabilities dynamically via late binding and reflection
- Tools for thought that meld the digital and physical worlds, such as:
- Desktop environments that are highly adaptable for many kinds of media, such as Durden
- Program inspection and reversing tools like Frida, DTrace, and PANDA
- Mozilla’s X-Ray Googles and other in page inspectors
- The Future of Programming by Bret Victor
Some use cases under this family of ideas that motivate me to work on this include enabling anyone to:
- Add extension points to programs that were never designed for it
- Create small tweaks of their desktop environment and applications
- Automate common tasks without rewriting an entire program
- Adapt software across versions of dependencies to ease reuse and improve longevity
- Extract slices of program functionality to sandbox for use in a different way
- Wire up features that cross programming languages in a natural, humane way
- Connect digital ideas across devices and to external world
- Port a game from one graphics framework, OS, etc. to another easily
- Adapt something meaningful from one API to another safely
- Transplant and share features between applications
If this resonates with you, I would be happy to chat and trade feedback, hear your own ideas, and foster a community in this space. Feel free to contact me via email, Matrix, Twitter, or whatever way you prefer.
I recently attended the Curry On 2019 conference which was a wonderful experience, and I think it’s my new favourite conference! If you are interested in the latest developments at the intersection of programming language research and challenges from industry, I would highly recommend attending in the future.
I recently moved to London, UK in February 2019. This is the first time I have lived in a different country. My partner and I are having a great time exploring all the different areas of London and traveling to other European cities that are now quite easy to get to.
This page was inspired by Derek Sivers.