From: gnu@hoptoad.uucp (John Gilmore) Subject: What is a Unix Wizard? [I ran across these on a Unix salesman's wall and haven't seen them posted before. I modified them here and there. Followups are in net.jokes.] People who come into contact with the Unix system are often told, "If you have trouble, see so-and-so, he's a guru", or "Bob there is a real Unix hacker." What is a "Unix Wizard"? How does s/he differ from a "guru"? To explore these and other questions, here is a draft of the "Unix Hierarchy": NAME DESCRIPTION AND FEATURES beginner - insecure with the concept of a terminal - has yet to learn the basics of vi - has not figured out how to get a directory - still has trouble with typing after each line of input novice - knows that "ls" will produce a directory - uses the editor, but calls it "vye" - has heard of "C" but never used it - has had a bad experience with rm - is wondering how to read mail - is wondering why the person next door seems to like Unix so very much user - uses vi and nroff, but inexpertly - has heard of regular expressions but never seen one. - has figured out that '-' precedes options - has attempted to write a C program but decided to stick with Pascal - is wondering how to move a directory - thinks that dbx is a brand of stereo component - knows how to read mail and is wondering how to read the news knowledgeable - uses nroff with no trouble, and is beginning user to learn tbl and eqn - uses grep to search for fixed strings - has figured out that mv(1) will move directories - has learned that "learn" doesn't help - somebody has shown her how to write C programs - once used sed but checked the file afterward - watched somebody use dbx once - tried "make" but used spaces instead of tabs expert - uses sed when necessary - uses macros in vi, uses ex when necessary - posts news at every possible opportunity - is still wondering how to successfully reply to mail - writes csh scripts occasionally - writes C programs using vi and compiles with make - has figured out what && and || are for - uses fgrep because somebody said it was faster hacker - uses sed and awk with comfort - uses undocumented features of vi - writes C code with "cat >" and compiles with "!cc" - uses adb because she doesn't trust source debuggers - figured out how environment variables are propagated - writes her own nroff macros to supplement the standard ones - writes Bourne shell scripts - installs bug fixes from the net - uses egrep because she timed it guru - uses m4 and lex with comfort - writes assembler code with "cat >" - uses adb on the kernel while the system is loaded - customizes Unix utilities by patching the source - reads device driver source with breakfast - uses "ed" because "ex" is a Berkeleyism - can answer any unix question after a little thought - uses make for anything that requires two or more commands - has learned how to breach security but no longer needs to try - is putting James Woods/Henry Spencer egrep into her next Unix release wizard - writes device drivers with "cat >" - fixes bugs by patching the binaries - posts her changes to Unix utilities to the net -- and they work - can tell what question you are about to ask, and answer it - writes her own troff macro packages - is on a first-name basis with Dennis, Bill, and Ken -- Capabilities of C Programmers ============================= novice: -- puts ``include stdio.h'' in his code - but is not sure why, -- has heard of pointers---but has never seen one. user: -- has had a bad experience with pointers, -- knows the difference between ' and ". knowledgeable: -- uses: if (a==b) c=1; else c = 0; -- uses pointers - but only in place of arrays, -- loves writing code on VMS. expert: -- uses: c = (a==b) ? 1 : 0; -- uses pointers comfortably, -- is jazzed when he finds a compiler bug because he found it, -- has figured out what && and || are for, -- refuses to write C code on VMS. hacker: -- uses: c = a==b; -- writes code which use pointers to functions, -- writes macros instead of simple functions, -- uses bitwise operators because they are like assembler, -- writes simple code with ``cat '' and compiles it with ``!cc'', -- uses argv and argc. guru: -- avoids bitwise operators due to portability, -- is annoyed with compiler bugs, -- writes code portable enough to port from VMS but doesn't relish the thought, -- can answer most C questions after a little thought. wizard: -- writes compilers with ``cat '' (and they work!), -- reads device driver source with breakfast, -- can tell what question you are about to ask - and answer it, -- is on a first-name basis with Dennis, Bill, and Ken.