The reaction to my latest work [Two-way Dataflow] has been distinctly underwhelming. My diagnosis: I’ve solved a problem most people aren’t aware they have, and it comes at the steep price of replacing the conventional tech stack. Facebook has a cheaper solution: Flux. I have to give them credit for taking the problem seriously (unlike many of the reactive programming enthusiasts) and coming up with a pragmatic solution that just adds another layer to the stack. That’s what programmers want, not a fundamental solution in a new programming paradigm. It is obvious that we can’t keep growing the stack forever but no one wants to deal with it now. Especially computer scientists (don’t get me started).
I think I need to shift focus to end-users and non-programmers. I’ve avoided that because I want to prove that we can dramatically simplify real large-scale programming — simplifying simple problems is not so convincing. But replacing the whole stack is just too hard to do all at once and all by myself, and only doing it on small examples is not convincing either. End-user programming could be a way to get started and get users and (especially) have collaborators. Industrial strength programming would come later, but at least I now have a sketch of how it should look. Building something real would be such a refreshing change from the last decade of thought experiments. I’m excited by the prospect of once again shipping buggy code and having irate users and getting into fights with my colleagues. That’s life.
The Future Programming Workshop will return this year to SPLASH and Strange Loop. See http://www.future-programming.org/call.html. This year we are taking any kind of media, not just videos. Web pages and papers are welcome too. By request of the academic members of our community we will publish proceedings containing the paper-format submissions. We are applying for permission to publish the proceedings in the ACM Digital Library but will go somewhere else if necessary.
Like last year we will offer the option to present at the Strange Loop pre-conference FPWxELC event. Unlike last year there will also be a chance to present publicly at SPLASH. The SPLASH event will be two days: the first for public presentations and the second for the private writers’ workshop.
Thanks to Richard Gabriel and Alex Payne for teaming up with me to make this happen.
Submission deadline is August 7 (pre-submit July 19 for Strange Loop). So get to work and show us what you’ve got!
We’ve published the final videos from the Future Programming Workshop. We will also be publishing a final report about our experiences and lessons from the workshop.
Included in the videos is my latest screencast about Subtext: Two-way Dataflow. The abstract:
Subtext is an experiment to radically simplify application programming. The goal is to combine the power of frameworks like Rails and iOS with the simplicity of a spreadsheet. The standard MVC architecture of such frameworks makes execution order hard to understand, a problem colloquially called callback hell. I propose a new approach called two-way dataflow, which breaks the program into cyclic output and input phases. Output is handled with traditional one-way dataflow, which is realized here as a form of pure lazy functional programming. Input is governed by a new semantics called one-way action which is a highly restricted form of event-driven imperative programming. These restrictions statically order event execution to avoid callback hell. Two-way dataflow has been designed not only to simplify the semantics of application programming but also to support a presentation that, like a spreadsheet, provides a fully WYSIWYG programming experience.
It’s time to reformulate the principles guiding my work.
[Revised definition of complexity in response to misunderstandings]
Final version of the paper is up, and an essay with embedded videos is here. Sean graciously invited me to coauthor but the ideas are really his – I just helped spin them.
We think there is great promise in abstracting away from the computer model of time. There is a large design space that is still largely unexplored. I will be presenting my own new approach for the first time in public at the FPW workshop at Strange Loop. We are hoping to excite other researchers to take up this challenge and develop their own approaches. Come talk with us at SPLASH or drop us a line.
I’ll be demoing my latest work at the Future Programming Workshop at both Strange Loop and SPLASH. My talk is called “Two-way Dataflow”. Here is the abstract:
Subtext is an experiment to radically simplify application programming. The goal is to combine the power of frameworks like Rails and iOS with the simplicity of a spreadsheet. Mutable state is a notorious source of complexity in application programming and indeed has long been a major dilemma in programming language design. I propose a new approach called two-way dataflow, which breaks the program into cyclic output and input phases. Output is handled with traditional one-way dataflow, which is realized here as a form of pure lazy functional programming. Input is governed by a new semantics called one-way action which is a highly restricted form of event-driven imperative programming. These restrictions statically order event execution to avoid callback hell. Two-way dataflow has been designed not only to simplify the semantics of application programming but also to support a representation that, like a spreadsheet, provides a fully WYSIWYG programming experience.
This work is still very experimental and preliminary but I hope it is complete enough to convey several key new ideas that are relevant to the current trends of “reactive” and “live” programming.
Recently there have been heated complaints that the culture of programming unfairly excludes some groups. They want to join the programming elite and get a spot at the startup trough. More power to them. I really have nothing to say about this issue because I think it is a distraction from a bigger issue with far greater importance to society. The bigger injustice is that programming has become an elite: a vocation requiring rare talents, grueling training, and total dedication. The way things are today if you want to be a programmer you had best be someone like me on the autism spectrum who has spent their entire life mastering vast realms of arcane knowledge — and enjoys it. Normal humans are effectively excluded from developing software. The real injustice of developer inequality is that it doesn’t have to be this way.
Second, we will be at StrangeLoop too. We are partnering with Alex Payne and his Emerging Languages Camp to run FPW on the day before StrangeLoop. You can submit for SPLASH or StrangeLoop or both. See the Call for more details.
Now you have twice the motivation to do a killer demo. Get on it!
Richard Gabriel and I are planning a workshop at SPLASH focused on screencast demos: The Future Programming Workshop. This will be a workshop in the sense of a writer’s workshop: the participants will present their talks/demos and the group will critique them. After the workshop people will revise their screencasts to be published on our website. Please signup at the website if you are interested.
Increasingly, new programming ideas show up first as video talks and screencast demos, long before any papers get written. A good example is Bret Victor’s videos. My own screencasts have led to far more interaction than my papers. Frankly, writing papers is really hard, especially for raw new ideas. Non-academics often struggle to write papers, effectively excluding them from the conversation. The point of this workshop is to foster the exchange of radical new programming ideas in their formative stage, via the medium of screencasts. We hope to build a community of explorers at the frontier of programming. Please join us.
Interesting new work: Lamdu [Hacker News discussion] from Eyal Lotem and Yair Chuchem. They aren’t showing a lot of results yet, but I really like the espoused principles of the project. This is worth keeping an eye on.
They are building an advanced IDE for a variant of Haskell with keyword arguments and structural record types (Subtext makes the same choices). They have moved type inference from the compiler into the IDE, where it can be exploited for assisting programming. I like that they are thinking beyond just live execution to the bigger issues of code refactoring and intensional versioning. They also appreciate the benefits of normalizing code formatting: “co-macros” re-sugar into normal forms (ditto Subtext).
It will be most interesting to see in what ways Lamdu alters the experience of Haskell. I’ve long said that functional languages are a better fit for advanced IDEs. Haskell is the state of the art in functional programming, so it is a useful experiment to enliven and illuminate it, and perhaps even make it more friendly. If they can pull this off it will be a really big win because they can leverage the large capital investment in Haskell implementation and libraries.
I wish Lamdu the best of luck and look forward to learning more about it.
From: Leo A. Meyerovich and Ariel S. Rabkin. Empirical Analysis of Programming Language Adoption. OOPSLA 2013.
I made a screencast explaining the new type system of Subtext 5: type as subtext
I have also refreshed the subtext website and redirected it to subtext-lang.org
Another masterpiece from Bret Victor: The Future of Programming.
What you probably don’t know is that his talk was actually an hour long. The second half was censored from the internet by an as yet unexplained mechanism. Luckily his talk was written on sheets of cellulose which survived the digital attack. I have seen these slides and can exclusively reveal their contents.
There is one gigantic problem with programming today, a problem so large that it dwarfs all others. Yet it is a problem that almost no one is willing to admit, much less talk about. It is easy to illustrate:
Coding again at last! In Dart. Herewith are my initial experiences with Dart.
The following is an abstract of a position statement for the Live programming workshop at ICSE.
Time for a progress report, now that I have some progress to report. I didn’t get much research done last semester because I was teaching a new class: 6.170 Software Studio. It was a noble experiment with mixed results, but that is another story. Back in March I presented the latest version of Subtext at the IFIP Working Group 2.16 on Programming Language Design. I realized then that Subtext should be statically typed. Ever since I have been falling down the rabbit hole of types.
The process of constructing instruction tables should be very fascinating. There need be no real danger of it ever becoming a drudge, for any processes that are quite mechanical may be turned over to the machine itself.
– Turing, A. M., 1946, Proposed electronic calculator, report for National Physical Laboratory, Teddington
So was Turing wrong, or are we just doing it wrong?
Zed Shaw has another awesome rant at http://vimeo.com/43380467. I agree with much of what he says about both the web and OO. I don’t see the causal connection though: they both suck, but it is probably just a coincidence. However the best part of the talk was when he invoked the voice in the back of your head whispering “bulllshhhiiittt”. That nails what programming is like for me. Most of what we have to deal with is just so wrong wrong wrong. Having to get stuff done despite the deep wrongness of it all leads to textbook cognitive dissonance. I have always been slightly amazed by the people who seem so happy and satisfied with programming. I suspect that it ultimately comes down to personality differences. I also suspect that it is a hyper-sensitivity to wrongness that drives misfits and rebels ranging from Steve Jobs to the Unabomber. Does anyone else feel the wrongness of programming?
Update: the other thing I like about Zed’s talk is that it aligns perfectly with my research direction. Decades of listening to that whispering voice have driven me to develop a post-object language. I think the best way to demonstrate this language is by reinventing the web. So I am traveling the same path as Zed but in the opposite direction.