I think perhaps you could consider schools like MIT closest to the idea you're advocating (makes complete sense to me also, BTW). Smaller schools that can't take the cream of the crop by necessity have to teach around the median student or they'd have most of the class flunking or not learning anything.
Unclear. MIT's introductory CS course used to be taught in Scheme, which in many ways was a grand leveler because people who knew how to program imperative languages had to un-learn many things first. It was still considered quite a hard class.
In the new world order, we have 6.00, which is a "learn how to program" class which is not required for computer science majors (and which many non-6 majors take), and 6.01/6.02, which is the introductory sequence that everyone is required to take. The programming segments of these classes are still relatively trivial for someone with a reasonable amount of programming experience. (But I’ll also note the cover a very broad range of topics, and you’re bound to not know some of the other topics, e.g. EE)
Yeah the MIT approach seems oriented towards fundamentals that will be useful in both EE and Computer Science.
To me, the beginning of 6.01 looks like a thorough review of most of the standard programming concepts using Python. I get the sense of "hey here's this tool, we're going to learn to use it. Try and keep up." Once Python and programming are covered, a whole bunch of programming-related engineering concepts are introduced. 6.02 looks to be primarily about networks and signaling and programming seems to be secondary.
That's what I'm saying they shouldn't do: if your intro class flunks a bunch of students, you need another intro class before your intro class. If students aren't learning anything in a class, let them skip it or test out of it. Maybe this is too expensive, I don't know, I'm dealing with ideals right now.
I don't know if they are still doing it, but 12 years ago the University of Maryland had something like this. They had CMSC106 Introduction to C and CMSC107 Introduction to Unix classes that had no credit towards the major, but allowed those interested a gentler introduction to computer science.
Maybe, but not via requirements. If you don't take a course that teaches you to code, you're expected to pick it up on your own when you need it (most non-EECS engineering majors end up with lots of Matlab coding experience, for example, but there's no class on using Matlab as such).
When I was there, 1.00 was the "learn how to write programs" class, and it's a Civil Engineering class, not CS. 6.001 has been phased out in favor of 6.01 (unfortunately), and I'm sure as a result there's more "learn how to write programs" since they're using Python rather than Scheme.
There are other classes like 22.00 (also offered under many other numbers), "Introduction to Modeling and Simulation," but again they don't expect to be teaching you concepts like loops and conditionals.
On balance, I'd say most people come out of MIT knowing something about programming (even if it's just Matlab rather than a more general-purpose tool), and a decent portion of those learned it on their own.
How is that unusual? All the hard science, math, and engineering majors had taken at least one class on programming. And it's not like the majority of MIT students end up not majoring in some kind of engineering or science major.