My environment

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 or as GNU info, from the Free Software Foundation 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, available from that 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.

Windows Commander (kinda like the Norton Commander, or UNIX Midnight Commander),,
A two-window file manager/shell. Shows the contents of any two directories at the same time, sorted by name, size or time in any order (switching with one click). Moving and copying is done with one press of a function key, so is viewing any file as text or in raw hex, so editing a file. Archives are treated as directories, so adding a file to an archive or extracting a file from a multi-file archive, or viewing a file while still inside the archive is as easy as anything else. Highly configurable and has a lot of extra functionality, including ftp. Speeds up working with files and directories by at least three times, as compared to WE.
Ultra Editor (Uedit),
A plain text editor with automatic conversions between UNIX, Mac and PC formats, C/C++ and HTML syntax highlighting and spell-checking. Latest versions allow editing a remote file via ftp (automatic uploading etc). Configurable fonts, macros, buttons and toolbar etc.

Freely available:

Cygwin compiler for Win9x/NT,
The port of the GNU C/C++ compiler to Windows. With the latest version, you not only can compile C++, but you can use Windows APIs and create full-fledged Windows programs. It's quite adequate for our courseware and compiles faster than C++ with more meaningful warnings and errors. It comes with a command-line (alas!) based debugger. Unfortunately, the UNIX utilities so far come without on-line manuals (although the option --help or -h usually prints enough hints).
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.)
SSH and SCP (Secure shell and secure file transfer) clients Local: tterm and tssh (SSH 1), putty (SSH 2), pcsp,
Encrypted secure connections instead on un-encrypted insecure telnet and ftp
Programmer's File Editor (PFE),
A large capacity configurable text editor. Fast and lightweight, a good substitute for Notepad.
Emacs for Win9x/NT,,
The most powerful text editor. Has special modes for almost every programming language, which automatically aligns and indents your code, matches parentheses and braces, and does many other things that no other editor does -- including that expensive MS Dev. Studio. It is not only absolutely configurable, but programmable, so you can write any function you want and attach it to any key or combination of keys you like. Some people never leave Emacs, and do all of their work from inside it, and this is no exaggeration. Has a steep but rewarding learning curve.
What a language! Hash arrays are a basic type, pattern matching on text is a song, processing files or writing a simple parser is a child's game. Consider buying O'Reilly's Programming Perl. It gives you a real feeling of power, and a better understanding of the UNIX way of doing things.
MikTeX -- an implementation of TeX, TeX is a free text typesetting system, developed by Donald Knuth. Info, docs and the comprehensive software and package archives are at, the site of the TeX User Group.
Easy to install and uninstall, unlike other DOS-based TeXs. Works well coupled with WinEdt (shareware).

Good luck!