Two things that helped me early in my career:
- Going to open-source libraries I was relatively familiar with, looking at commit #1, and then moving forward in time. (This works best when the project started on GitHub, rather than the first commit being a giant single-commit import of a released version.)
- Strangely, "Working Effectively With Legacy Code" gave me some generally useful tips on actively probing large codebases (instead of just trying to learn them by reading.)