Programming Tools


Things To Download

B-liner <Shameless plug> This is a hierarchical spreedsheet/outliner. Do you need it? Ummm....yep! Go get it! Educational version is free, otherwise there is a free 30-day trial. </Shameless Plug>

Cygwin Project A unix shell (bash), a unix layer (cygwin.dll) and a good c++ compiler (egcs) for Windows. Unix is a great environment for programmers. It has a bad reputation for being hard to use. This is absolutely not true. It is hard to learn, and there is a big difference. Once you learn it, bash is much easier to use, and much more powerful than the standard dos shell, or windows explorer.

Emacs Emacs for windows. With this plugin emacs can be used within visual C++ (VC++ 5 or 6). See above about emacs being hard to use, but sed s/unix/emacs/

Intel Performance Library Signal Processing, Recognition Primitives, Image Processing, and Math libraries optimized for various Intel Processors. Will take advantage of MMX if available. I use the Image Processing Lib. Could use some more functionality (no segmentation ops), but impressive speed.

EGCS Probably best featured C++ compiler for Windows. Very good template support. Not very good windows support. A good compiler to play with template meta-programming. It now ships with standard with cygwin (see above).

Python An object-oriented scripting language. Many extension libs (Databases, Graphics, GUIs, Network Programming).

Perl Just get it. Trust me. It may not be the most elegant language in the world, but it GETS THINGS DONE.

PGP Mind your own business! Cryptographic Software.

CVS Version Control Software.



Books

Introduction to Algorithms Despite the "introduction" in the title, this is a fairly advanced book. It covers: The book is well written, and the material is important. If you did not have a course on algorithms in College, or you need a good reference, this is the book.

Design Patterns Certain design problems come up again and again. Design Patterns catalogs 23 proven solutions to some design problems. These solutions are much more polished than most people would come up with when first presented with these problems. If you program in an Object-Oriented language, reading this book will improve your designs.


C++ Gems A collection of articles from the C++ Report. I read somewhere that the authors of the articles in this book "read like a who's who in C++" Let me just say that those "Who's who" books are frauds. Any jackass can get in those books, they just want to sell you the books. If you're arrogant enough to want to be in those books, I can't help you. Go join MENSA or something...But I digress. The authors of C++ gems include:

The material is somewhat advanced. If you are comfortable with C++, this is a good way to get to the next level.

Some Interesting Projects

OpenC++ is an implementation of C++ with a Metaobject Protocall. Metaobject protocalls appear to be very powerful and much more than just an accidemic curiosity. In particular, patterns and MOPs seem to complement eachother nicely. In addition, using a MOP and pointer swizzling, it should be relatively straight forward to add persistance to the language. The documentation for the project is quite good and the concepts are easily understood. Don't let the fancy acidemic-sounding name scare you away. Another good links for information on MOPs is Open Implementation Page

PVM Use your network as a parallel machine.

Inferno A network operating system from Lucent. I downloaded version 1 a while back. I was impressed with their operating system concepts (namespaces), but I did not like Limbo, their programming language. It has support for abstract data types, but is not object-oriented. It is adequate, but I don't understand why they rejected the powerful ideas from object-oriented languages.

Eiffel I read a book on Eiffel a couple years ago, and I was very impressed. It is a very well designed language, and it had this great environment to go with it. I sent away for ISE's Eiffel for Windows at the time (I paid about $20), and it sucked. It was unusable (it crashed all the time). I heard the same thing from other people. At any rate, I've heard the new version is pretty good. It is worth a look, and the book Object-Oriented Software Construction is excellent.

Jini is a new project from Sun. They are hyping it quite a bit. I don't know very much about Jini (I don't think very many people do), so take what I say with a grain of salt. Jini seems to be a way to allow different Java virtual machines to communicate with each other. It adds the following functionality to Java:

I would recogment the book Java Spaces Principles, Patterns, and Practice by Freeman, Hupfer, and Arnold. These people were involved with the Linda project at Yale and are (some of the very few) people with real experiance with tuple spaces.

T Spaces is similar to Jini, it adds Linda tuples to Java. It does not appear to have distributed events ot leasing, but they do have transactions. It also has a "rhomda" primitive, which will atomicly swap a retrived tuple with a given tuple. And the T Space can build indexes on particular slots in a tuple, so the T Space can do fast lookups with that slot. Most importantly, you can download it and play with it (unlike Sun's effort, which appears still hasn't appeared on the web).

Coda is a distributed file system from CMU. It looks like an interesting project. In particular, coda tries to address the problem of devices like laptops that may be disconnected from the network. Judging from the web page, the project is very far along...looks like you can play with a linux version, and there is a windows port under way.


Back To Determan.net