I’ve talked with more people than I usually do in a month. It’s run me thin.
The most visible lack among attendees is historical ignorance of our not-very-old field: rumblings among the NoSQL adherents during Stonebraker’s talk on VoltDB, not realizing that he has experience implementing databases comparable to the whole NoSQL community combined; Orenstein and Hernstadt reinventing the tree database with a relational adaption layer, not realizing that they were recapitulating something abandoned in the 1980’s, and looking surprised when part of the audience told them openly that ORMs are a terrible idea; the Bandicoot team during the emerging languages camp, reimplementing capabilities already in PostgreSQL, apparently driven by no more than a need for a C-like syntax.
Codd’s relational model was an upstart in a market of graph, object, tree, and various hybrids and other exotic databases. I do not claim that it the relational model is superior because it survived. Most entrenched artifacts of computing are fixed by social factors, not technical ones. The relational model is superior because it described the semantics a data store needed to specify for most real world use; made the translation of declarative queries into operations a finite, approachable problem; and unified all the expressive power of the other kinds of database in a single mathematical model. SQL, the language, was the result of a natural language project at IBM. It is not intrinsic. The underlying model, as Codd defined it, is intrinsic.
Puzzlingly, while we regard a programmer ignorant of the difference between an array and a linked list as incompetent, one ignorant of the relational model can bluster his way into respect from his colleagues.
When I was a teenager, I suffered from an overabundance of generalizations. Years of experience have beaten them out of me. I still looked back on them with some chagrin. I’m not unusual. So why do the young spout generalizations? They imitate what they perceive their elders doing.
The problem is the perception. Their elders have either become snake oil salesmen or are chagrined at their own youth and focused on technical material. However, a mind with ten additional years of training and ten additional years of experience can make much more general statements while remaining, in its own conception, precise, technical, and on firm ground. Ten years, twenty years, thirty years, and at some point the generalizations start to seem like magic to those starting out. They are perceived as generalizations, though they are precise statements.
My advice to the young: present hard, technical material that you understand intimately. My advice to the old is the same.
Rich Hickey is engaged in the semantic terraforming of the JVM. The language has fallen beneath his juggernaut, and he has rolled on to the database. Go Rich!
Spend half an hour with Elm for the sheer pleasure of seeing a functional reactive programming environment in the wild. Spend half an hour with Julia and mourn for the pain of physicists and engineers who have suffered MATLAB and its kin down through the years.
What do you mean you don’t know about unification? Go learn to write a Prolog!
Please stop recommending anything besides PLT Racket and ‘How to Design Programs’ for new programmers. Just because you wasted time when you were learning doesn’t mean everyone else has to. And if you prototype new languages in anything else, you’re a fool.
Oddly, it’s also the easiest environment to create stand alone, cross platform GUI applications in that’s available today.