Under the hood, Debian uses the dpkg package manager to install and manage packages. There are also various frontends available, such as apt and aptitude, which make management more user friendly.
Starting with the basics, you can use dpkg-query to query installed packages on a system:
$ dpkg-query -Wadduser 3.115apt 1.4.8apt-listchanges 3.10apt-utils 1.4.8base-files 9.9+deb9u5base-passwd 3.5.43bash 4.4-5<SNIP>xauth 1:1.0.9-1+b2xdg-user-dirs 0.15-2+b1xkb-data 2.19-1+deb9u1xml-core 0.17xxd 2:8.0.0197-4+deb9u1xz-utils 5.2.2-1.2+b1zlib1g:amd64 1:1.2.8.dfsg-5
You'll no doubt notice that by default, the packages and versions are separated by a tab character. Personally, I think this is hideous (because two spaces are the superior option), ...