A common problem I've noticed many beginners (especially self-taught ones) run into is figuring out how to transition from working through tutorials and exercises to working on full-fledged projects. There seems to be almost a "cliff" of sorts that many find challenging to scale for a variety of reasons (that are probably not worth enumerating here?).
One way to make it over this "cliff" is to find a teacher that can help guide you through progressively more challenging projects. Of course, this isn't a path available to self-learners by definition.
The next best alternative is probably to find a tutorial or online course that does something similar. Unfortunately, these resources either appear to be hard to find or simply inadequate (?), based on my (anecdotal) experiences answering beginner questions on another forum.
Taking all this into mind: What concrete advice would you give to self-learners who are struggling to transition to working on larger projects?
Edit: To answer @BlackJack's question: by "larger project", I mean a project that:
- Does not immediately follow from a tutorial or exercise: finishing the project requires a fair degree of independent work.
- Is "large" and "challenging" relative to the expectations and abilities of a beginner -- for example, it might take a beginner a few weeks to complete a "large project", but an experienced programmer might be able to pull off the same thing in a weekend.
- Is not a "single-file project": there are lots of things you need to do and lots of details to keep track of.
- At the very end of the scale, a "large project" might be the sort of thing an intern or an entry-level junior developer is asked to do. (Most beginners will probably likely need to complete multiple easier projects first before they're at this level, though.)
Some examples of large projects for beginners:
- Implementing an interpreter or compiler for a programming language
- Writing a video game (either a feature-rich prototype of a novel game, or a polished clone of some existing game)
- Writing a webapp or mobile app with a non-trivial frontend or backend (for example, implementing their own basic search engine)
- Rigging together some relatively complex automation using a few Arduinos/Raspberry Pis