Preamble Scoble, Scoble, Scoble. Again an interesting interview.
You wouldn't think that talking to 2 geeks would be that
interesting (ok, to be fair one of them is a statistician [yeah, a
statistician writing a file system… next…] - but if
he decks his kids out in shirts with letters for their names [and,
I think, their birthplace] he's a geek. Pic here: - oh yeah,
and he has "ZFS ROX" as a vanity plate...).
But it is.
Ok, so 2 guys have developed a new File System. A file system is
an abstraction (
see previous post on abstraction) so you can say "open this
file" and it goes and moves bits and bytes on the hard drive. These
guys said "we want to make a new abstraction, the current one is
lame and we can make it better" (basically).
So they threw out the file system. And they start talking about
what you do when we can completely re-envision something (because
they threw out the file system and started over and wondered "what
should it look like - since we can make it however we want").
Constraints In the interview I caught this
nugget:
"A key to software architecture: Out of all the constraints that
exist out there, how many of those are actual, real constraints and
how many of those are just imagined or historical or inertia / bad
habits." @20:30 - 21:30
I agree with this. I've had the opportunity to do this (and a
programmer dreams about this all the time [every time you build
something of substantial size, by the time you get to the end of
it, you want to throw it out and start over because you realized
that there were better ways of doing it]).
BUT, I believe that constraints are good. SO… why throw
them out? Obviously you want to chuck bad constraints when you can.
But, if you can get better ideas by adding constraints (my
hypothesis), then let's chuck bad constraints, keep true
constraints… and then add other constraints?
To some extent, this is what they did: the big "it'll be better"
was that he was annoyed that you can add memory to your computer -
any size and any amount that is compatible - and it just works.
Hard drives, you have to format and you have "c:" and "d:" and
partitions… (He also added a constraint of essentially doing
redundancy/data security similar to RAID.)
So? Let's say that you have a new project - a
chance to start something new. You want to add constraints (usually
called requirements [or features if you are writing a program]).
And you do that before you start the project. Then you start
figuring out solutions.
My wondering: should I stop and see if there are other
constraints to add - before I brainstorm. I'm not sure, but I'm
thinking maybe. I'm also thinking that there a process to capture
potential constraints, and then select which constraints are most
useful (working off the "more is not worse").
Also fun: these guys talked to people @ Stanford linear
accelerator Atlas detector and their system generates 1 Petabyte
per second of raw data. (A mere TB/s of filtered). Kilobyte,
Megabyte, Giga, Tera, Peta. Yeah, 1 million gigabytes per
second. Wow. Before I die, I'm sure that'll be like nothing.
Hopefully this blog entry is still here to record my foolish
surprise.
Even more fun: They talk about an abstraction of typing on your
keyboard (they picked "L", I picked a "K" in my post on
abstraction) - wow