The most interesting cultural observation thats not often talked about is bare emacs and bare vi are equivalent-ish, but all the "cool" stuff in emacs is in the addons.
If you just use bare emacs you'll think its pretty boring and not see any productivity gains.
If you use a pre-packaged set for emacs, you'll be utterly overwhelmed trying to learn a million things at once. There are no pre-pack sets with just systemic improvements.
Another cultural thing is there's addons for emacs that improve everything (like helm) and addons that provide one nifty feature (like magit) and addons that are affinity specific (like clojure-mode thats of interest to clojure coders but not likely other coders). So we call them all the same thing, addon or extension or whatever, but there's 3 classes of thing with that name that differ in how you interact with them and they interact with you.
So ... my advice is install your vanilla emacs, put in the stereotypical system wide addons maybe just helm, and then add one package at a time figuring out what they do.
Aggressive-indent rather forcefully indents your code as it sees fit, which some like, others hate. Maybe a good place to start?
So projectile and helm-projectile makes opening files in the same project simple. It understands your git repos and you can open any file in that repo and a lot of other repo related stuff.
And perspective lets to segregate multiple project buffers so however unwise it is, you can work on multiple separate real world projects at the same time.
And flycheck does on the fly highlighting of errors in your code.
And magit does git inside emacs sorta
rainbow-* does colorful syntax highlighting (or drives people nuts)
yasnippet adds tab completion (so "i" "f" "tab" give you a whole if-then stanza ready for editing, depending on your language)
Trying to add all that at once would drive you nuts, so one package at a time till you feel OK with it. I still don't entirely feel OK with magit, whatever.
There's also language specific packages although cider and clojure-mode will be quite useless unless you code clojure, etc.