I have been invited to speak at CUSEC. Looks like a fun conference, and some of the other speakers are interesting, like Dan Ingalls and Avi Bryant. My talk is Iconoclasm for fun and profit. Abstract:
In the first part of this talk I will present an experiment in non-textual programming: Schematic Tables, a new representation for conditionals. Roughly a cross between decision tables and data flow graphs, they represent computation and decision-making orthogonally. They unify the full range of conditional constructs, from if statements through pattern matching to polymorphic predicate dispatch. Program logic is maintained in a declarative canonical form that enforces completeness and disjointness among choices. Schematic tables can be used either as a code specification/generation tool, or as a self-contained diagrammatic programming language. They give program logic the clarity of truth tables, and support high-level direct manipulation of that logic, avoiding much of the mental computation demanded by conventional conditionals.
The second part of the talk will look at the prospects for progress in the theory and practice of programming. Contrary to conventional wisdom, programming is still in its infancy. I will argue that the current blockage cannot persist, and point out some of the cracks in the dam. I conclude with some career advice for smart young programmers who want to change the world.
Seen as I’m a poor lowly first year CompSci student here in the UK, and Montreal is a fair few clicks (not too mention dollars) away, your “career advice for smart young programmers who want to change the world” has me intrigued. Hopefully I will be able to catch the web cast highlights (?).
I’m currently learning Java and reluctantly swallowing the antiquated semi colons, curly brackets, and compiler errors. (I have previously flirted with Django). All the concepts I generally find easy to understand; inheritance, classes and polymorphism, but when it comes to writing the code it just seems to be in such a dumb phaffy medium. In the same way computers were supposed to replace the static document, the move to an interactive source code seems so obvious. Just as color highlighting added an extra layer of information and was quickly adopted (I think), other than programming snobbery I can’t see why you are struggling for traction!
Hopefully, this talk will aid in the quest. And thank you, as you have given me many an idea for my personal and group projects! Something along the lines of application visualisation at runtime seems interesting.
One more thing is subtext available any where?
“They give program logic the clarity of truth tables” – I’ve never regarded truth tables as clear. When I look at a truth table, I have to derive the logical operation from the specific examples listed. Clearly written code is usually easier to follow. I’m not familiar with Schematic Tables, so maybe truth tables were just a bad metahpor.
@maikaahl
If you want to change the world, then you need to know what the real world is and where to find it.
In pursuing world change, smart programmers are often crippled by their arrogance. The most common way I see graduate students punish themselves is their assumption that they represent the average person. Think about this for a second. How much in common does an MIT graduate student really have in common with one of my stereotype end-users? Here is one of my “gold standard” users for you: “middle-aged house wife working part-time as a fundraiser for a private school, mainly because her children get a tuition discount.” The software we give her just doesn’t represent her real world needs well.
Also, don’t use your intelligence to reason your way into self-defeating concepts. If you can’t solve a problem, then don’t presume the problem isn’t solvable or not worth solving. Designing correct or world-changing solutions is difficult, because a world-changing solution might only be subtly different from an incorrect or inferior solution.
The biggest downfall of smart people, though, is that they are unwilling to accept drastic problem re-framing. My friend is a recent Caltech dropout who is inching close to returning to school. He used to work with his much older brother, who he greatly admires but “doesn’t understand”. He told me his biggest regret about returning to school is that he wouldn’t be able to “solve” the problem of “understanding” his older brother. He considers his relationship with his brother to be an equation he can solve by constant manipulation of all the variables. I told him he needed to relax and that spending time away from his brother will give him better understanding of his brother. Yet, my friend — the genius — couldn’t understand this paradox. I totally re-framed the problem, and it BLEW his mind. The reason is simple: he’s so smart that he’s never had the odd experience of being defeated by an extremely complex topic, leaving the topic alone for a few years, and coming back to the topic with crystal clear understanding. There is no shortcut to experience and a maturing mind.
The secret message here is that if you’re smart, then you’re good at logic. Your weakness will always be perception.
@pso
@I’ve never regarded truth tables as clear.
Jonathan, I hope you are listening. Marketing feedback could never be more clear. You need to link subtext2’s galactic premeire video in all your blog posts.
@ Z-bo
I guess I mislead you a little. I am twenty-five so I am not so young when it comes to the ways of the world, just the ways of programming. I actually have an arts background (I too am a once university drop out!), so I wouldn’t think perception is my biggest problem. Perhaps knowing when to go to bed is… Good sound advice though, and I will add some more for your friend inching his way back to school. If possible, consider who he would be studying with. It’s not the greatest uni, not the worst either, but I haven’t found the like minded people I was looking for. (Yes, that is a euphemism.) I don’t have a maths degree so the “top” universities were unavailable, and I do feel completely out of place so I would choose differently had I the opportunity. Your friend from what you say is smart so it’s probably not an issue. Although if he is a little older like myself, he may struggle to fit in against the background of general student banality.
re:truth tables
It’s not the best rhetoric, but I think I know what he means. The boolean evaluation is all there in the truth table, just as the program logic is already mapped out by the connecting 2d tree structure. (Although I hope something like SubText could eventual take on the 3d, perhaps even the 4d where you can cycle through versions at run time!) Hopefully, there isn’t the connection of visual clarity, although compared to something like: p Λ ¬(q Λ r) ≡ (p Λ ¬q) V (p Λ ¬r), a truth table is a joy to read.
Jonathan, has anyone asked you what the serialization format for Schematic Tables is? How arduous would it be to manipulate the raw text with standard Unix tools? I ask this not because I would want that to be my primary interface, but because your interface is bound to miss out on some ability, at some point, that would probably make raw textual manipulation highly desirable.
@maikaahl
Since you’re posting in this blog, it seems like you are _very_ interested in stuff like better programming languages. Might you be willing to discuss my notes [1] on the issue? If so, you can contact me via the hyperlink at the very bottom of that page.
[1] http://luke.breuer.com/time/item/Thoughts_on_Programming_Languages/128.aspx