

Ask HN: Modern Day CS Curriculum - tg103

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.<p>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.<p>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.<p>Has anybody read a particularly interesting paper/blog/whatever that talks about different approaches/thoughts people have had regarding computer science education?
======
Kliment
Try "The Perils of Java schools" for the classic.
[http://www.joelonsoftware.com/articles/ThePerilsofJavaSchool...](http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html)

------
buro9
I'm in a C++ school mostly. They've just finished a transition towards a
modular curriculum and exam system. We're also doing Groovy for the OODP
module but I'm finding that there's a split between a well-established and
very high standard for teaching C++ and a very ill-disciplined and poorly
taught Groovy module.

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.

------
djb_hackernews
If your CS Program is teaching languages, then it's not a CS Program.

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.

------
Ezra
Page "Selling Haskell for CS1"

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.

------
jonsen
You are touching a controversial topic. Everybody knows we are not generally
doing it right in computing education. It's a world wide mesh of trial and
error. For a broad overview of the problem space you might find this
informative [PDF]:

[http://www.acm.org/education/future-of-computing-
education-s...](http://www.acm.org/education/future-of-computing-education-
summit/FoCES_web.pdf)

