Modules is a software environment management software; in other words, it makes this nightmare of a task simple. The idea is that all the various libraries/softwares are packaged up with their environment and loading this software sets up the user environment automatically. When properly create, a module will know what dependencies it needs and which other modules it conflicts with, pointing out potential problems before you run into them. But enough of the introduction, lets get into the use of the software.
Using the "module avail" command provides a list of the modules that can be loaded. For example, on the Keeneland supercomputer (now defunct; oh why did you go??) this gives:
Each of the sections describe a set of modules that can be used. To enable a module issue the command "module load <name>". For example: "module load gcc/4.7.3" will attempt to load
Unloading a module is just as easy as loading a module. For example, I will need to unload the Intel module before loading the GCC modules because they have conflicting program names. To do this, I first issue: "module unload intel/2011_sp1.11.339".
Of course, you need a way to determine which modules are currently loaded. "module list" accomplishes this:
Now, these are all pretty standard usage commands for the module command; module is just that easy. "module swap" will allow you to switch between software; for example "module swap cuda/4.2 cuda/5.5". The final list looks like:

This about concludes the functionality you need as a user. If you want to delve deeper, especially with respect to managing a package, read the following.