Many people love them, but I never got the hang of pushd and popd. These days, I use a CDPATH and z[1]. I also use zsh, which supports handy little things such as cd - (cd to previous directory).
If you haven't tried it, I highly recommend z. It's impossible to Google for, but it's oh-so-convenient.
cd is a shell built-in, not an external command. It has to be, since it changes the directory of the shell process, which can't be done by a child process. So shells do have to implement this specially.
If you haven't tried it, I highly recommend z. It's impossible to Google for, but it's oh-so-convenient.
1. https://github.com/rupa/z