Meh, writing code is the easy part, the fun part. Every programmer loves to sit down and bash out features. Even if they do so in ways that they know (or don't know) are perilous, ugly, or inefficient, there is still that beautiful rush of progress, and people will still pay for the service.
The discipline to step back, reevaluate, and think conceptually rather than pragmatically is much more difficult to accomplish when there's always so much lying around that needs doing.
It's important for budding programmers to build confidence in themselves. Forcing them to work with other programmers at the very beginning destroys confidence and makes them hate the work.
> Forcing them to work with other programmers at the very beginning destroys confidence and makes them hate the work.
In a Free Software project, nobody forces you to cooperate with anyone. If you want, you can just release your program (or patch) and ignore all feedback. However, often enough you'll receive some very valuable feedback.
Also, you'll receive different kind of feedback depending on whether you start your own Free Software project, or contribute to an existing one. So I suggest to do both.
The discipline to step back, reevaluate, and think conceptually rather than pragmatically is much more difficult to accomplish when there's always so much lying around that needs doing.