I saw an interesting demo at SPLASH of an end-user visual programming language: Cloud Extend. There were two main interesting points. First, it is used to build plugins for Salesforce. Major web applications like Salesforce, and especially Facebook, are becoming software platforms unto themselves. This is a great target domain for end-user programming tools.
The second interesting thing was how radical they are in conceptually simplifying the language. For example, they tried eliminating variable binding, essentially using only global variables. That turned out not to work, so they brought back a limited form of binding. I really like that they are going at conceptual simplicity rather than the focus on syntactic simplicity that most end-user work seems stuck in. For example, rather than use standard nested if-then-else blocks like everyone else, they have imposed a global decision-tree structure on the program. Whether or not that works, it is the kind of radical simplification we need to make progress. I also like that they are working with real end users, and adjusting based on what works. This language is a valuable data-point on how simple we can make an end-user programming language, and has some fresh thinking. Worth following.
I have also been spending a lot of time thinking about my “market”. I have an idea for targeting web/mobile apps with a new twist. More anon. In other news, I am going back to calling the language Subtext. The name is apropos to my new direction, and it seems to be my brand. People ask me if I’m the “subtext guy”.
I saw some interesting work on touch programming languages at Onward. You may already have seen Codify. That is still a mostly textual language, as the clickety-click of the keyboard in the video attests. The new research explores how to program entirely in touch, which requires avoiding typing as much as possible.
Continue reading “From text to touch”
Steve Jobs’ biographer, Walter Isaacson, writes in the NY Times:
The ability to merge creativity with technology depends on one’s ability to be emotionally attuned to others. Mr. Jobs could be petulant and unkind in dealing with other people, which caused some to think he lacked basic emotional awareness. In fact, it was the opposite. He could size people up, understand their inner thoughts, cajole them, intimidate them, target their deepest vulnerabilities, and delight them at will. He knew, intuitively, how to create products that pleased, interfaces that were friendly, and marketing messages that were enticing.
He seems at first to be praising Jobs’ empathy, but ends up describing a psychopath. Only by not feeling the emotions of others can one learn to ruthlessly manipulate them. Ironically, the lack of empathy is actually a great enabler of creativity. Thinking differently threatens and upsets people. To be creative you need to not give a damn what anyone else thinks or feels.
New workshop at POPL: Off the Beaten Track: Underrepresented Problems for Programming Language Researchers. In other words: “New Problems for Old Solutions”.
I am program chair of Onward! 2012. What do you want to see?
Here is one thing I am thinking about. I understand that in the real sciences, conferences often accept papers based solely on an abstract. That wouldn’t work for Onward, or even most of CS. Perhaps we should instead use the opposite of an abstract: a “concrete”. That is, an example. A common problem with big-idea papers is the lack of examples, making them quite difficult to understand. Perhaps we ought to require authors to submit an example up front in lieu of an abstract. That procedure might be beneficial both for the authors and the reviewers.
Programming is not just engineering — it is design. All my hopes and beliefs about programming boil down to that one assertion, which has become my main cause. The misunderstanding of programming as engineering has many pernicious effects, infecting our tools, technologies, and practices. Computer Science embodies this fallacy in its very name. Therefore I have banded together with some other programming language researchers and developers to form the IFIP Working Group 2.16 on Programming Language Design.
Continue reading “A win for design”
We have ignition: an actual implementation of an actual language. Toy-like in the extreme, but it can run the sorts of simple examples I have been discussing the last few years. I think I can take it all the way to a prototype application framework. This is huge progress.
Continue reading “It’s a good day to code”
It’s great to be coding again, after spending so long lost in thought and theory. This has been my longest break from programming since I started at 13. I now have a working virtual machine that supports the essential semantics of the language. The next step is a compiler. The good thing about having a long break from programming is that it made the experience of starting up again quite vivid. What was most vivid was the many ways I make programming needlessly harder for myself. Continue reading “Delusions of Programming”
My experiment with Scala is not working out. It’s just not ready for prime time, and is overkill for my needs. Reluctantly, I am falling back to Java. Continue reading “Switching to Plan J”
Programming is deeply disappointing. We continually fail to live up to our own expectations, more so than any other form of engineering or craft. And it’s not getting much better. The lack of any substantial progress is the most disappointing thing of all. Worst of all: it is our own fault.
Continue reading “For the good of software, software must die!”
The history of programming languages is depressing. Generally worse is better. Socio-economic factors dominate. But there seems to be one giant exception: Ruby & Rails. I haven’t studied them deeply, but they look like really good work that has succeeded on its merits. Ruby is a tastefully designed language with a coherent philosophy of making programming easy and fun. Rails righteously smites the bloated complexity of the Big Java web frameworks. Gotta love it. So how did it win? This undermines my entire cynical world view. Can anyone explain how it went down?
Update: note the obstacles. Ruby had dubious performance. It was developed in Japan, doc translation from Japanese was incomplete and laggy, the dev lists were largely in Japanese. Scripting languages were not considered suitable for large-scale applications. Ruby was not used for a lot of server-side programming. Rails took away many checklist features that people thought they needed. People had already built cool web frameworks in LISP and Smalltalk without anyone much caring. What fortuitous combination of factors allowed Ruby&Rails to succeed? How important was the DHH cult of personality? I’m guessing a lot.
As an experiment, I am announcing new blog posts on my twitter feed @jonathoda. I am also going to try tweeting pearls of programming wisdom that I find. Feedback welcome.
Should collection/sequence/array indices start with zero or one? Most current languages choose zero. For flux, I am choosing one. This choice is orthogonal, meaning that I can easily change it if it turns out to be wrong. The reason to discuss such a trivial issue is that it is an example of how choices that made sense in the early days of programming need to be reexamined. It also frames some principles of language design: Abstract Datatypes, and Conservatism.
Continue reading “Why numbering should start at one”
Hey, long time. Having a snow day here, which is a good day to catch up. My son got sick this summer, which knocked me out of commission for a while, but I am back to work now. As promised last June, I have defined the formal semantics of a core language that captures the key ideas of side-effects in a tree-structured heap without sequential programming. I have formulated confluence and soundness theorems that seem plausible (though I haven’t tried to prove them). So I don’t think it will collapse under me like Coherence did. One of the next steps is to build a reasonably usable textual syntax that can be compiled into the core language. By reasonably usable, I mean usable for expressing small examples up to a hundred lines of code, which is the minimum I need to communicate the idea to others. The working title of the language is flux.
Continue reading “Still Alive”
Here. I actually haven’t watched it yet because it is just too freaky to see myself on video. I’ll wait till Edward Norton plays me in the movie version.
I meant to write this earlier, but I have been occupied with a family medical emergency. The EL camp was a great experience, and I hope they do it again. I met more interesting people, and heard more interesting ideas, than at any other conference I have attended. Naturally there were ups and downs. There were some me-too languages with no purpose other than to entertain and glorify the author. But there were also quite a few serious efforts to try out new ideas and advance the state of the art. I would like to thank the organizers, Alex Payne and Brady Forrest, for perceiving the need and making this event happen. Continue reading “Emerging Languages Camp Wrapup”