C and Unix were invented in the 70's. Yes, things have improved a lot in the meantime, but underneath, it seems like a lot of the really basic paradigms are the same. We're mostly typing imperative code into a plain text editor, saved in a disk file in a tree-shaped filesystem, that probably runs on a Unix-like system. Maybe Windows, but in the space of all possible operating systems/environments, they're not that far apart.
I'm starting to think that the reason we keep building tree-like data structures is because that's how our minds work. We can intuitively grasp hierarchies of categories (a tree structure), with the occasional exception (a symlink to another location).
Because we intuitively see the world in this way, we are good at building and maintaining systems that work in this way.
Anything more sophisticated than that (algebra, relational databases) requires a lot of study and practice to get good at.
> [Maybe] the reason we keep building tree-like data structures is because that's how our minds work.
No. That's how physical space works. When you're a library, and you need your user to be able to find the books, you don't have a choice: any given book must be in one shelf, in one alley, in one room. And bam, you have a tree hierarchy that is three levels deep.
But our minds are better at dealing with tags. Just see how popular they are in blogs. I bet that a tag based file system would be vastly better at storing personal data than a hierarchical one.
For me a basic tag based file system needs several things: A unique ID for files (a strong cryptographic hash of the contents is probably best), a name for each file, and a list of tags for each files. And of course, a number of logical volumes on which the files are "located". Where a directory structure is actually needed, files could have special names, like "/os/glad/file_42" (that's a name, not a path).
A variation on this theme would be to do away with explicit names altogether, and only use tags. The "name" of the file would just need to be reasonably unique. That one is probably best.
Now, when you search for a file, you just query for tags. Can also be done through the shell: it's just that those two commands would have the exact same effect:
cd /foo/bar
cd /bar/foo
As for the volume, you need them to transfer files between your USB key and your computer.
Oh, thinking of using cryptographic hashes to name files… When you modify the file, the ID changes as well… that's a
new file! By default, the old version should still be around. Imagine that: Git for the masses.
Both is better. There is no reason for the navigation system to ignore groups and hierarchies, it just should also be able to deal with arbitrary tags.
Having watched people struggle with what is essentially a configurable search pane (specifically, the excellent thumbnail viewer in Windows Live Photo Viewer), there does need to be a simple default, probably one that looks just like a hierarchical file system. It just shouldn't be the only way to use the system.
We could just put all the books in one, big room, just aisles and aisle of shelves, everything numbered sequentially. We could even build a library as one long hallway -- one single line of books.
But we choose to divide our buildings up into rooms. We choose to create that hierarchy.
Edit:
I suppose, though, that our minds evolved to operate in physical space. Go hunt some zebra, go climb a tree... things like that...
Even if you put the books on a single long shelf, chances are you're going to make the numbering system based on the content of the books, like say, the Dewey Decimal system. That's a hierarchy of at least two layers, right there. If you assign random identifiers, you'll probably end up creating that same hierarchy in the index instead, unless you do something more tag-based which is actually likely to be better.
When I got to learn UNIX in the form of Xenix, I was already comfortable with many GUI systems and IDEs.
Eventually I used most UNIX systems, commercial and free versions thereof, including the tools most HN folks love. However I am a mouse/keyboard person and love my IDEs.
Every time I look at someone using plain vim/emacs with a few text terminals open, I see someone working in a UNIX System V system.