The Cognitive Style of Unix
blog.vivekhaldar.com
blog.vivekhaldar.com
There are a couple of points in the paper that aren't mentioned in the article.
The first one is the the difference between low and high NFC (need for cognition) individuals. The paper defines NFC as follows: A person with a high NFC loves to seek, reflect on and reason about information, whereas someone on the other end of the continuum only thinks as hard as (s)he has to and is inclined to rely on others. Their results show that low NFC folks actually took longer to complete the internalized version of the task while the high NFC folks took longer to do the externalized version. This reaffirms Haldar's point, but with a caveat - his conclusions are applicable only to "power users".
The other interesting thing was that both low and high NFC individuals got started on the task much faster (the paper calls it time to first move) with the externalized version. Presumably, all the individuals were told they _had_ to complete the task while in the "real world" many might have just given up. If you're designing an application, this is a useful lesson, getting started should be easy (i.e., an externalized interface). I guess this is also traditional wisdom, but it's nice to see this confirmed by peer-reviewed research.
From José Ortega y Gasset's Revolt of the Masses [1930]:
“Doubtless the most radical division of humanity that
can be made is that between two classes of creatures:
those who demand much of themselves and assume a burden
of tasks and difficulties, and those who require
nothing special of themselves, but rather for whom to
live is to be in every instant only what they already
are.”
What Ortega y Gasset argues, and what is still true today, is the true threat to our livelihood comes not from those working to change our society but from those who deny its imperfections, who see acts of self-improvement as admissions of weakness, and who define the correct view to be equivalent to the view of the majority.Take care with that. Political implications could be huge. This can be read as declaring Democracy being a threat to our existence. Must be my bad english though...
Thanks for the non-paywall link btw.
An unfair reading to be sure! The statement should have been followed with a huge asterisk and an explicit qualifier. The thrust of what I meant hinges on the difference between (to quote N+1) a "formal democracy, or the equal right to an opinion, with a democracy of quality in which all views possess equal value — until some are proved superior by commanding a mob following."
I see I've really put my foot in it now. Here's the N+1 article in reference: http://nplusonemag.com/revolt-of-the-elites
Solving the problem of people never learning "one thing" to save hundreds of wasted hours over the years is akin to solving the obesity problem in America. Everybody that is obese knows already that obesity is a health problem, but it takes that little bit of effort to start making it pay off, and nobody has the time/desire to put in that little bit of effort. Meanwhile massive societal forces conspire to both make people overeat and stay inactive, just as they keep them from taking the time to learn new things about their software and work processes.
The reason I think culture and education can overcome these forces is because of another comparable societal problem: the campaign to end smoking actually has gotten a large percentage of Americans, especially youth, to get over that hump or even better never start at all. It took massive investment in public education and time for it to propagate through a generation. So, these are cultural problems: we have a failure to motivate people to explore new computer skills.
Then again. Does Joe Sixpack benefit from being more productive? After all, usually they aren't paid more when they do more work, so there isn't that much incentive...
My initial reaction to this was: of course! Doesn't everyone benefit from spending less time doing repetitive, thoughtless tasks at work? (even if they don't use the extra time to produce more output for their employer?) But you're right: the evidence is pretty overwhelming that either this isn't true, or it's true but most people don't care or realize it.
That's one of the things I enjoy most as a programmer is having the tools to easily monitor my output (LOC per day or something) but also the power to improve or create better tools.
The recommendations in the papers aren't, contrary to what the blog post says, about CLI vs. GUI, but about what kind of information should be presented to the user.
And: If they these people have the endurance to stand countless hours of such repetitive tasks, they are more than able to take the challenges of steep learning curves.
That said: My approach always has been to try to teach people about some fundamentals instead of letting them walk calmly into their ui abysses. And usually, when people learn that you can do with a keystroke what took four clicks before, they want to know more.
On the other hand if you need to achieve a task whose outcome you won't rely on to reach other ends, like say buying airline tickets (ha), its probably better if you can offload the thinking to some other entity.
So, (in this paper), we're talking about planning versus relying on more external visual cues. Your WinZip versus tar example is apt, but it also introduces the issue of GUI versus CLI, which isn't addressed by the paper.
The experiment in the Ph.D. research did not tackle CLI vs. GUI, but rather gave two GUIs, one based on internal (i.e., figure out for yourself what you can do) vs. external (give accessible information on what you can do) GUIs. There is a little bit of discussion in chapters 1&2 of the interface styles of CLI vs. GUI.
Basically, I like linux and vim because I had to suffer so much learning them ;)
but seriously, I think that notion applies heavily with coding. the languages and tools are often difficult and time-consuming to learn, and once you've invested the time to learn them well, you're psychologically predisposed to like them more. if time is valuable and one spends a lot of time learning a tool, only to find out later that it might be sub-par, it causes cognitive dissonance. at that point dissonance is most quickly reduced by looking for information confirming you've made the right choice, or simply assuming you have, and getting back to work
not directly parallel or orthogonal to the OP, but just a thought that crossed my mind while I was reading this
(I'm getting delirious because I popped some sleeping-pills, so I'm not to be held responsible to how coherent it was, orthogonality aside.)
Having just written that, I realised that games have been doing this for years. Imagine having a DVCS inform you that you've levelled up and can now do cloning.
Knights-in-training learned with heavier swords than they'd use in battle, so that when battle came they'd be able to wield their swords effortlessly.
How many people have had their week ruined by a lack of version control? Not geeks, but real people who didn't even know what that was until Dropbox arrived.
And version control is old hat. What other computer tricks are there? Backup? Deployment? Putting services in the cloud? Building services? This isn't stuff that requires a PhD in algorithms and distributed systems, just stuff that requires basic competence.
Isn't it a bit of a step backwards to start using footnotes on the web? I'd rather see the links to the past papers worked into a sentence, with links for each per topic for instance. That's what is so great about the web, I can hop instantly off to check on something that catches my eye.
I suppose it could be argued that using footnotes will keep the users from getting distracted, but I consider cleverly working in links to be one of the joys of both reading and writing on the web.
Putting digressions, rather than just sources, in footnotes is what annoys me. It's just lazy: "I wanted to say this as well, so I'll slap it into a footnote instead or figuring out how to say it in a readable way. So footnote 1, Incidentally it is amusing to note, blah, blah...", leaving the reader with the choice of following the footnote and spoiling the flow of the main post, or not following it and missing whatever the writer had thought was worth writing down. They make distractions, they don't avoid them.
But authors who tend to put asides in footnotes sometimes put such crucial material as definitions in footnotes. Don't you ever find yourself switching from main text to footnote when rereading technical material?
It also makes your product stickier (harder to change products; a switching cost), if users have internalized the rules.
It also may make the product harder to adopt, initially. A nice combination would be to make it trivially easy to do some common tasks (adoptable), but require internalization to do tricky things (a rewarding path to mastery; proficiency with your product becomes a markable skill; people look up to you; you become one with the tool; the power enables you can get things done).
There are other aspects of ease-of-use that aren't related to {internal,/external}ization, such as consistency of interface. e.g. ls -r means reverse, not recurse. Even though having to learn arbitrary differences will make it stickier.
When plain text is being passed around, one can build a pipe incrementally and immediately see what the input to the next command is and decide what to do with it. With powershell one has to constantly check the properties of the objects.
It is faster to do a 'some -command | grep foo' than 'some -command | Where { $_.SomeProperty -match "foo"}'.
UNIX (and open source software in general, with a few notable exceptions) is difficult because it's built by thousands of hackers with no user experience goals in sight. The goal is solving a problem for that particular person, as fast as possible. It's rarely getting more people to use the product.
I would say that the incredible versatility of the majority of stock UNIX tools and the philosophy that encourages combining them is evidence against this. Trying to predict every use case is a waste of time so make it simple and pipe. The alternative is software that is restrictive for some subset of users, no matter how elaborate it is.
Does anyone know how to make their tools easy to use? Apple, for one, certainly doesn't.
There are better interfaces for complex tasks.just try a good python Shell , with auto-complete and context sensitive help(like wing ide). the learning curve is much shorter. and you don't lost power along the way.
Mapping the commands (lisp-based DSL if I remember correctly...) to left-hand-only single key macros while your right hand moused the coordinates on the canvas ... holy crap was that fast. You could whip up fully qualified engineering drawings in a matter of minutes.
Can someone explain how this is a good thing?
Of course, you can't spend all your time thinking about the distracting minutia of every-day life (hand-encoding assembly instructions to program the microwave oven, or change the channel on the TV), but if you're actually trying to get something done, an interface that gives you a broad array of tools with complicated interactions can be better than a simple tool. Compare Vim vs. Notepad, or Photoshop vs. Paint.
Externalizing interaction is better when you want to provide a mental framework to drive behavior (e.g. most viral hooks or premium upsells; i.e. Farmville, Facebook, App Store).