This is another one of those interesting areas to explore in CS education that comes up a lot in conversation. Of course, there is no one path for everyone and there are many people who would thrive and reach greater levels of proficiency and success outside of this sort of environment.
For my bit, I received a 2-year degree in a programming-centric degree program (systems programming) and my 4-year degree in a CS-focused degree program, which placed a much heavier emphasis on theory and models. Coming from my first college, I was upset over having to 'repeat' a lot of subject areas, only to find out that under a different focus these courses offered a better perspective over areas I was missing understanding in.
Looking at the two years I worked as a TA and the time I have spent assisting in an applied programming student organization, I've come across many students who have complained about not being able to skip ahead to the more advanced materials. Several complain vociferously about having to take the theory and logic courses. Others complain about the course in low-level programming (C -- which is not even low-level) or systems programming. Most of the time that I've seen, this is a result of simply not understanding the concepts as result of a lack of foundational knowledge. Mathematics is an area continually complained about amongst the newer students as a requirement for 'programming'.
I've worked with students who wanted to push straight to the senior-level courses while having no real understanding of basic data structures, fundamental algorithms, core programming structure concepts (ie. have never learned/used recursion), or even had any exposure to taking the time to structure their thoughts before diving into the code.
I've always been more of the 'renaissance man' when it comes to education, but I've learned to appreciate and I do support the balancing that universities engage in, in order to provide a core CS framework for their degree programs. University degrees should not be able gaining the information needed to go out and program, but should be focused more on these topics involving theory and the mathematical underpinnings of the field. This should involve some levels of useless, pedantic academia.
While we do not offer the ability to challenge courses in this department, one area I do highly push students to get involved in is laboratory research with professors. We had two undergrads with no prior systems education build and write the drivers for custom robots recently, after they came in looking to get involved in such a project. Many professors, in my limited experience, are eager to see students who are looking for additional challenges in their studies and are only too happy to provide additional experience in desired areas for them.
I certainly would support both microeconomics and some form of introductory systems course (low-level programming/architecture) for any CS program.
Unfortunately, the other end of this CS guarantee is that there are not enough credit hours to provide a foundation that everyone would agree with. University restrictions prevent 'high-unit' majors from exceeding the credit hour requirement for a degree.
We just went through a long process that ultimately resulted in adding a requirement for CS students to take a course which involves concurrent programming. Unfortunately, this came at the cost of removing a requirement for numerical analysis. Even with this update, you can still graduate without ever hearing the term 'OSI Model' or ever being exposed to anything dealing with the interwebs.
There are, however, amazingly good opportunities to expand the horizon outside of the department that also nicely tie into general education requirements, if students are made aware of them. In addition to economics, philosophy is another rather nice area to take courses in. Our philosophy department has a rather nice course in symbolic logic.
For my bit, I received a 2-year degree in a programming-centric degree program (systems programming) and my 4-year degree in a CS-focused degree program, which placed a much heavier emphasis on theory and models. Coming from my first college, I was upset over having to 'repeat' a lot of subject areas, only to find out that under a different focus these courses offered a better perspective over areas I was missing understanding in.
Looking at the two years I worked as a TA and the time I have spent assisting in an applied programming student organization, I've come across many students who have complained about not being able to skip ahead to the more advanced materials. Several complain vociferously about having to take the theory and logic courses. Others complain about the course in low-level programming (C -- which is not even low-level) or systems programming. Most of the time that I've seen, this is a result of simply not understanding the concepts as result of a lack of foundational knowledge. Mathematics is an area continually complained about amongst the newer students as a requirement for 'programming'.
I've worked with students who wanted to push straight to the senior-level courses while having no real understanding of basic data structures, fundamental algorithms, core programming structure concepts (ie. have never learned/used recursion), or even had any exposure to taking the time to structure their thoughts before diving into the code.
I've always been more of the 'renaissance man' when it comes to education, but I've learned to appreciate and I do support the balancing that universities engage in, in order to provide a core CS framework for their degree programs. University degrees should not be able gaining the information needed to go out and program, but should be focused more on these topics involving theory and the mathematical underpinnings of the field. This should involve some levels of useless, pedantic academia.
While we do not offer the ability to challenge courses in this department, one area I do highly push students to get involved in is laboratory research with professors. We had two undergrads with no prior systems education build and write the drivers for custom robots recently, after they came in looking to get involved in such a project. Many professors, in my limited experience, are eager to see students who are looking for additional challenges in their studies and are only too happy to provide additional experience in desired areas for them.