A lot of the early software development I did revolved around modifying php web applications. Looking back, that experience didn't teach me very much.
When you know nothing about software and are working on a big existing code base everything is magic. It wasn't until I implemented a web app from scratch that I really understood how the web worked, and it wasn't until I wrote complex applications from scratch that I felt like I understood software.
Certainly having high quality examples of software is good for learning how a good architecture works, but at least in my experience if you don't have a good grasp of all the fundamentals (including a good mental model of object oriented concepts) everything in a complex piece of software seems like magic.
When you know nothing about software and are working on a big existing code base everything is magic. It wasn't until I implemented a web app from scratch that I really understood how the web worked, and it wasn't until I wrote complex applications from scratch that I felt like I understood software.
Certainly having high quality examples of software is good for learning how a good architecture works, but at least in my experience if you don't have a good grasp of all the fundamentals (including a good mental model of object oriented concepts) everything in a complex piece of software seems like magic.