It's odd how much novice programmers are asked to work on blank-slate exercise projects, which strike me as inherently advanced work.
Building up from "hello world" to something with interesting learning-experience challenges involves a lot of boilerplate work. It's almost guaranteed that you won't learn the core skills surrounding managing and limiting complexity in medium and large projects, or even why these things are valuable.
It's not much work to get a build environment up for a real-world program the student might use, then have them do projects to modify it (games are great for this). This can be really rewarding, it exposes the learner to realistic, large-scale code, and it serves to get them a gut feeling for "none of this is magic, it's just a bunch of code".
It's only a problem if you choose a language that requires a large build environment.
I have a very effective programming fundamentals class. y students perform very well, and every project we do is done from scratch. But I teach it in JavaScript simply because that is the absolute quickest way to introduce programming.
JavaScript can be an unforgiving, punishing language. But an absolute beginner who's learning to code can be steered away from the nasty bits. Because if you've never taught an absolute beginner, who doesn't even know how to open Notepad or unzip a file, you'd be shocked how slow and deliberate you have to be when you teach. :)
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.
Building up from "hello world" to something with interesting learning-experience challenges involves a lot of boilerplate work. It's almost guaranteed that you won't learn the core skills surrounding managing and limiting complexity in medium and large projects, or even why these things are valuable.
It's not much work to get a build environment up for a real-world program the student might use, then have them do projects to modify it (games are great for this). This can be really rewarding, it exposes the learner to realistic, large-scale code, and it serves to get them a gut feeling for "none of this is magic, it's just a bunch of code".