I'd argue environmental variables have the strong advantage in that you can use them in cases that won't otherwise expand, namely programs that take a path parameter immediately following an equals, e.g.
$ docker run --workdir=$dev foo
in these cases `--workdir=~dev` is not expanded and fails as docker does not understand your alias.
True and I often have both. I like my exported environment variables to be all caps and my directory aliases to be lowercase. This keeps their uses separate.
The example
Becomes And now thanks to the way ZSH handles directories, you can still simply change directory with and it'll work as before but it also allows you to treat it as a fully qualified directory in other commands which I find exceedingly useful