8 ms·
The changing face of Computer Science education
- zwieback 15y agoThis 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.
- skimbrel 15y agoAgreed -- 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".)
- amichail 15y agoI 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.
- arethuza 15y agoI'd argue that those kind of course are precisely what higher education needs less of.
- amichail 15y agoWhy?
- arethuza 15y agoBecause 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.
- meterplech 15y agoI 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.
- cube13 15y ago>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.
- zwieback 15y agoI 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.
- timthorn 15y agoI think the appropriate term is a polytechnic.
- skidooer 15y agoColleges 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.
- joebadmo 15y agoThe 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.)
- coliveira 15y ago> 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.
- nlawalker 15y agoNo 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.
- arethuza 15y agoThe "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/Site/current/Calendar/calendar.html http://www.cs.cmu.edu/afs/cs.cmu.edu/academic/class/15251/Si...
- amichail 15y agoIt'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 15y agoI 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.
- arethuza 15y ago"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.
- o_nate 15y agoMy 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.
- scythe 15y agoAt 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 15y agoYes 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.
- josephmosby 15y agoI 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.
- deleted 15y ago[deleted]
- drblast 15y ago"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.
- joebadmo 15y agoSorry, 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.
- dagw 15y agoMy 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.
- mechanical_fish 15y agoSo, 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.
- natural219 15y agoThis 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 15y agoFor a film geared towards the general public, its technical accuracy was laudable—not perfect, but better than I originally expected.
- michaelchisari 15y agoAt 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 15y agoI 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 15y agoI 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)
- adamdecaf 15y agoThis 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.
- absconditus 15y agoSo basically he is pleased that Harvard is turning into DeVry and not actually teaching CS.
- Apocryphon 15y agoWhere 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.
- lurker17 15y agoMatt 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.
- deleted 15y ago[deleted]
- Apocryphon 15y agoEvery 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?
- Apocryphon 15y agoI have to say, doesn't this story go hand-in-hand with the business education article? http://news.ycombinator.com/item?id=2653331 http://news.ycombinator.com/item?id=2653331
- p4bl0 15y agoI 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/ http://racket-lang.org/ [2] http://planet.racket-lang.org/display.ss?package=c.plt&owner=jaymccarthy http://planet.racket-lang.org/display.ss?package=c.plt&o... [3] http://docs.racket-lang.org/algol60/index.html http://docs.racket-lang.org/algol60/index.html
- mncolinlee 15y agoAs 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.