I'm a mathematician and a Linux user. I know how to write programs, but that's not my primary activity. Here are my preferred tools and some opinions on programming.

Programming tools

Languages: I really like the Small Combinatorial Library of Dan Piponi (a.k.a. sigfpe) written in Haskell.

I rarely hear people talk about programming in Forth or PostScript, but I think PostScript would be a great language for beginners. Clearly there is broad appeal in the graphics. The evaluation model is simple and fun. The PostScript Language Tutorial and Cookbook is easy to find. On a plain Ubuntu Linux system, you can type PostScript commands into the default text editor; output shows up in the file browser; and if you open the file there, you get an output window that's automatically refreshed when the file is saved. It's hard to imagine a simpler development environment.

For visualization I use Graphviz, SVG (viewable in Firefox), and PostScript. I have used Python's Tkinter (Tk) module to make graphic user interfaces, but I rarely do this for my own purposes. I think Craigslist is a beautiful example of web design.

Operating system:

Linux. For the desktop I use Ubuntu. Second choice would be Debian, some other Linux distribution, or another free Unix-like system such as FreeBSD. Third would be a commercial Unix-like system. I've used IRIX, SunOS, and Solaris.

Open-source software is important. Eventually you find the system or library you are using to be missing a feature. You want to add it by messing around, figuring things out, and reading the web, not by calling some corporation's technical support line or hiring expensive consultants. Sometimes with commercial software these are your only options.

It's easy and fast to collect and install all the tools a programmer needs on an Ubuntu system. If you want to deal with a corporation, you still have that option with Linux.

Stuff I avoid

Integrated development environment (IDE):

I use no IDE, and I'll give two reasons.

First is state. When something goes wrong with a computer, you want to reproduce the problem and isolate its source. Desktop applications often maintain some state that's not obvious to the user. In short, the fancy features of IDEs, which seem never to be completely described in the accompanying documents, and which might matter even though you do not use them intentionally, frustrate debugging efforts.

Second is the mouse-and-menu design. Why use a mouse? It's much easier to become adept (by repetition) at entering a string of commands with keys. When programming, I mostly just compile, switch windows, scroll through the output, edit, save, and repeat.

Systems administration and arranging hardware:

I'm not much good at these activities.
back