If I install a new computer for myself (or if I do a fresh reinstall on an old machine), I want the computer have the software I am used to. To automatize this process, there a different approaches. If you use Ubuntu, you can use Ubuntu One to syncronize your software selection across many different machines (starting from Ubuntu 11.10 Oneiric Ocelot). If you use something else, it is getting tricky. You can use the following commands to generate a list of installed packages and load the list later for installation:
dpkg --get-selections > installed-packages.lst
dpkg --set-selections < installed-packages.lst
However, this creates big problems, because the list contains ALL packages including those that are hardware-specific. Actually you are only interested in the user-installed software. For reloading the software onto the same (or an identical) machine, this command works fine, but what if you want to use KDE instead of Gnome on the new computer? You still want to use the same programs, but the commands above will wreak havoc and may even break your desktop experience. Unfortunately I have not found anything better, but to open the text file generated with dpkg and to manually erase all lines that do not contain user-installed software (which is most of them).