
The changing face of Computer Science education - ot
http://matt-welsh.blogspot.com/2011/06/changing-face-of-computer-science.html
======
drblast
"Still, I think it's great to attract students with a fun, application-
oriented course that gets them excited about the field, and hit them later
with the more abstract ideas that might seem less relevant at the outset."

Where is the fun and easy intro to BioChem course so that we can entice more
people to become doctors? How about an "Intro to Medicine" where we do fun
stuff like play Operation and dress up in scrubs?

All you're doing is postponing the high attrition until the second year, when
the students learn that you bamboozled them with a cute and fun intro course.
You can, and should, offer that course to all comers, but don't pretend like
CS is just a continuation of that.

If you visit a few military recruiters, the Air Force will try to dazzle you
with technology and exciting job opportunities and the Navy will tell you how
much money you can get for school but gloss over the "you're on a ship for six
months at a time and your job is to sweep it" part. But the Marine recruiter
will say, "The Marines aren't for everyone. It's really hard, but we're the
best."

The Marines have no problem meeting their recruiting goals, and I'd argue this
is a much more honest and effective way to get people on board who are going
to be in for the long haul.

~~~
mechanical_fish
So, I agree with you at some level -- people who think they want to _major_ in
CS should be hit with the real thing ASAP, just as aspiring chemists get hit
with Organic Chem and aspiring physicists get hit with the wave equation.

But:

 _Where is the fun and easy intro to BioChem course so that we can entice more
people to become doctors?_

Nobody dies when a literature major builds a PHP website in their spare time,
or hacks together an iPhone app.

Moreover, there _are_ fun and easy intro medical courses: They're called
_first aid courses_ , and everyone should probably take one.

Lots of majors have an intro class that emphasizes fun and higher-level
perspective at the expense of the details. They often have demeaning nicknames
("Rocks for Jocks", "Physics for Poets"), which is unfortunate, because I'd
far rather see people have one superficial course in a subject than know
nothing about it at all.

~~~
absconditus
"I'd far rather see people have one superficial course in a subject than know
nothing about it at all."

This is called high school.

~~~
ecuzzillo
High schools can be arbitrarily bad, and so it's customary for most colleges
to have remedial courses, like Physics for Poets, for those students coming
from high schools that didn't provide that.

~~~
absconditus
Why should such a student be admitted to college?

~~~
ecuzzillo
It's not a student's fault if their high school is arbitrarily bad. You can
sometimes tell that a student is smart and their high school sucked. Such
students tend to get even smarter than you thought they were once they get to
college.

------
zwieback
This discussion seems similar to the one English departments have about
whether you should still read the classics or not. Isn't the point of _higher_
education that it's "higher"? If a high school student can write a blockbuster
iPhone app then maybe universities don't need to teach that.

I totally agree with the part about making the curriculum fun and show the
applications of the "arcane" theories of CS but I don't think we should
abandon the teaching of classic CS.

~~~
skidooer
Colleges transitioned from being a place of higher learning to a place "where
dreams come true" several years ago. Preparing your students to build the next
Angry Birds or Facebook instead of reimplementing a search algorithm that has
been implemented a million times before is much more in line with the goals of
both parties. A strong foundation in CS is not necessary, or even important,
when your goal is financial success.

I do agree that the fundamentals are very important for those who are
interested in pure academic pursuits. It is very unfortunate that college has
become the goto place to get a job, not a place to learn. But the truth of the
matter is that the vast majority are only in class because they are looking
for future wealth. Colleges, being businesses, will naturally tend towards
catering to their customers.

The good news is that with the proliferation of the internet, academics can
now learn about CS fundamentals even if the formal CS programs go into
decline. Of course it is not too late to fix the education system, we just
have to get past the idea that college equals job and return school back to
its roots of a place to research and study.

~~~
nlawalker
No one is going to get past the idea that "college equals job" until it's not
true anymore.

The conundrum we're in now didn't start with higher education catering to
customers who wanted future wealth. It started with employers offering high-
paying jobs realizing that higher education was a sign of all the qualities
they wanted, so they started mandating it. Universities adjusted accordingly.

I'm pointing out the obvious, of course, but it's because I've seen a lot of
people say things like "we need to get over this idea." That's not going to
happen until there is a ready supply of high-paying jobs that don't require
college degrees, or until someone finds a method for achieving a high-paying
job that doesn't require college but is just as straightforward and
successful.

~~~
skidooer
I'm not sure that it is true. There is no data I have been able to find that
supports the claim and there has been several articles on HN lately that
strongly support the opposite view.

The best I have been able to find on the matter is one study that shows a
loose correlation between those who have a formal education tend to have a
higher income. Which, of course, says nothing about the effect of the
education on the resulting job.

------
michaelchisari
_At Harvard, countless undergrads taking the introductory CS50 class are
producing games, websites, and iPhone apps_

My hunch is that the people doing this had already self-trained before taking
this course. I'd be really surprised if someone with zero background in
programming could take an introductory source like this, and start producing
working software.

