Joining an existing team with a large codebase already in place can be daunting. What's the best approach;
- Broad; try to get a general overview of how everything links together, from the code
- Narrow; focus on small sections of code at a time, understanding how they work fully
- Pick a feature to develop and learn as you go along
- Try to gain insight from class diagrams and uml, if available (and up to date)
- Something else entirely?
I'm working on what is currently an approx 20k line C++ app & library (Edit: small in the grand scheme of things!). In industry I imagine you'd get an introduction by an experienced programmer. However if this is not the case, what can you do to start adding value as quickly as possible?
--
Summary of answers:
- Step through code in debug mode to see how it works
- Pair up with someone more familiar with the code base than you, taking turns to be the person coding and the person watching/discussing. Rotate partners amongst team members so knowledge gets spread around.
- Write unit tests. Start with an assertion of how you think code will work. If it turns out as you expected, you've probably understood the code. If not, you've got a puzzle to solve and or an enquiry to make. (Thanks Donal, this is a great answer)
- Go through existing unit tests for functional code, in a similar fashion to above
- Read UML, Doxygen generated class diagrams and other documentation to get a broad feel of the code.
- Make small edits or bug fixes, then gradually build up
- Keep notes, and don't jump in and start developing; it's more valuable to spend time understanding than to generate messy or inappropriate code.
this post is a partial duplicate of the-best-way-to-familiarize-yourself-with-an-inherited-codebase
What is your approach to learning and getting up to speed with a large codebase?
Fixing bugs is one of the BEST ways to get up to speed in an unfamiliar codebase. Not only will it help you learn more about the product you're working on, but you'll also be actively helping users as you fix problems.
Start with some small task if possible, debug the code around your problem. Stepping through code in debug mode is the easiest way to learn how something works.