In my opinion, the best way to learn is to first try things yourself before looking at the way other people approached the same problem/project. It will train you to think about how to break down a large problem into smaller problems, as well as how to organize code. This also lets you evolve how you write your code. Some people write top-down, while others write bottom-up.
Also, don't be afraid to re-visit an old project that you may have already done in the past. It's amazing how doing an old project, but applying the things that you have learned since that time gives you new perspectives, as well as, let's you have a gauge of how you have progressed in the art and craft of software development.