Q: Is the logo of this year's String Loop conference a dipiction of a Möbius band?
September 20, St. Louis, MO—The third annual Strang Loop conference concluded its last session about two hours ago (I wrote this sentence on Tue Sep 20 18:57:16 CDT 2011). Like the lasttwo Strange Loop conferences, this year's conference is packed with thought provoking keynotes and first class presentations. The new venue at the Hilton at the Ballpark downlown worked out well for the expanded program (7-tracks) and audience (more than 900, 60% reportedly from out of town).
I attended along with 14 other colleagues from OCI. Someone asked me why I haven't blogged lately and I said I really don't feel that I have anything say. (And indeed I last blogged 123 days ago. Long time no blog.) That changed today and here's my take on Strange Loop 2011. Alex said all session videos will be made available on infoq.com in due time. So I will not try to be super detailed about the sessions. But I do want to convey the feel of the conference to people who are not here, like @codetojoy, who participated in previous years but couldn't come this year, and the guy who twitted (I paraphrase) "By all the chatter on twitter, I really should be at the Strange Loop conference." but whose tweet I couldn't track down.
I did not attend the Sunday workshops. So I'll focus on Monday and Tuesday's sessions. There are four keynotes (Erik Meijer on Monday morning, Gerald Sussman on Monday afternoon, Allen Wirfs-Brock and Rich Hickey on Tuesday afternoons) and nine one-hour talks in seven tracks. Picking which breakout session to attend is really difficult because for every one of the time slots, I wanted to be at at least two sessions at the same time.
Erik started his talk with a cube whose three dimensions represent three pairs of opposing attributes of a database system: big vs. small; push vs. pull; foreign key/primary key vs. key/value pairs and pointed out that traditional RDBMS occupy only one vertex of the eight vertices of the cube, the other seven are NoSQL's domain.
He then proceeded to focus attention on the primary key/foreign key vs. key/value pair dimension and attempted to provide a categorical justification of the NoSQL movement.
His main points include:
RAM is a key/value store
C build object graphs using pointers
Object graphs are intuitive to programmers
Relational model flattens object graphs into tables
Normalization is really abnormalization
SQL is imperative
Referential integrity links tables together though joins
Objects are composable; Tables aren't (can't put a table in a cell
NULL is a mess
Impedent mismatch; OR mapping
Indices are precomputed joins => give us back nested collections
Tables + indices produces the same model as objects + pointers; but the arrows are reversed
In category throry, this reversing of direction signifies duality
NoSQL should be coSQL!
The web is a key/value store
RAM is also a RESTful service
They are the yin and yang
yin (open -> NoSQL)
yang (closed -> SQL)
Weiqi's comment: If this duality is a true duality in the strict sense of category throey, then every theorem about the one can be translated into a theorem about the other. What does the decodes of relational database research results translate to?
I'm very pleased that Gerald Sussman came to the Strange Loop conference. I'm a big fan of the SICP, and i watche dall twenty-two hours of the lecture.
Professor Sussman began his lecture with a version of the Kanizsa triangle and asked us if we know how our brains "saw" the invisible triangle.
He then mentioned that the human genome is roughly 1GB in size, yet it encoded your whole life. How?
He then gave more examples of how animals figure out how to regrow damaged parts, etc.
Compared to that, the programs that we wrote in so much inferior: they are full of bugs, and they are hard to change.
We really don't know how to compute!
He posits that may be accuracy is not the only true measure of programming. Utility counts more. Nobody says Google is useless if he can't find what he wants with one search. He'll just try a different search.
He then showed a electric circuit and showed how an expert can simply "see" the solution by making local arguments while the novice will need to write down the equations and solve them.
How did the expert do it? How do you teach that?
He then showed one possible new approach to programming in terms of "generic extensions" and "propagation networks" (which I unfortunately did not follow exactly but you can get a glimpse of it here.)
Weiqi's comment: This should be thought provoking talk. Except that the thought it provoked has not shown up in my brain yet.
Allen's talk attempted to define the "Post-PC" era for the computing industry, and deduce some consequences of such a shift.
How computing has changed?
What's the nature of computing in the different "era"s?
The PC era is not marked by hardware evolution
The eras are differentiated by the impact of computing on society
Earlier eras are: Corporate computing ('50-'75 large corporations)
Personal computing (individual tasks)
Corporate computing did not go away
Personal computing era started with a vision (Alan Kay, Tel Nilsen(?))
What characterizes the new era:
Mobile?
Cloud?
Tablets?
Games & media players
Monetizing users
The coming era is Ambient computing:
Devices not computers
Ubiquitous access to information
Ambient intelligence, fades into background
The internet of Things
When we go from one era to another there are transitional technologies:
From corporate to personal: timeshare, minicomputers, UNIX, C
From personal to ambient: cell phones, www/browsers, URL, HTTP/REST
Growing focus on "apps" not "tools" (tools disappear)
Each era has a dominant platform:
Corporate era: IBM
PC era: PC
Ambient era: The platform that's in the browser's gut
Why? Market demands it; technologically good-enough; superior business execution
He claims there is no fundamental differences between web apps and native apps
Examples: Mozilla Boot to Gecko; Chrome OS; Palm/HP WebOS
Web API exists for some but not all capabilities
Battle between: Silos of proprietary platforms; Walled gardens; Standard-based open platforms
Each era has a canonical language:
Corportate era: Cobol/FORTRAN
PC era: C
Ambient era: JavaScript: It's in place; it's good-enough; it's getting better; it can't be replaced
JavaScript performance attained parity with C in 2011
Mozilla wrote a performant PDF renderer in JavaScript
Allen went on to describe the standardization work that is going on at ECMA TC39 and enumerated thing to come (ES.next = ES.6 2013):
modules
sanding-boxing module loaders
Proxy-Objects
iterators and generators
array comprehension
string interpolation
super references
gensym-like private names
better support for class-style inheritance
He concluded by proclaiming this is the most exciting time for the industry since the '80s and encouraged people to enjoy it.
Weiqi's comment: The realization of this vision requires the corporation of all players. Even if Microsoft and Apple decide to die in favor of the platform that's in the guts of the browser, that platform, when grown up, will be no different from Windows or Mac OS X. JavaScript is not replaceable. It will be replaced when its evolution is deemed "too slow" by the society.
Rich Hickey's talk is the most nuanced and hinges on the strict dictionary definition of simple and easy. He went on the develop the theme that we are making programming too complex for our own sake. Some quotes:
Every intertwining add burden to our brain
Every bug was written by someone, compiled cleanly, and passed all the tests.
Focusing on ease, you will get complexity that kills you
If you go for simple, you start slow, and eventually go faster
OO is easy, but yields complexity
Incidental complexity—incidental is Latin for "your fault"
We can learn more things, but can't get smarter
Simple doesn't mean less parts. Sometimes we need to have more parts to make every part simple
State/Object is complex; Values are simple
Methods are complex; functions/namespaces are simple
Variables are complex; managed refs are simpler
Inheritance/switches are complex; polymorphism à la carte is simple
Syntax is complex; data is simple
Loops are complex; set functions are simple
Actors are complex; queues are simple
ORM is complex; declarative data manipulation is simple
I did years and years of stateful programming, and it sucked
Nothing makes state simple
If you take two things from this talk: the first is simple vs. easy; the second is that you do not need the complex tools
Use only
values
functions
namespaces
data
polymorphism à la carte
set functions
queues
learn SQL
rules
We create complex data structures around data rather than dealing with data directly. Use a map rather than defining a type
You have to analyse the problem and make a decision on the result
Abstraction should separate What, Who, How, When/Where, and Why
Information is simple. The only thing you can do is ruin it
Leave data alone
It's your fault if you don't have a simple system
Guardrails don't yield simplicity
Develop your sensibility around disentanglement
All reliability tools (tests, etc.) doesn't matter
Weiqi's comment: Keeping things simple is actually really hard. Not thinking things through is the cause of complexity. I doubt I'm in a position to abandon objects and states anytime soon, though.
The Break-Out Sessions
I can ramble on, but I doubt you have the patience to read on. So I'll be short.
Neal Ford: Functional Thinking: Very approachable tutorial on how to write more functional code: Don't do UndoCommand.execute(), just undo(); Think transformation on lists: fold, filter, map.
Attila Szegedi: JVM dynamic language interoprability: Dynalink is a linking framework based on the invokedynamic that helps JVM dynamic languages achieve interoprability.
Andrei Alexandrescue: Generic Programming Galore Using D: Andrei writes a universal generic min(...) function in D that performs as well as a hand rolled min function in all instantiations.
Bill Odom: Vim: An very entertaining deep dive into Vim: :help :helpgrep :h 42 :h holy-grail; i a c o r s I A C O R S h j k l H M L gg 123G :123 gj gk zz zt zb * # g* g# <C-N> <C-P> <C-X><C- > .; NERD tree, Command-T, PeepOpen, FuzzyFileFinder, Bufexplore, Taglist; :reg "% "# "- ". "/ ": "= "* "+ "_ <C-R><register>
Dale Schumacher: Actor Interaction Patterns: Interesting demoes of actor interaction patterns written in his own language and visuallized using Processing. Seed pattern; Future pattern; Fork/Join pattern; Circuit-breaker pattern.
David Geary: HTML5 Canvas: Author of Core HTML5 Canvas demoes the full capability of HTML5 canvas. Just like Java's Graphics2D. Immediate mode graphics; offscreen buffers, transformations, timer based animations, paths, clipings, effects, compositing. Weiqi's comment: You can do all the things that you did in Windows 3.1 20 years ago in a browser now. Progress? You be the judge.
Eric Burke: Taming Android: Brilliant tricks of the Android graphics masters disguised as a down-to-earth, matter-of-fact talk of how he "just tried different numbers until it looked good." The crowd was impressed by the hologram implementation.
Danno Ferrin: Applying principle of Stage Magic for User Experience: The creator of Griffon explains user experience principles using stage magic. Each principle is demostrated through real websites. (Playing YouTube clips in front of a live audience has its risks.)
Mike Lee: Product Engineering: Great performance by an actor in custume. Good principles of how to turn an idea to a product (therefore profit.)
The Language Panel
It wouldn't be Strange Loop without a language panel discussion. The language panel was on during lunch time on Tuesday. Dean Wampler moderated, Rich Hickey, Gerald Sussman, Andrei Alexandrescue, Allen Wirfs-Brock, Joe Palmer, and the guy who invented CoffeeScript (I did not write down his name) answered audiences questions.
Interesting questions. Interesting answers (although somewhat predictable). Wait for it on InfoQ.