~~~
drunkpotato
I wouldn't be surprised at all. I think the traditional CS curriculum, at
least at my university, induces learned helplessness, so that by the time
students get to a 300-level course they're so convinced they can't do a
project they don't even try.

I taught an intro to comp sci summer course that was evenly split between
over-achievers looking to get the intro course done before starting their
freshman year, and demoralized post-freshmen who had failed the course during
the regular year.

By the end of the 9 week summer session, they all had a working Minesweeper
game written in Java. I set out levels of achievement they could attain, from
very basic working mechanics (including a timer) up to marking a space
questionable and revealing all blank spaces surrounding a blank. I
demonstrated how to do that using recursion, which our curriculum doesn't even
allow teaching until 3rd year, but which my students didn't seem to have any
trouble with. I believe recursion is actually a very natural way of thinking,
but we prime students to fail at it because all they hear before learning it
is that "it's so hard."

I see our curriculum, at least, as one of the biggest hindrances to learning
CS. The students who succeed do so despite the adversity of a hostile
curriculum.

~~~
ColinDabritz
I think the 'diving in and figuring stuff out' approach is very empowering as
well. The traditional 'hang ups' are pointers and recursion. I am curious what
you mean that recursion is a natural way of thinking. Can you expand on that?

(I found that recursion made sense to me as well, but that seems like
selection bias. When I try to explain it I emphasize thinking that the problem
is already solved. This chunk is "somebody else's problem" even if it happens
to be yours later. Ignoring the problem and breaking it down. Mixed success so
far)

~~~
drunkpotato
Some problems are naturally better defined recursively than iteratively; the
Minesweeper blank space uncovering algorithm is a prime example of that. "Push
this button. If it's blank, execute push button for all surrounding buttons."
Yet because the word "recursion" is primed with "hard" in the minds of
undergrad students, some of them shut down on the word and don't attempt to
figure out the problem. Instead they remember "recursion is hard, we'll cover
that later".

Assuming subproblems are solved is a more sophisticated way of thinking about
some recursive algorithms, like sorting. I don't think that is quite as
naturally easy for most people. But I think the difficulty there is in the
layering of concepts, not because the algorithm is recursive.

------
p4bl0
I only partly agree with the author, but I think that using something like
Racket[1] in the first CS course is the good balance between the two extremes.

For the "fun CS" part: Scheme really doesn't get in students way (no syntax to
learn besides "balance the parenthesis) and since Racket come with "batteries-
included" as they say, you can start drawing things and making little apps
(web or desktop) very quickly. I'll also add that the documentation is
examplary, which is really something important in this case.

For the "real CS" (lacking of a better word) part: first, there are really
good introductory book which use Scheme like SICP, The {Little,Seasoned}
Schemer and HtDP (which is written by the Racket team). Second, the Racket
platform support many languages like C[2] and even ALGOL 60[3] which is very
close to the kind of pseudo-code you'll find in algorithm books like the
famous introduction to algorithm.

For everything that isn't directly programming-related, well, it doesn't
change anything. Execpt maybe for the basics of lambda-calculus which students
would grasp easier if they have used lambda expression before, so Scheme is
still a win here.

[1] <http://racket-lang.org/>

[2] [http://planet.racket-
lang.org/display.ss?package=c.plt&o...](http://planet.racket-
lang.org/display.ss?package=c.plt&owner=jaymccarthy)

[3] <http://docs.racket-lang.org/algol60/index.html>

------
josephmosby
I took the first MIT OCW course in electrical engineering and computer science
(6.00) from Fall '08 to get my feet wet in computer science. I was not a CS
major in college, but after reading through the syllabi of their courses and
watching a few lectures, I think I have a feel for what they're going for.

Their intro course teaches computer science in Python, which is one of the
simplest fully-featured languages to learn. It goes through programming
structure and syntax without getting too much into the arcane. It piques the
interest without scaring the new student off. If they decide not to continue,
they now know the first bits of Python and can start learning more on their
own.

