My comment pertains to the part of your question about understanding a large code base...
- First attempt to use and compile the project
- Figure out where the entry points are for the app. Generally this would be a 'main' function and any sort of event handlers. Frameworks complicate this a bit because they're responsible for calling code and do it in any number of arbitrary ways.
- Get a feel for the organization of modules/packages etc. Try to find the naming structure/patterns and how everything is laid out conceptually.
- Focus on a few features (just a random sampling) and grok how those work. Hopefully at this point there's some semblance or order in the project, so that if you understand how a few parts work, you can start to build a model in your mind how everything works, without trying to study everything in the codebase. And an architecture diagram from the project owners would help too, if an up-to-date one exists (doubtful).
- Make a very simple/trivial change, compile it and try to observe the result (that your change successfully compiled).
- Choose a bug or very small feature to work on.
- Success?
Edit: I just read the comment by 'fundamental' which I happened to basically restate with bullets. Anyhow, good luck. It took me about 2 years of full-time programming before I got comfortable reading large codebases.