Saturday, November 27, 2010

Eliminate the Computer Science major

I believe we should do away with Computer Science as a field of undergraduate study - at least, the way it's implemented right now.

It's a given that, generally, a Geology major is studying to be a geologist. Likewise, a Biology major is training to become a biologist, and an Art major will probably end up an artist of some kind.

Computer Science students, however, don't go to college to become computer scientists. They go to learn "programming."

Theoretical computer science involves complex math and theory that is useful and interesting and takes a sharp mind to fully comprehend; most undergrads don't care and increasingly are not being exposed to it. Instead, popular languages are being taught in undergraduate courses, with the intention of preparing students for future work (see Joel Spolsky's The Perils of JavaSchools for another take on this phenomenon.)

The sad thing is, having worked one-on-one with several recent Computer Science graduates, I don't believe that they're learning much about programming, either. Students with a passion for programming study it in their free time, work on their own projects, and do most of their learning outside of the classroom. Fresh graduates with a BS in Computer Science and no real experience programming just don't have the skills they need to do anything but grunt work. As an undergraduate Biology student, my first CS course was on bioinformatics algorithms and had several Masters students, and when I was able to implement the algorithms quicker and more efficiently than CS students, I saw how lacking my school's curriculum was.

Solutions thus far have been to dumb down the CS degree by using higher level ("easier") programming languages and teaching less theory and advanced math. I think that aiming to dumb down the curriculum in order to prepare students for a corporate programming career is killing off the pool of intelligent academic computer scientists. The solution? Accept that there's a difference and offer two distinct majors: Computer Science and Programming.

The immediate result would probably be a huge shift of students from CS to Programming. Maybe some CS departments would cease to exist due to lack of interest. Programming students would learn the basics they need to succeed in the corporate world (similar to some "Information Systems Management" programs, but with a more straightforward focus on the technical aspects of development.) But smart CS students wouldn't be hampered by the dumbing down of their programs of study. They'd be exposed to more current topics in research and have the opportunity to take more advanced courses. They'd be allowed to choose from emphasis areas more in line with the current directions of academia. The Computer Science department would be a fraction of its current size but the per capita ability and motivation would go up, and these students would go on to be the brilliant researchers of the future. Their peers in the Programming department could get the high-paying job at the corporation of their choice, or start their own companies.

Let's accept that there's a difference between the two types of student, and start treating them differently.

Edit: Based on comments from several readers, I think "Software Engineering" is a much better name for my proposed vocational split-off than "Programming." Also, this pattern has already been implemented at some Universities, including Purdue (see CS vs. Computer and Information Technology) although as of yet it's hardly pervasive.

