How do you read and write a project beyond a one-page script? I have hit a plateau in learning to program in that while I know CS concepts and I can read and write a program such as a diminished find clone, I cannot create anything that's spread across multiple files, and making meaningful changes to something already existing requires some comprehension that I at present lack. When I start reading a new project of someone else's in hopes to make changes, the first, hard, step is that I usually literally do not know where to start, as in which source file to read first, especially if it is a language which has nothing like a Main class. I have done some inconsequential projects in Java before requiring multiple classes, thus multiple pages and no obvious start, but these projects were all small enough for me to hold the entire project in my head.
What's the next step? How do I learn to work beyond making one-file scripts with one or two supporting and header files?
For a language like Java, the way out is to pick a project that isn't just the solution of some equation(s) or a similar mathematical problem. Find a project in which the description of the problem can be analyzed as some &quot;thing&quot; that has discernible &quot;parts&quot;. The parts can be modeled as classes and the resulting objects composed into a solution.
One that is simple enough is a calculator. A calculator has a display. It has keys that have actions, which vary depending on the &quot;state&quot;. For example, the &quot;5&quot; key behaves differently in the case that the previous key was an operator or another numeric key. The answer of Ben I. mentions design patterns. This is an example of the Strategy Pattern.
Most calculators employ a stack or other hidden register beyond the display. Calculators have an operational strategy of operation that differs for an RPN or an algebraic calculator. The precedence of the operators may be important, or not.
The calculator can print out a tape of recent operations, or not. It can have a GUI or not. If it has a GUI then you can build it with MVC or not.
And if you want a real challenge (the Polymorphism Challenge = writing a program with a limited budget for selection statements), it is possible to build such a thing without a single &quot;if&quot; or &quot;while&quot; statement, provided the user gives the key presses. This will give you very low Cyclomatic Complexity, which is a desirable feature of any program.
But it is the &quot;parts&quot; composed into the whole that is the essence of this.

I've purposely not provided pointers to some of the terms here. You can explore them on wikipedia or elsewhere. But the polymorphism challenge search will lead you astray. Look HERE for guidance.

And using JavaDoc consistently is a good habit. If you are extending an existing project then the JavaDocs already (hopefully) in place should be a good guide to the operation.