aptitude considers packages that are installed due to dependencies to be "automatically" installed. With that knowledge, you can quickly construct an aptitude search pattern to list all installed packages that were not automatically installed:
aptitude search "?and(?installed, ?not(?automatic))"
Or, using the short form of the search terms:
aptitude search '~i !~M'
! is a special character in some shells. In the above, I used
'...' as quote chars to make Bash happy.)
Finally, packages which were installed by basic system installation will also be listed in the above. If that's a problem, you can exclude packages which the system considers to be essential by adding an
!~E filter. Or you could create a list of packages right after what you consider to be the basic installation, and
diff against that.
(grepping through bash history is certainly also a quick and simple option, and will work well if you are mainly interested in uninstalling some recently-installed packages. However, due to the limited size of the bash history, you will have a tough time finding packages that were installed, say, a year ago.)