A major difference is that nowadays, the amount of code is vastly bigger, and may well have stuff like bought-in libraries and leftovers from other versions, which makes disassembly a lot harder.
And you can't tell what they were thinking.
What is this shit? It's all just moving around, going in circles...
Why are we jumping into this? We were already here a hundred times...
Nevermind, probably just some dumbass compiler...
...But then, if you gain familiarity with the typical compilers, you can recognize their output. It may be dumb output, but it's characteristically dumb. Like the dull kid at school, easily recognized. That helps to distinguish not just between functions, but between internal and library functions, for example.
Same goes for libraries, whether purchased or free -- it's all bad! Free software is often better, rarely so much in quality (unless it's an exceedingly popular distribution with a lot of exposure), but just because, at least you can fix it from the source level when it does break.
Tim