You want you son/friend to learn to code and his first project is copy-pasta from a book. Fantastic. Actually doing something is by far the number 1 challenge people never overcome.
Second project is also copy-pasta, that's only fantastic if you son/friend learn to be a typist. He and You both know he can do that. Does not mean you need to trash him, but showing the same enthusiasm as with the first project is counter productive, instead you should probably encourage him to tinker a bit with the program.
Challenge needs to grow. Sure you don't want to discourage a beginner showing how far he is from the mountain summit, but after climbing a step you need to show him the next one.
Is my friend just giving coding a go or are they trying to get a dev job?
Is my friend trying to show me what they have built or asking for help improving the quality of their code?
Etc etc.
Likewise is this a 14 year old athlete trying to compete at the state level? Or a 14 year old trying out football because his friends play?
There's a difference between a well written function, and an entire application that's well organized and thought out. And there's a difference between playing in your garage and playing on stage.
Did the band suck because they couldn't play? Or did they suck because they were nervous? Well the only way to get over that is to play in front of people more.
I also think there should be a difference in expectations depending on where/what you're seeing. You have every right to criticize a group playing Madison Square Garden. But there's a reason the 14 year olds are playing O'Mallys Pub on a Tuesday, or the Ernie Ball stage at Warped Tour, and not the main stages or an arena.
What's particularly awesome and worth congratulating is watching a band of teenagers suck on stage, and then watching them a month later suck a little less. We should be striving for "better" rather than "great", in my opinion.