Tuesday, March 23, 2010

Complexity

Why are computers so hard? I ended up fiddling with iTunes again this morning . This time it was with a bunch of Music files that for some reason had an invisibility flag set on them. Were it not for the fact that I was working in a terminal with primitive terminal tools I would've NEVER known that those files existed aside from the fact that a huge chunk of my disk was gone. The problem with them being hidden though is that iTunes wouldn't pick them up so large chunks of my music library appeared to be missing (e.g. almost all of Radiohead). I ended up running an arcane command "chflags" on my whole music directory to unhide those files. Seriously? On a Mac? "Better, faster, easier?" There's no way on earth most computer users would've figured that one out. Granted most computer users wouldn't have had my problem because I was copying files around onto/from a network drive, but I didn't do anything terribly advanced and I can imagine users getting tripped up by this.



The problem, I think, is that in computers/software we work harder to hide complexity than we do to remove complexity. We thrive on abstraction and encapsulation and the result frankly is magical when you think about it. The number of lines of code that cooperate for me to type this alone is staggering (code in the operating system managing memory, and disk, and network layers... code in my web browser... code in the device drivers that collect my keystrokes... code in the display driver that powers my monitor... you get the picture). Generally we're entirely insulated from all of that hidden complexity, but when the abstraction fails the result is painful. What would it look like if we spent more time throwing away code and removing layers than we did writing new code?



What if smart people sat down and wrote an operating system and focused like a laser on keeping things simple? What if they built it with a child in mind, or with a grand parent, or another novice computer user in mind? What if they sought to control rather than abstract complexity?



Take for example "hidden" files. Why on earth do we need hidden files? It's more likely than not that real users have NEVER used that feature and instead have only been hurt by that feature. That feature exists as an attempt to encapsulate system files. Microsoft/Apple said "hmmm all of these files in /System or in C:\windows look pretty scary and users would be pretty messed up if they deleted them. what can we do?" And the abstraction of hidden files was born. So rather than reducing the need for those files (can't eliminate entirely obviously), or putting them in one location which is never shown, or archiving the files together in one bundle and hiding that.... we got file-level hiding, and beautiful but useless encapsulation that hid complexity but didn't reduce it and it sits there waiting to bite.



No comments:

Post a Comment