Evolution as abstraction
This weekend I finally bit the bullet and jumped into Ruby on Rails. The experience blew the dust off old memories of writing BASIC programs with my dad on our Commodore, which inevitably got me thinking about human evolution.
10 PRINT "Stan is awesome." 20 GOTO 10
BASIC programs in the 80s were written as one big heap of code. This line number sent you to that line number, as labyrinthian as the "Choose Your Own Adventure" books popular at the time. I faced a hard game of catch-up when I went to college and had to discard the monolithic BASIC for the, by comparison, fractured and disjointed C++. Classes? Libraries? I want my code all in one place!
<%= 1000.times {puts "Stan is awesome."} %>
It was an evolutionary hurdle to understand that the functionality I had relied on could be abstracted into functions, to be written once and called upon whenever I needed them. Ruby on Rails is a step beyond C++ in terms of abstraction, built upon a MVC framework that separates what the program does (the Controller) from what it does it to (the Model) and how it looks when it's done (the View). These "three branches" got me thinking about abstraction in government.
First there were monarchies, these were BASIC. A single leader who did all the governing single-handedly: judge, jury, and executioner (though of course, they didn't use that phrase because judges and juries hadn't been invented yet). Lots left to be desired here, obviously. There's a big jump in 1215 with the Magna Carta, which introduced functions in the form of Barons (who could throw exceptions with the best of them).
The U.S. government is more like an MVC framework than any before, with clearly defined roles of each branch. Looking closer, the legislative branch contains two classes, Senate and House, that contain methods like Pass, Reject, and the wickedly recursive Direct to Subcommittee.
What would a truly agile government look like? How could programming methodologies like YAGNI or DRY be applied to the passage or even execution of law? Is the inevitable babbling about a "litmus test" whenever a Supreme Court Justice is nominated really just unit testing?
This is getting dangerously close to the dorkiest post I've ever made, so I should point out that the trend toward abstraction exists in environments other than just programming and government. In storytelling, we've gone from epic oral mythologies to self-contained novels to hypertext that links to pre-written content. In occupations, we've gone from hunting/gathering to raising specific crops for trade to trading representations of those crops in futures markets. At each step, the subject of the old level becomes an object of the new.