Definitely agree with apprenticeship. I've learned more through a couple hours of pair programming with an experienced coder than I did at the university.
This isn't to say university is bad. Data structures, algorithms, etc.. should all come at an instructional level, but good design practices definitely come from coders.
As a side note, is there any sort of organized apprenticeship program, or are we dependent on introductory training at a job/Open Source level?