A repository helps you to organize your code and keep track of changes and different versions. It is especially important for collaborative work, but also provides many advantages to a single user: the history of the project (of all files) is saved, and changes can be undone any time.

=> more.


Git is more powerful than svn. It has a slightly steeper learning curve, but is way more fun to use one you master it.

=> more

Programming environments (mainly C/C++)

Common tools available on Linux platforms

gcc/g++ C/C++ compiler
make build tool: generates code respecting dependency rules
cmake generate makefiles,... automatically
emacs editor
gdb standard debugger, command line oriented (probably don't use it directly)
ddd powerful graphical frontend tp gdb
valgrind interprets machine code of your binaries and magically finds bugs
kcachegrind visualization in case valgrind is used for profiling
doxygen extract documentation (see below)
octave free alternative to Matlab (see below)

Note that whatever environment you prefer personally (like eclipse, netbeans, kdevelop, etc.), make sure to keep things small for solutions to homework assignments! There is generally no need for fancy (=bulky) projects or user interfaces, etc.!


cmake is a tool that generates build files such as Makefiles (make) or Visual Studio project files automatically from a common description. It is especially suited for development across different platforms, e.g., Linux/Windows. And it comes with a (fairly) automatic treatment of dependencies (such as Qt).


Clang is a rather new family of compilers based on the LLVM framework. It looks like clang emerges to a serious competitor to gcc: Apple is going to replace their (gcc-based) tool chain by one based on clang.

clang is worth a look because it provides an alternative compiler that gives excellent(!) diagnostic messages compared to gcc (or Visual Studio).

clang is available as Debian package. Alternatively you can build it from the source (I recommend this option currently).

Windows beyond Visual Studio

Most of the above tools - including the GNU compiler suite - are also available for Windows systems. While you certainly don't have to use them for development, you may want to provide a Makefile and check source compatibility with GNU compilers (in fact, this may be mandatory for homework).

This is provided by either Cygwin (a Unix compatibility layer for Windows, see also German language tutorial here) or MinGW (a port of the GNU development tools to Windows, relatively lightweight compared to cygwin).

Alternatively, a Linux system can be installed within a virtual machine on a Windows computer. There are many virtualization packages around, e.g., the free x86 Virtual Box. Among the vast number of Linux distributions, Ubuntu is supposed to provide very user friendly installation. Note that no partitioning is required, the virtual hard drive for the Linux installation is made from files on the Windows file system, usually its size can grow dynamically (but not shrink). Make sure you have enough disk space (several GB to tens of GB for a typical "developer system").

If you prefer an IDE to using just a powerful editor (e.g., emacs for windows) you might want to try

  • Eclipse (with CDT plugin for C++). Full-featured IDE based on Java (available for any platform) with lots of plugins (including SVN access). Can be configured for MinGW and Visual C++. (For serious development, you might want to use Eclipse with cmake)
  • QtCreator a C++ IDE taylored for use with the popular Qt libraries. Allows for different toolchains, including MinGW and Visual C++. Try "advanced" installation mode, you can install the plain IDE and disregard many Qt-related items.
  • Code::Blocks a cross-platform C++ IDE (no more maintained?!).


Similar to, e.g., javadoc, Doxygen is a tool that extracts html (or $\text{\LaTeX}$) documentation from your C/C++ (Java, etc.) source files. The generated documentation automatically visualizes properties like class hierarchies and shows methods. Most importantly, documentation is extracted from comments that are written in a special style and use special tags. See here for a brief introduction.



Matlab is a commercial product providing a programming language, libraries, and a IDE for modeling numerical problems.

=> more

GNU Octave

Gnu Octave is a free alternative to Matlab which is widely source compatible. For many purposes it offers the same functionality but lacks a similarly powerful IDE.

=> more


Don't reinvent the wheel! There are various libraries for numerical computations which are

  • highly optimized and efficient, and
  • widely available and often constitute de facto standards.

=> more

Symbolic computations / computer algebra

MATLAB is a great tool for numerical analysis, but it won't help your for transforming terms, the work one usually does with pen and paper to derive the formulas.

In contrast, computer algebra systems provide symbolic manipulation of formulas ... => more