James Hague: "But all the little bits of complexity, all those cases where indecision caused one option that probably wasn't even needed in the first place to be replaced by two options, all those bad choices that were never remedied for fear of someone somewhere having to change a line of code... They slowly accreted until it all got out of control, and we got comfortable with systems that were impossible to understand."
Counterpoint by John Cook: "Some of the growth in complexity is understandable. It's a lot easier to maintain an orthogonal design when your software isn't being used. Software that gets used becomes less orthogonal and develops diagonal shortcuts." If there's ever been a system in
dire need of a complete redesign, it's UNIX and its derivatives. A mess doesn't even begin to describe it (for those already frantically reaching for the comment button, note that this applies to other systems as well).
Member since:
2006-10-08
I don't even try to claim that a UNIX guru is superior to other professionals per se. I just say that he grew up with the habit of learning, concluding, adopting, exploring, training and re-orienting than many other branches would have (which are quite static in knowledge). In terms of computers, the UNIX guru of course is superior to the lawyer to whom the PC is just a tool.
And that's what a computer with an operating system and application software is: a tool. So even the lawyer should try to treat is a such. To properly use a tool, you should at least know a bit of how it works and what you use it for. "Know your tools" may be a fully different knowledge for a lawyer than for a doctor. The lawyer will know how to retrieve his cases from the database, edit text, search for law content and references. The doctor will know how to access patient data, bring up x-ray images, magnify them or change contrast, administrate medicine or order tests. Both have a thing in common: They have a computer as an important tool.
To reply to your car analogy: If you're using your car as a tool, you don't need to know about all its inner workings. I say that's even impossible for a modern car because you're surrounded by "black boxes". Most of the stuff you cannot repair, or even remotely understand. But there are few things you need to know, and you even have to prove it: You need to be familiar with the pedals, the steering wheel, the dashboard. You have to know how to accellerate, brake, turn, shift gears and so on. You also need to know traffic rules: the funny signs and colorful lights, the speed limits and the precedence at a crossing. You even have to prove that you know them. Without that pre-knowledge, your car would be totally useless to you.
Again, the language analogy applies: It's not sufficient to know the letters of the cyrillic alphabet. A language is more. You need to know the words, the grammar, rules and uses. And you need experience. You will get it only by using the language.
GUIs are the abstraction layer that provide this access. The limit the pre-knowledge to pointing and clicking, the mentality to "trial & error", which is not a big problem as you cannot break things easily (but you can, just try hard enough).
As I said, typing is the way UNIX gurus get their work done. It's faster, because it's more direct. Instead of selecting from a list of prepared possibilities ("show on the chart"), they form their commands directly ("build a sentence"). This implies that the language is known, otherwise any attempt would be futile.
Please try to understand the important difference of "foo" and "./foo". "foo" means: if we have a program "foo" in our $PATH which contains directories where execution of programs is allowed, run that program; if not, give an error message back (like "foo: Command not found."). "./foo" mean: if there's a command called "foo" in the current working directory (and nowhere else!), I intendedly command to execute that program because I know what I'm doing.
Just imagine some hacker compromizes your account, for example because you have a weak password. He cannot access system directories, but he can access your home directory. Therefore he will place "dummy programs" like ls, cp, cat or dd in your home directory. So if you routinely call them, you will call his programs instead of the ones you intend.
But there's also a positive effect of the ./ notation. Imagine you've downloaded the source of a program you've installed, but you did some modifications to it. You can then call "./program" or "~/src/foo/compile/program" directly which makes sure the modified version will be tested; if you run "program", just the one that is installed will be run, e. g. for reference.
There are two main concepts:
WYSIWYG: What you see is what you get. Emphasize: see. If you don't see it, you won't get it. Visual confirmation is highly important here, and the set of possible selections is limited. You can compare this to a baby that points to a thing and says "gah!" or "bah!" in order to acquire it.
YAFIYGI: You asked for it, you got it. You have to use the proper "language" to say what you want. The analogy here is that the baby has grown and adopted spoken language; it will no longer point and "gah!", but start with simple sentences like "Timmy ball!", and the more it learns, the more complex operations it can perform using language, like "Mommy, can you bring me the ball?" and so on.
You can clearly see that there is an evolutionary gap between the two concepts. This doesn't mean that mouse action in general is inferior to keyboard interaction. It isn't. The key to productivity is a good combination of both!
So when the system presents a prompt, for example
bob@vs19:/home/bob/src/foo% _
you can already obtain information from it. But what else does it say? It says: "I'm ready for your commands. Go ahead and tell me what you want."
You already answered your own question: "Understand the way it works": As long as you don't try that, you don't need any more knowledge than pointing and grunting. But compare it to your car: Want to fully understand how it works? You'll get your hands dirty, you'll learn a lot, and with every car generation, you can use a lot of pre-knowledge, but you also have to re-learn many things. That's what development and evolution is.
Tell that to a Chinese, saying that your native language is way superior to his and he should forget his stupid little drawings and learn it instead?
Depending on your individual education and knowledge, things look easy or hard. If your "IT career" started with UNIX stuff, you'll understand everything in UNIX being quite simple and logical, so this would be "easy stuff" in the end. If not, it might be overwhealming and not even understandable. Learning is the key. There is no other way to get access to and to employ technology that flexible, powerful and advanced. Sorry, I don't want to sound impolite, but it simply is that way. You cannot acquire UNIX guru skills without knowing your tools. I claim nearly anyone can, but one has to actually do it, learn it, practice it. It's not a matter of "PC on, brain off". There are many resources for help and learning, but you have to access them and use their input for your own thinking. As powerful as today's computers are, they don't free you from thinking on your own. They don't make a working brain obsolete.
Allow me to come back to the car analogy: If you can't figure out car, better don't touch it, or just f*ing learn.