|
As someone who's attended a community college both in my undergraduate career and again in preparation for grad school, this is something I think about quite a bit. Overall I'm pretty happy with my experiences studying at community college, and I'm of the mind that for most subjects, you can get a good education there. While I think it might be possible to get a decent education in preparation for a software development career at _some_ community colleges (like the technically-focused ones mentioned in the article), I suspect that's not the case generally. I think that has to do with two things: 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 :) |
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.