If they do like it, however...the next level (6.01) is taught in Scheme, as
best as I can determine. (MIT students correct me if I'm wrong) It rehashes a
lot of the same programming concepts taught in the Python course but adds more
on top.

I think colleges would benefit by asking if their students just want to
program, or if they want to learn computer science.

------
mncolinlee
As an English major programmer, I still get a kick out of Eric Raymond's
classic quote on the matter of CS education:

"Computer science education cannot make anybody an expert programmer any more
than studying brushes and pigment can make somebody an expert painter."

Perhaps this is changing? When I was still in school, I managed to outprogram
all the CS majors in my elective programming and sys admin classes as an
English major. They all wanted to program to earn the money, but never adopted
the programming mindset or learned new skills outside of class.

It reminds me of parents who dump their kids at school, expecting teachers to
simply cram reading ability into their kids in <50 minutes a day without any
help from the parents.

------
Apocryphon
Every time we have one of these debates (as well as offshoot debates, such as
having separate Software Engineering majors in addition to a CS department),
we get into the whole fight about teaching practical skills in universities
demeans such fine institutions, turning them into little more than vocational
schools.

Let this be the opening comment for that debate. _Does_ it demean universities
from teaching theory and structures and so on with Scheme courses, and turn
them into industry-chasing Java schools?

------
adamdecaf
This is similar to something I experienced in trying to start a computer club
at my university. I was the president of the club last year and I was trying
to involve people with what, I guess, is classified as "hard CS". I wanted to
get some students together to build some complex but formidable piece of
software.

However, most of the feedback I received was that "it would be boring" or "too
much work", even when I gave them the chance to pick the project. Instead of
making something they would rather host LAN parties and such.

I however, wanted to dabble and give students of all experiences real exposure
to CS. Not have an official gathering of video games, but maybe, to create a
game and show what CS is like.

------
amichail
It's hard for CS to adapt given all those professors with tenure.

It's better to start a whole new field that is more applied.

~~~
drunkpotato
I don't necessarily see the problem as tenure, but that "computer science" has
always been an ill-defined discipline with strange bedfellows. In my
department the professors work on such different areas that they can't even
communicate, which makes agreeing on a common curriculum difficult. The theory
guys say "oh, of course theory is fundamental to computer science, everyone
needs to take it." And then the systems profs say the same thing about
networking, databases, and OS. Then you have the GOFAI (good old-fashioned AI
-- logic and symbol-pushing) and machine learning crowds, who operate
somewhere in the middle of theory and practice.

I'm sure I've left some areas out. I think how to unify a CS curriculum in
light of such diverse interests is a hard problem worthy of study and debate,
and dismissing the problem as "tenure" does not provide a useful frame for
addressing the problems.

~~~
svdad
The ML / probabilistic AI people think they're the latest and greatest, so
they don't talk to anyone else, certainly not the GOFAI people, and especially
not the statistics department.

~~~
lurker17
Heh-heh. Yesterday I was telling my co-worker that veered off-track in my CS
education because I chose a mentor who practiced GOFAI, whereas my peers who
worked on ML were much better oriented to a rewarding career in computer
intelligence.

I'm confused when you say that "ML / probabilistic AI people" don't talk to
the statistics department, though. ML is all about statistics. Maybe the
statisticians don't talk to the ML researches because statisticians care more
about manufacturing, medicine, and math then they care about AI.

~~~
svdad
I was confused too and still am. But the core ML course in my CS department
gave a list of other "related courses" at the end of the course. Despite the
fact that our Stats department has umpteen learning-related courses, not one
of the courses on that list was in Stats.

In my experience the "not talking" definitely originates from the ML side,
although there's probably some of it in both directions.

The first course in the Stats learning sequence had a tongue-in-cheek listing
of differences between it and the CS learning course:

<http://www-stat.stanford.edu/~tibs/stat315a/glossary.pdf>

------
arethuza
The "great ideas" CMU course mentioned in one of the comments looks pretty
interesting - ideal stuff for getting a taste of CS:

[http://www.cs.cmu.edu/afs/cs.cmu.edu/academic/class/15251/Si...](http://www.cs.cmu.edu/afs/cs.cmu.edu/academic/class/15251/Site/current/Calendar/calendar.html)

------
Apocryphon
I have to say, doesn't this story go hand-in-hand with the business education
article?

<http://news.ycombinator.com/item?id=2653331>

------
scythe
At Georgia Tech, the CS program has 'threads'\\*. You can choose to study
theory, or you can study graphics or whatever other practical discipline
strikes your fancy.

I guess it's not perfect, but it seems to work.

~~~
chubbard
Yes but all of that was after you had gone through most of the weed out boring
stuff (at least that was how it was further back than I care to admit). You
really had to be committed to it to stick around to get to the fun stuff. But,
I think what Matt is really saying is maybe CS is backwards. We could boost
people's interest in doing the fun stuff up front and then layer on the
foundational underpinning once they've got your attention. I bet if people are
really excited about doing what he's saying they might be more inclined to
stick around for the really hard stuff. But, even if they don't there is merit
and growth that happens in learning the practical or, as academia might see
it, mundane things.

------
natural219
This is a minor point, but I didn't feel that the Social Network's depiction
of hackers was glossy or inaccurate. I was actually very impressed by that
aspect of the movie.

~~~
cstavish
For a film geared towards the general public, its technical accuracy was
laudable—not perfect, but better than I originally expected.

------
absconditus
So basically he is pleased that Harvard is turning into DeVry and not actually
teaching CS.

~~~
Apocryphon
Where does high-minded ivory tower academic-oriented theory end, and code
monkey industry-oriented practicality begin with CS?

Also, he actually addresses your criticism: _Computer Science is not a
vocational program, and it's important for students to graduate with a deep
understanding of the field. It's true that you can do amazing things with
existing languages and tools without learning much about the deeper theory and
foundations. Still, I think it's great to attract students with a fun,
application-oriented course that gets them excited about the field, and hit
them later with the more abstract ideas that might seem less relevant at the
outset._

