Speaking as a die-hard Linux geek myself, I'm having fun adapting to MacOS X. (I'll be putting my initial experiences
writeup on the web soon.)
One of the vital tools any UNIX desktop comes with is a virtual desktop pager. Space.app has made huge progress lately, and
does the job reasonably well. But there's one problem with it; an application's windows all seem to want to occupy the same workspace. Go to a fresh workspace in Space and click on an app in the dock and all its windows decide to relocate into the current workspace. This is less than useful if, like me, you like to have lots of terminal windows open and work with programs UNIX-style, launching them from the command line.
Here's another annoyance with the dock: if you're running one copy of an application, there doesn't seem to be any way to fire up another -- because the dock merges two distinct jobs (tracking processes and providing a launcher for programs), clicking on an app just brings the running instance to the front.
However, you can get round this and run multiple copies of Terminal, or Mozilla, or the OS/X port of Vim quite easily by remembering that an application is actually a directory tree. If you run the binary buried inside it
in ./Contents/MacOS/ using the shell, it launches a fresh copy of the program. For example, if you've installed Vim in
/Applications/Utilities/vim/Vim.app, you can run multiple fresh copies of it by typing /Applications/Utilities/vim/Vim.app/Contents/MacOS/vim. And each copy has an independent existence as far as the dock -- and Space.app -- are concerned.
(Next step: a simple perl script to search below "/Applications" for each named program, and add their enclosing directory to your PATH environment variable. Or an applescript to emulate the Alt-F2 functionality of KDE -- pop up a mini-shell window in which to type a command, then remove after you hit return.)