Ask HN: Modern Day CS Curriculum
I am currently a computer science major at a moderately well known school. The cs program concentrates heavily on Java with a side of C. There is little to no mention of other styles of programming. The focus seems to be halfway between a purely theoretical approach and a purely practical approach, but at the end of the day we learn neither.
I seem to be here at a pretty interesting time though, because the school is currently changing the curriculum quite heavily. This put me in a fun position to try to persuade the school to go a certain direction.
I figured there would be tons of info online about how teaching the Java API instead of core programming concepts is blasphemy, but I really can't find many good resources.
Has anybody read a particularly interesting paper/blog/whatever that talks about different approaches/thoughts people have had regarding computer science education?
5 comments
[ 3.0 ms ] story [ 23.0 ms ] threadhttp://www.acm.org/education/future-of-computing-education-s...
For background: I've been in the industry 15 years already, used PERL, TCL, Java and C# daily in different roles.
I would definitely say that knowing C++ and relating that to Computer Systems (or whatever your hardware/operating systems module is), and then looking at compilers and modern languages from that perspective is the way to go.
Whatever you learn should be transferable. The core concepts of C++ (when taught like C) are pretty universal. Implementing and using various data structures and algorithms is way more important than familiarity with a particular API or language library.
I really dislike the Groovy stuff we're doing because it places an over-reliance on teaching the meta-object and programming that rather than teaching GoF patterns that are easily applicable to any language.
I guess what I'm saying... skip language specific stuff. Have the core concepts taught. Those are transferable, those provide an essence... the real understanding of what happens where and how. That's the stuff that can be taken and applied anywhere.
Joostena, Van Den Berga and Van Der Hoeven "Teaching functional programming to first-year students"
Chakravarty, Keller "The risks and benefits of teaching purely functional programming in first year"
Felleisen, Findler, Flatt and Krishnamurthi "The Structure and Interpretation of the Computer Science Curriculum"
You can get these all off Google Scholar. The papers listed do a good job, in my opinion, of discussing both the good and the bad of a functional approach.
When I went through school, we were taught with a myriad of languages, and when I was finishing up, they were transitioning to a more "practical" java/c++ monoculture. I think that's a bad deal for the students, personally.
Having been a tutor for a first year class teaching (a subset of) C++, I have anecdotal evidence against doing that. There are too many gotchas, and too much rainmaking to make it worthwhile, in my opinion.
Most programs use languages to teach different programming paradigms. For my CS program we used Java for introductory OO, and Data Structures and Algorithms and Scheme for functional programming. After that students were generally encouraged to choose a language they felt comfortable with to illustrate their understanding of the course's topics.
There were some exceptions (Computer Architecture was some ARM assembly, Operating Systems was purely C, Robotics was C, etc.)
If your CS Program is teaching languages, I'd suggest you spend your effort to convince them they need to teach Computer Science concepts instead and not worry about languages.
If your CS Program is teaching core concepts, but you don't feel you are learning how to program, well that is a common misconception about CS. If you didn't get as much out of your OO/functional courses as you would have liked, maybe there is an upper level Software Engineering course you could take? (My program had one that was mandatory)
It sounds like it's somewhere in between, so my suggestion is get them to toss the practical stuff for core/ required classes and offer electives that do teach the practical. If you need help convincing them, just show them course titles/ cirricula from MIT, Stanford, etc.