Your first point is 100% spot on.
Your second point deserves a caveat: CS does mean something at colleges/universities. they almost all follow the ACM model curriculum:
- CS I -> CS II -> Data Structures
- Discrete Math and Calculus I
- A smattering of available electives from a few fairly uniform buckets (SE,DB,OOP; OS,PL; ML/AI; theory,algorithms).
Contents of courses change (true in Math also! Biz Calc vs. Eng Calc vs. Honors/Advanced Calc). But overall shape stays the same. Can't guarantee outcomes, but can guarantee intent.
Unlike colleges/universities, at the national level, CCs have a serious cruft issue in CS/IT. It's totally impossible to tell what someone might know from the name of the degree program alone. Not even overall shape of curriculum is obvious.
IMO there's a simple solution: CCs nation-wide should pare down everything into a few specific named degrees:
1. Associates in CS Foundations: basically ACM without electives. Designed for transfer to a BA/BS.
2. Associates in Software Development: the non-math portion of ACM + some pragmatic courses (e.g., databases and web dev). Can have various version of this marketed as "AS in SD with Emphasis in ___" where ___ is chosen according to local/regional labor market. E.g., most bootcamps are somewhat like "AS in SD with an Emphasis in Web Development using <stack here>".
3. Associates in Information Technologies: catch-all for the stuff that doesn't even fulfill the non-math, non-elective portion of the ACM model. So "VBA scripting", "Networking aka CISCO certs", "Database Administrator aka Oracle&MS certs", "Applications aka MS Office+Web publishing", etc. degrees currently offered by CCs. Again, various versions can be marketed as "AS in Information Technologies with Emphasis in ___"
These issues might not be recognizable to folks in states like California with amazing CC systems, but in most of America, just figuring out which of the half dozen similar-sounding "IT/CS" associates degrees you want is a serious problem. And very often the answer is "none" because all gazillion of them fit into bucket #3 and you're really looking for bucket 1 or 2.
Well, you can say the same for pretty much every curriculum ever: "we don't need a named degree, just have students figure out what courses they need to take".
Concretely, here's what happens in practice. A student does not know what to take and tells their counselor they are interested in transferring into a four-year CS degree. So student then ends up in:
- standard college prep courses (Algebra, Calc, and liberal artsy stuff), and
- some totally random stuff for the CS part. Might be programming. Might be VBA (won't transfer) or Java (might transfer). Might be a CISCO prep course. Who knows! And unless the student knows and fights, they end up wasting time.
Making a separate track that's explicitly "pre-college CS" avoids this confusion. And after all, part of the value add of a formal education is that someone who knows what you need to know organizes the curriculum for you.
So what you say is true, but there are still strong advantages for both the student and the institution to having a separate, explicit pre-college track.
One, part of the problem is that I've found "computer science" and "software development" get shoved under the umbrella of the "computer technology" departments of community colleges, rather than the math or engineering departments. Consequently there's a sense that software development is an extension of IT rather than an engineering practice. That might be true in a lot of settings (e.g. making VB widgets), but I'm not sure it's great for producing generalist developers. Frankly, I think it also lends to unqualified people leading departments, hiring instructors, and designing a curriculum. Anecdotally, one semester I took a discrete math class (through the math department) and a data structures class (through the CIS department); I ended up learning a lot more about data structures in the math class, and the programming project I did for the math class was much more instructive than any of the projects in the CIS class.
Two, across all institutions (boot camps, community colleges, universities) there doesn't seem to be a coherent curriculum on how to teach this stuff [1]. With math, english, economics, etc. the lower division classes are basically the same everywhere. Even if you think the way we teach subjects is kind of weird (as I do with math), everyone knows what "Calc II" means, or what's taught in an intro to microeconomics course. With software, there's no consensus on where to begin. Is it an infusion of theory and practice ala the SICP-based courses (MIT and Berkeley)? Intro to programming (Stanford)? A class where you learn how to use an office suite (a lot of community colleges)? Git and HTML/CSS (bootcamps)? [2] As a result, it's not surprising that individual classes don't line up. Maybe this is fine for the case where students will only ever study at one school, but for a lot of students indenting on transferring to a university (or anyone trying to evaluate a curriculum) it's quite cumbersome.
Not being an educator (and being mostly self-taught for software development), I'm not sure what the best approach is. Personally, I think a combination of theory/assignment based classes supplemented with longer-term project courses is probably the way to go. The former helps in presenting a general area or class or problems, and how to solve them, and the latter might help with exposure to the diversity of practical software development.
[1] I say "stuff" intentionally. Even the scope of "software development" is huge and hazy
[2] I could be wrong with the specifics on schools here :)