I just came upon this interesting article. The basic premise is simple, we are teaching people to program the wrong way!
Traditionally programming is considered an art to be learned by doing. This is known as constructivist approach. I agree with this approach to some extent. I think the key here is understanding that it's not a good starting point.
Instructionists offer another school of thought. According to this school, it's better to provide full examples and learn by examining them. This is where studying existing programs, their architecture and code comes in.
In principle programming is just an act of understanding structure. Reading code gives some idea on how to solve problems. Of course to truly understand the code you need to learn the constructs which isn't a bad thing itself.
Just to conclude this post I think it would be a worthwhile idea to introduce courses aimed at reading code besides just writing ones. Good design and code should be given the same value as literary and art classics. To give some idea of the current situation imagine if we taught people to write before they can read properly. Would that work?