16 comments:

  1. At least around here, the schools already do as you suggest. There are two majors: Computer Science and Software Engineering. SE spends more time on the profession of programming while CS spends more time on theory.

    ReplyDelete
  2. My university did as the previous poster says, namely two threads for software engineering and computer science. Neither was set up to turn out programmers, but the end result was people who could BECOME programmers. The problem is that a lot of universities have become vocational learning institutions so you get a very fixed type of person developed. So, there ARE universities that teach the right way, just a lot take the easy way out.

    ReplyDelete
  3. Surely, the undergraduate degree is not vocational. People major in Geology to learn the habits of scholarship and scientific thought and (perhaps) to prepare to pursue further study. People who want to become geologists enroll in doctoral programs.

    I think you completely misunderstand programming languages and their role in instruction when you write that using higher level languages amounts to "dumbing down" the curriculum by making it easier. Nothing could be further from the intent; the goal has been to bring programming to a higher level of abstraction.

    ReplyDelete
  4. I have the exact same idea.

    To get a degree from Computer Science in stony brook requires me to take a lot of courses I would never want to take. For example, software engineering, computer architecture, some courses with software projects...

    So I decide to drop CS in favor of mathematics. If only the major is split into 2...

    ReplyDelete
  5. I completely agree. Computer Science (certainly the programming side) as degree is a complete farce, you can go to any UK university with zero experience in it and study it. If you want to study maths, physics, history, english etc. you have to have studied it for about 12 years. You can learn programming as a 12 year old. As a result there is a massive difference in the people doing the course. They either do a load of programming in their own time in which case the lessons are a waste of time or they have no knowledge in it so they just turn out the pure theoretical crap fed to them by the lecturers.

    ReplyDelete
  6. There's a meta-problem behind this -- the concept of the academic department tends to lock in outdated curricula and inhibit interdisciplinary thinking. Students shouldn't have to choose between CS, software engineering or math just because those are the departments their campus happens to have.

    ReplyDelete
  7. In some ways I agree regarding CompSci vs SoftEng, but as i've moved up in my career i find that I need more theory to solve harder problems. I'm working on video search (finding similar video clips) and this requires solving the k-nearest-neighbor problem efficiently. Efficient solutions involve kd-trees and (recently) locality sensitive hashing. This also requires a lot of horsepower so i'm dealing with parallel and distributed frameworks, and consequently need to understand how things work under the hood (vector clocks, etc). If your just doing business programming or web start up you probably may not need much if any theory, but there are tons of jobs that do, and more theory often means better pay, more job security, and more fun.

    ReplyDelete
  8. Hello !!!! There is a misconception here in CS and IT that the term "Architect or Architecture" describes what their imagination reflects but what has always been for centuries the real domain of the professional design discipline of the "Architect". It is clearly an engineering dicipline usurping another descipline's title. I am sure specific laws in states such as Texas restrict the use of the term of Architect and Architecture to desribe this singularily specific, centuries old professionally recognized discipline.

    I am sure this cloud of deceptive confusion can and should be cleared up and resolved inorder to call an apple an apple and an orange an orange.

    As a licensed Architect in my state, I have fulfilled 6 years of education including a Thesis, payed my 3 + years of dues as an intern (just as a medical doctor would) to accrue required experience prior to taking the national licensing and registration exam.

    I am proud of my own recognized accommplishments even more for my son's as a research engineering scientist with his 3 undergrad Batchelor's degrees in CS, Math, and Physics as well as a MS in Physics. Also, proud for my daughter who is a Pediatric RN with associates degree and BS in Nursing from recognized educational institution.
    They have defined their professional calling in terms that are not deceptively confusing.

    Where as, recruiters and HR's use descriptives to glorify and over - embellish their "bottom line" , "eye popping" ads to attract the bottom line.

    So CS and IT Engineering is what it is and is what is recognized even with those who are licensed PE's who can not call themselves an Architect nor practice architecture.

    Let us place into practice to recognize a higherarchy of reasoning in the selection of respected title(s), descriptives in professions without mudding the line and overstepping legal and historic prescidents.

    ReplyDelete
  9. I have the exact same thought - I actually had a similar post last week: http://goo.gl/MJ1fk

    ReplyDelete
  10. If colleges are going to offer degrees in programming, I'd like to see them hire software programmers to teach the courses. Computer scientists are not necessarily good programmers.

    Some CS profs have never worked on someone else's code, never used version control, never had to tease requirements out of a client, etc. In short, they've never dealt with the challenges that dominate a professional programmer's life.

    ReplyDelete
  11. Note that the *actual* suggestion here is much less rhetorically sexy that the idiotically inflammatory title "Eliminate the Computer Science major". Indeed the suggestion here is quite the *opposite* of "eliminating" anything - the suggestion is to make a *new* major.

    And introducing a scholastic distinction between software engineering and computer science is perfectly fine - just like regular engineering and physics.

    ReplyDelete
  12. I very much disagree with your edit that "Software Engineering" is a much better name than "Programming." Software engineering degrees exist that are far more than "just programming." One example is RIT's undergraduate SE degree which focuses on architectures, designing, testing, etc of systems. Programming plays a very little part of this very excellent degree. (And, for the record, all SE students are required to take advanced mathematics and science courses.)

    In any case, software engineering is its own sub-field that is not computer science.

    ReplyDelete
  13. I'd like to point out that just because some universities are failing to teach proper computer science at an undergraduate level is no reason to get rid of the idea at all - it just needs to be done correctly. At the ANU where I study they teach a high-level computer science undergraduate course which is extremely selective (3-6 students per year, as opposed to the hundreds in software engineering) and taught at a very high level. Its for the sort of students who aren't looking to be programmers, they are looking to be academic computer scientists.

    For reference: http://studyat.anu.edu.au/programs/4710HBCSCI;overview.html

    ReplyDelete
  14. I agree with everything that has been said. CS programs should teach formal science as part of the major curriculum, not "programming" per se. Programming can be the means, but shouldn't be the end.

    I will say, though, that some courses - such as computer architecture, for instance - are useful for CS students, though they do not constitute CS. In the same way, numerical analysis courses can be useful for physicists, but numerical analysis is not a branch of physics. I think CS has the potential to be as interdisciplinary as mathematics, and I think that's what the (near) future holds. We might be there already.

    ReplyDelete
  15. I think there is too much theory in my CS program. Wish they would focus more on software engineering since that is what is popular right now (Web services, software design, databases). Who the hell programs in assembly anymore anyways?

    ReplyDelete
  16. The immediate result would probably be a huge shift of students from Computer Science to Programming. Maybe some CS departments would cease to exist due to lack of interest. Programming students would learn the basics they need to succeed in the corporate world. Thanks.

    ReplyDelete