Different skills take differing amounts of time and experience to master. In general, professional musicians start playing in or even before high school. No one shows up at a university with no experience and expects to become a concert pianist or cellist. The expectation is that it takes at least 5-10 years of experience to become a top-notch musician. The counterexample offered of a surgeon having been expected to operate on his pets in high school is also silly; while the expectation is that experience with musical instruments is gained starting in the early teens, that same ten years of experience for surgeons begins in college and extends well beyond, into medical school, internship, and then residency. So it's incorrect to compare the three fields.
Part of the difficulty these academics are having is that "computer science" encompasses many different fields. Some academics are really borderline mathematicians. Some students really belong in a vocational school, because the general knowledge of computer science most university programs teach is not needed nor useful if your plan is to go write business logic in Java for some megacorporation. Those students would be much better served by a 1- or 2-year program that focuses on the specific technologies they'll be using. And there are other students who plan to make programming a career in any of several different fields, each involving its own specialised tools, terminology, and mixture of theory and practical knowledge. All of this lives under one roof in most universities. Complicating matters further, students show up with many different levels of experience; some may have grown up with little access to computers, while others may already be accomplished programmers in the open source community looking for a degree and the opportunity to gain advanced knowledge of theory. It will never be possible to come up with a plan for the first two semesters that works for all of these cases. In that sense, the one-size-fits-all approach is indeed broken. But that is completely different from insisting that "up-or-out" is wrong, or that the basics need to be introduced even more slowly or in even more courses.
Students in most programs get 2 semesters of extremely basic instruction. This covers things like what variables, expressions, and functions are, the concepts of sequence, decision, and iteration, the basics of syntax in one or two languages, what memory is, and maybe some simple data structures like arrays and structures. Anyone who comes in with any programming experience at all, in any language or context, already knows at least 90% of everything taught in these courses. Forcing everyone to take them constitutes a tax. Value is given in the form of tuition and time spent but none is received in the form of increased knowledge. Students with no experience may well benefit from these courses, however. To suggest that they're "too fast" is ridiculous, however. In those two semesters, students will receive about 80 hours of lecture instruction, 2 300-page textbooks, usually at least 1 textbook with practical exercises in it, at least 15 hours of structured practical instruction from teaching assistants, generally unlimited access to computers, compilers, interpreters, and other tools as needed, unlimited access to a library with thousands of relevant documents ranging from trivial to cutting-edge research, access to a peer group, and dozens of office hours with the instructor and teaching assistants. It's silly to suggest that in 8 months a committed student with access to all those resources cannot pick up the basics of computer use and programming in at least one high-level language. And that's really all that's expected; there are separate courses for computer architecture, advanced data structures, operating systems, compilers, graphics, linear algebra, logic, calculus, programming language theory and features, algorithms, networking, databases, and so on. No one is expecting a student completing those two courses to be a master of anything. No one is suggesting that a student with those two courses completed should receive a computer science degree. And no one is suggesting that a student should be ready to get a job as a programmer after completing those two courses. They are introductory, covering the basics that other coursework will leverage to teach more advanced concepts and practices.
A student who can't successfully complete these two courses in 8 months needs to reevaluate his or her plans. That's not at all unusual for freshmen; most students change their field of study at some point. Some of those students may decide computer science is not interesting to them, or that they're ill-suited to it. Others may find that they lacked commitment and dedication and should repeat one or both of the courses with greater focus. But someone who is genuinely trying and using all the resources available and still can't grasp these basic concepts after 2 years has to face the fact that he or she simply is not going to master computer science or programming, regardless of what his or her plans were after graduation. Here's where the opportunity arises to make the right analogies with other fields. Not everyone is cut out to be a surgeon or master musician. No amount of training, practice, and study will ever put a mediocre violinist in the first chair at the San Francisco Symphony. So too are there people who simply aren't cut out to be programmers. No one knows why. Maybe that CS1 dropout will end up in neuroscience and be the first to figure it out. That's a much better outcome for everyone than extending the introductory material across two years, boring the more advanced students to tears and confiscating their time and money while stringing along the inevitable failures for a second wasted year instead of letting them know early on that this field of study isn't right for them so they can move on to something else.
While we're at it, we should be doing what other engineering disciplines do and specialising job functions and programs of study a bit more. For example, a graduate with a degree in civil engineering is a full engineer, with the knowledge required to design a wide range of structures. He or she can then take the professional engineer's exam, conferring mastery and opening doors professionally. That is not the same line of work as steelworker, concrete pump operator, excavator operator, or welder. All of those functions are necessary to construct something, but no one pretends that an engineering degree is needed to operate an acetylene torch, nor does anyone suggest that acetylene torch operators are qualified to design a dam. One way to solve this problem would be to split off computer engineering. A few schools do this already. Unfortunately, in most cases the differences from computer science are superficial, usually consisting of dropping a theory course and adding one or two from an electrical engineering program. This is not necessarily bad for the computer engineering students, but it leaves far too much emphasis on practice for true computer science. Better would be to move computer science into the Mathematics department, which is usually separate from Engineering. All engineering disciplines require some study of mathematics; computer engineering is no different. That gives us true computer engineers, analogous to civil engineers. But it still leaves most employers hiring them to operate acetylene torches. We solve that problem with vocational programs designed to teach students the practical aspects of basic programming in commonly encountered environments. This is where students go to learn about EC2 APIs, writing and deploying J2EE apps, customising PeopleSoft, or writing apps for iOS. Such a program needs an abbreviated version of a computer engineering degree, so that the students can understand the tools they're working with. But it does not require much theory, math, or advanced concepts. These tasks tend to be quick and dirty; get it done now, deploy it for a quick buck, and move on. To the extent that more thought is required, a computer engineer or a team of them should be involved in that, breaking down the project into tasks that can be done by people with practical knowledge but little understanding of engineering principles. This is usually what "good" programmers or architects end up doing anyway; the fiction lies in the fact that they have the same apparent credentials as the functionaries who can't be trusted to choose a sane algorithm, do basic design, or create an interface. It's unfair to the "architects" who studied and mastered computer science to force them to compete for jobs with "functionaries" who lack that knowledge, and it's unfair to the "functionaries" to waste 4 years of their time and stick them with $150k in debt just to qualify them for menial jobs. A building, bridge, or dam can collapse because of a bad weld, or because of bad design. So too can a computer system fail because of an off-by-one error or a misdesigned interface. For these reasons, we require that civil engineers understand the strength of various welds in different materials, and that computer engineers understand how to test modules and identify common errors by inspection or from QA data. But we do not require that welders understand fluid dynamics, nor do we give civil engineering students 4 semesters to figure out statics. Why haven't we reached the same point with computer engineering programs?