Disclaimer: The opinions expressed below are mine, and mine alone, although shared by quite a few people on the web. These personal opinions are irrelevant to the courses I teach.
Skip opinions, get links!
My programming environment of choice is UNIX. I spend most of my time in Linux, using GNU tools: bash shell, Emacs, gcc (g++), GCL (GNU Common LISP). I use PERL for almost all my text-related and web-related tasks, TeX and LaTeX to typeset papers and anything else that has to be pretty-printed, and Xfig + Gimp or ImageMagic for graphics. All of the above Linux software is free and highly configurable, and has extensive documentation, from the Linux Documentation Project http://metalab.unc.edu/LDP/ or as GNU info, from the Free Software Foundation http://www.gnu.org/ site.
I don't do fancy graphics stuff because I am hopeless as a graphics designer, and also because graphics-intensive web pages take forever to load, at no additional gain in information content. I avoid using any word processing software that produces non-plaintext (i.e. unreadable with a basic text editor) files (in particular, I hate MS Word -- did you know that it encodes your name, registration and your computer id and other sensitive information in every "doc" file you create? Do you know that the Melissa virus used nothing beyond the standard MS Word functionality to do what it did? Every time you use Word, or, for that matter, Internet Explorer, you open up countless security holes).
Although some Windows programs have useful features not found in the abovementioned applications (most notably, MS Development Studio and the Borland C++ Builder provide a nice environment for debugging/viewing code), the overall hassle of using Windows (such as the impotent and screwy DOS command shell) pretty much kills these advantages. I find the style of file management forced by the "Windows Explorer" unbearable -- all drag-and-drop features require a lot of mouse operations (which are slow), and a lot of fumbling with multiple windows (which is slow and irritating). Quickly viewing a file in hexadecimal to find out what it really contains is next to impossible, viewing the contents of a zip- or other archive requires a lot of clicks around the place even if you have WinZip (which is not free), etc. etc. Converting a text file from UNIX to PC to Mac formats is another continual hassle.
From this you can guess how I feel about the MacOS, where even switching between different open windows requires intensive mouse use, and most applications refuse to open files that were not created by them or in some special way -- they just don't show them in the file dialog box!
Over the years I found a number of programs (shareware and freeware) that
allow me to circumvent the inborn brain-damageness of bare Windows and
work in that system almost without growing aggravation. They mostly
imitate UNIX tools, or provide similar functionality in other ways.
I ended up bying those that saved me some 80 percent of irritation.
Others are freely downloadable. Most files come as "zip" archives,
you will need to "unzip" them. There is a free program called Unzip,
does it (that site is often busy, so I keep a
local copy here)
or you can download the shareware WinZip,
Here is the list:
You can download it and use freely it for 30 days or something. There are cracks on the web that allow using these programs after their 30 day evaluation periods, but I urge you to to pay what the authors request -- they did a great job, and that way you'll keep new and better versions coming.
Cygwin comes with a bash (UNIX) shell for Win9x/NT and the ported standard GNU utilities for program development and file handling. It's almost as good as the original thing :-), although still in beta, and not without its share of glitches. The definitive book to get if you are new to the UNIX shell is Learning the Bash shell from O'Reilly. It will de-mystify the UNIX environment and give you the power to do tasks that are tedious or impossible in the Windows world with a single command.
(Note: If you have trouble starting the shell under Win9x, change the amount of "Initial Environment" in "Properties/Memory" to 2048 or more.)
Here is the list: