Hacker News new | past | comments | ask | show | jobs | submit login
The changing face of Computer Science education (matt-welsh.blogspot.com)
72 points by ot on June 14, 2011 | hide | past | favorite | 57 comments



"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.


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.


"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.


Your high school had a linguistics department? A geologist on staff? An economics teacher? A statistics teacher? A biochemist? An anthropologist? A sociologist? A sign language instructor? An oenologist? [1]

My high school didn't even teach calculus at the time. [2] And I was lucky that they had even had, e.g., a physics teacher who could actually teach physics. [3] Many do not. I know this because if you mention physics to a random college student they will generally tell you stories about their clueless high school physics teacher and how that teacher made them hate physics forever. ;)

---

[1] "Oenology for Poets", though it did not go by that name -- it was colloquially called "the Wines course" -- was the runaway favorite of all the intro courses at Cornell:

http://www.hotelschool.cornell.edu/research/facultybios/facu...

Needless to say, my US high school did not offer lectures on wines. I wonder if the situation is different in France or Germany. ;)

[2] Not that it mattered; My math teacher helped me convince the school to let me take math at the local university instead.

[3] Not that it mattered; My physics teacher was clueful enough to take me aside on day one, give me a copy of PSSC Physics and tell me that when I got bored I should read this book. I was a very lucky high school student to have such clueful teachers.


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.


Why should such a student be admitted to college?


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.


There were not nearly enough teachers in my high school to even teach all the intro level courses I could have taken in college.


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

You wrote it tongue-in-cheek but I would honestly be interested in such a course. Many (most?) students enter college without a clear course of study in mind, and while the sciences and math require more work and discipline than, say, the much maligned English degree, that doesn't mean that the introductory coursework must be so dry and tedious as to scare away all but the most ardent students. If we want to encourage more people to get technical degrees, some "fun" courses could be a good tool.


I took such a course. It was called Bioterrorism and I took it at RPI while getting my Computer Science and Philosophy degree.

The course was mostly writing and discussions, with a lot of high-level talk about things like the factors (biological, chemical and social) that allow different diseases and ailments move, etc. Stuff like that. Quite fascinating, but not too technical.

It certainly lead me to buy more biology books. In fact, due to that course, two of my favorite books were written by biologists. Had I taken the class earlier, I might have become a biologist.


>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?

Maybe more people would remember their high school biology classes if this were slightly the case. Instead, the gen-ed level courses are more like weeding-out courses, and many simply flat-out forget everything because it was such a horrible experience.


My university had 6 month prep courses in math and science for people who wanted math or science degrees, but didn't have the pre-requisite grades or had been out of high school for so long they'd forgotten it all. The course basically covers the last year and a half of high school and the first of half the first 'real' university level courses. If you passed the prep course they'd let you in. Surely you could do something like the for CS as well.


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

We have that: every medical drama on TV, Patch Adams, Awakenings, etc. Not to mention the massive cultural esteem associated with the medical profession.

> How about an "Intro to Medicine" where we do fun stuff like play Operation and dress up in scrubs?

Playing Operation and dressing up in scrubs is intro to medicine. By the time you're in high school, you have a mental image of what a doctor does and roughly what the job entails.

Most people on Earth have zero concept of what programmers do. I've had family members literally ask me if I type ones and zeroes all day. (A: yes. You should have seen their eyes.) People know that we sit in front of a computer. Beyond that... nothing. They don't have any of what's on screen much less what's in our heads. With mathematicians people at least think about whiteboards and equations.

So, yeah, I don't see any harm in a little "Hey, here's a fun intro to what programming is."


Sorry, OT, but this was in fact almost my exact experience with military recruiters. I signed papers with the Marines on the spot.

And I don't know about honest and effective, but it does I think target a specific type of person.


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.


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.


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.


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.


The effects of this vocationalization of the university extend beyond school, too. It used to be that just having a college degree meant a good chance of getting a job in a wide range of fields. Now, though, if you don't specialize or target your degree at a specific field, you're out-competed by people who did.

(Yes, I'm whining about my Comparative Literature degree again, but I pursued that field seriously and rigorously, unlike many of my colleagues, and I feel like I'm being judged unfairly because of it.)


> Colleges, being businesses, will naturally tend towards catering to their customers.

There was a time when people thought about universities as not being a business. Of course, in the present age everything is a business so I shouldn't be surprised at all.


Agreed -- there are still lots of hard theory problems waiting to be solved, and we also still need people to write operating systems and design strong cryptographic protocols. Not everything is as flashy or "cool" as iPhone games, but it's still interesting to some, and those people need to be exposed to these topics so they can find their niches.

(Also, it really bugs me the way he slams his own field -- discrete math is not exactly "arcane".)


I don't think a general CS degree makes sense for most people. What you need are more specialized degrees such as game development, social software, computer graphics, information retrieval, etc.


I think you might be getting too specific, but I'm sad you got downvoted. I think it would be very useful to have 2 tracks of a degrees- a "computer science" more academic and algorithmic training and a "software development" with industry practice, team project focused.

We need the people who can advance the field to get the training to do that- and the people who just want to create the next great company should be able to learn those skills.


>We need the people who can advance the field to get the training to do that- and the people who just want to create the next great company should be able to learn those skills.

The people in the second group should be going to business school or starting their own startup. Either would give them more benefit than a CS degree. A CS degree, even if it's "development" focused, won't give them the skills necessary to deal with management or the business side of things. Ideally, it should give the student the technical and theory background to be effective at any coding job they take. Personal skills are better taught on-the-job or in non-class related, side projects.

I honestly disagree that there should be a separate track. A good developer should have a solid theory background. It should at least cover data structures, computer architecture, discrete math, and algorithm design and analysis. OS design should also be covered, because that takes everything else and combines it into a real-world application. Good developers are aware of all of that, even self-taught ones. In other words, a "software development" degree really requires a superset of what the current good CS curriculums have, because it also includes software engineering paradigms and team project skills.

The real problem with programming degrees is that the industry, as a whole, is still very young. It doesn't have a standard set of best practices to draw on, especially compared to traditional engineering disciplines. I graduated from UIUC in 2007, and the SE course there focused primarily on extreme programming and RUP. Agile wasn't covered at all(and is basically impossible to do in a college environment). So while it was a good course to take for team project experience, the actual topics covered weren't that useful. The other problem is that every development group has a different set of practices, and these almost never actually match the ones taught in school. So while a school might teach a certain set of development practices, the ones that the students actually use might be completely different.


I think both make sense but the specialized degrees could be taught by more application-oriented institutions or part of a different degree (engineering vs. science).

The term "vocational school" sounds a bit derogatory but that might be more suitable for a lot students who are less interested in theory.


I think the appropriate term is a polytechnic.


I'd argue that those kind of course are precisely what higher education needs less of.


Why?


Because I think that higher education is a pretty awful place for vocational training - as people here constantly point out. Of course, if you want to do research or do fundamentally new types of things then a CS degree can be a great place to start - but that applies to a tiny minority of people.


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.


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.


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)


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.


>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.

If you look at "describing", some things are naturally described in a recursive fashion. At least a significant part of thinking is encoding non-verbal ideas in natural language. These include the obvious factorial function, but also such things as the chain rule for derivatives, or the use of subordinate clauses in a sentence, such that a grammatically valid sentence may become arbitrarily long, this achieved by continually attaching further thoughts, the process of doing such being predicated on an underlying -- metahumor.

I think recursion is best explained by doing. This is the definition of the divisor function, you implement it like this, etc.


i think you overestimate the difficulty of producing working software. cs50 requires all their students to produce working software from scratch as a final project. there are always a few very impressive ones from total novices, a ton of good ones, and surprisingly very few horrible projects. these projects are not temperature conversion projects; they are indeed games, websites, iphone apps, etc.


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...

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


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.


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.


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?


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.


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...


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.


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.


"professors work on such different areas that they can't even communicate"

Having worked in an Electrical Engineering department I'd say they had the same problem - it's not so much they couldn't communicate but the hyper specialization that academia encourages means that they just aren't interested in each others domains.


My major was Mechanical Engineering, which is perhaps even more of a grab-bag than CS. Within that one department, we had product design people who could have fit in in the art department, fluid mechanics people who were doing serious number crunching, and so on. For a major like that, maybe a potluck approach is the best you can hope for - offer students a taste of everything and let them decide.

I should also mention that the Intro to ME course was a very popular, hands-on course that let people build little mechanical gizmos with foam core and hot-melt glue guns. So perhaps that's not a bad way to introduce a subject like that.


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.


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.


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


yet the statistics dept is miles ahead when it comes to theory.


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.


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.


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

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


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.


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


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


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.


Matt Welsh left Harvard to go to Google because he wanted more applied science/engineering and less paper research.

I think part of his frustration was that, at Harvard, even though Computer Science sits in the School of Engineering and Applied Sciences(!), it has never been formally split into Computer Science and Computer/Software Engineering.

Many years ago, Computer Science split out of Mathematics in the university taxonomy. The "Java Wars" of the 2000s and the "Facebook Wars" of the 2010s are a manifestation of the fact that Computer Science has grown too large and needs to split.

We have Applied Math that sits between (but overlaps with) Math on one side and Computer Science / Economics / Science on the other. It's completely appropriate for our modern age to have Computer Science, Applied Computer Science, and Engineering as overlapping fields with separate centers.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: