Busting the Text Programming Orthodoxy

Noflo jekyll png

Part of the pleasure of programming comes from overcoming layers of abstractions to create something concrete. We have to work through the complications of application frameworks, language syntax and compiler directives that convert your desires into binary.

If you put a gun to my head, I’d be forced to confess that part of the allure of being a programmer is that the process is really complicated. Very few people can do what we do, and we like it that way.

Perhaps that’s part of why the paradigms programmers operate under have remained unchanged for decades. We bang out lines of code into text editors and hope that the compiler can convert them into a working app.

The iPad inspires me to wonder if this paradigm is the only future for us. After all, it’s a device that has changed the way many people think of computing in general. But I think we can all agree that one area where a tablet computer falls over is in text entry, and programming text entry in particular. I can knock out an email or blog post on my iPad’s on-screen keyboard, but braces and symbols are out of the question.

While we sit around waiting for Apple to introduce an Xcode for iOS, I wonder if the future might not be more interesting than that. Why does programming have to rely on text entry at all?

I did some research into visual programming environments, a concept that’s been around for many years.

As a thought exercise, I can imagine a system where you would be able to drag and drop the basic building blocks of a programming language, in graphical form, onto a workspace. Twiddle some settings, and then run it.

In concept it seems simple enough, but this industry is littered with the unused corpses of ugly, ineffective visual programming tools.

And if you talk to people about visual programming tools, you’ll get some pretty sensible reasons as to why they don’t work. Here’s Davor Babić, writing about the topic:

…flowcharts are a very poor abstraction of software structure. They work fine for simple, trivial programs like the demos that the company showed my friend. But let’s be honest: very little software in the real world outside of a spreadsheet document is actually that simple.

and

Graphical stuff at the abstraction level that we have to deal with in software just gets too messy too fast. Modularization does solve some of the problems, but it’s too hard to do right and it’s too hard to clean up after someone has done it wrong.

That hasn’t stopped people from trying. We have the well-established Scratch language, but that one is specifically for learning programming, and probably isn’t suitable for professional use.

Perhaps the most exciting recent development in this area is a project called NoFlo, which is an attempt to implement Flow-based programming in Javascript. They ran a successful Kickstarter campaign last fall, seemingly accomplishing something that nobody else has: created an IDE that both explores a new programming paradigm, while looking freaking amazing.

I don’t know how well NoFlo works yet, but this is the kind of thinking I believe we need more of. If the future of computing is touch interfaces on pieces of glass, we need to figure out what programming on those devices looks like.