If asked what shell someone should pick I would suggest that they consider:
Fish. The fish shell has fantastic user friendly features but isn’t POSIX compatible so is probably not a great choice for (portable) shell scripting.
Zsh. The zsh shell is fantastically powerful but can be a pain to configure, and has the benefit of being a drop-in replacement for bash.
Bash. Most people have been exposed to bash as it is usually the default interactive shell on linux systems.
If torn between Fish and Zsh, e.g. because you like Fish’s enhanced functionality but only want to use one shell and need POSIX compliance, there exists a intriguing combination of the two in fizsh (https://github.com/zsh-users/fizsh) – which provides zsh but with a good degree of fish-style user-friendliness. Installs from the package manager on Ubuntu and FreeBSD.
If you like bash – and recent bash versions do have plenty of decent features – there is an excellent tutorial at http://www.hypexr.org/bash_tutorial.php. There is a good post on fish with advocacy here http://jbrodriguez.io/switching-from-zsh-to-fish/.
If you use bash or zsh, check out z at https://github.com/rupa/z/. Z is like a much better version of cdargs and really streamlines moving around the file system from the shell.
For added shell nirvana I also recently stumbled across tmuxifier https://github.com/jimeh/tmuxifier which makes it easy to save and load tmux pane layouts.
My own personal preference is to use Fish interactively and Bash for scripting.
For scripting purposes there is a good post on the Ubuntu wiki about how to avoid bashisms at https://wiki.ubuntu.com/DashAsBinSh.
If you are interested in the history of the shell there is a good talk given by Steve Bourne on the design of the original Bourne shell at https://www.youtube.com/watch?v=2kEJoWfobpA.
There are also some excellent resources for shell proficiency linked to in the article ‘Dotfiles are your digital backpack’ here: http://www.madewithtea.com/dotfiles-are-your-digital-backpack.html.