My undergrad program has been doing this for about 10 years, and I'd say it was an extremely valuable way to bring together the prior 4 years and give you a taste of professional programming. My school certainly isn't Ivy League, but it is a "Tier 1" liberal arts college, according to US News.
Every CS major has to take a software engineering class his or her final year, which consists of learning real-world methods for software development and completing a semester-long group project. It sounds almost exactly like what Joel describes. My group produced a few thousand usable lines of Java code, on a schedule, with documentation, requirements, and the whole nine yards:
I had a similar experience in my undergraduate program (and I graduated over 8 years ago). In second year, everyone has to take a software engineering course that consists of completing a full waterfall model group project. It was complete with interviews with the clients, every scrap of planning documentation, and of course the code itself. Each deliverable was due every 2 weeks and everyone had to work their ass off.
Future courses covered agile methods, version control, bug tracking, database design, and so on.
I actually feel a bit sorry for people who end up going through a program like Joel describes -- but certainly good schools are out there and they're teaching things programmers really need for the real world.
Every CS major has to take a software engineering class his or her final year, which consists of learning real-world methods for software development and completing a semester-long group project. It sounds almost exactly like what Joel describes. My group produced a few thousand usable lines of Java code, on a schedule, with documentation, requirements, and the whole nine yards:
http://egroup.definingterms.com/
An overview of the course is available online:
http://cs.calvin.edu/curriculum/cs/262/kvlinden/