> I start with a feature or use case, and start from the outside in to trace the codepath that the feature follows. During this process, I take notes about the files, lines, and functions I’m going through, but I do not yet attempt to understand how anything works. This is the “trace down” phase.
In my opinion this is what makes it easy to discover how programs written in Go, Rust and C work, while it typically is not easy to discover how programs written in Java or C# [1] work typically - abstracted wireup via IOC containers often makes it difficult to to determine which code is likely to run.
I can only speak for myself here, but why would step 1 be "become a user"? I ask because I don't fully grok why I would want to contribute to a project I don't use (either in my personal time, or work time)?
Some excellent advice here about "tracing in":
> I start with a feature or use case, and start from the outside in to trace the codepath that the feature follows. During this process, I take notes about the files, lines, and functions I’m going through, but I do not yet attempt to understand how anything works. This is the “trace down” phase.
In my opinion this is what makes it easy to discover how programs written in Go, Rust and C work, while it typically is not easy to discover how programs written in Java or C# [1] work typically - abstracted wireup via IOC containers often makes it difficult to to determine which code is likely to run.
[1]: Yes, yes, not all Java etc etc...