How long will there be computer science departments?

When universities began to form computer science departments, there was some discussion over how long computer science departments would exist. Some thought that after a few years, computer science departments would have served their purpose and computer science would be absorbed into other departments that applied it.

It looks like computer science departments are here to stay, but that doesn’t mean that there are not territorial disputes. If other departments are not satisfied with the education their students are getting from the computer science department, they will start teaching their own computer science classes. This is happening now, to different extents in different places.

Some institutions have departments of bioinformatics or biomathematics. Will they always? Or will “bioinformatics” and “biomathematics” simply be “biology” in a few years?

Statisticians sometimes have their own departments, sometimes reside in mathematics departments, and sometimes are scattered to the four winds with de facto statisticians working in departments of education, political science, etc. It would be interesting to see which of these three options grows in the wake of “big data.” A fourth possibility is the formation of “data science” departments, essentially statistics departments with more respect for machine learning and with better marketing.

No doubt computer science, bioinformatics, and statistics will be hot areas for years to come, but the scope of academic departments by these names will change. At different institutions they may grow, shrink, or even disappear.

Academic departments argue that because their subject is important, their department is important. And any cut to their departmental budget is framed as a cut to the budget for their subject. But neither of these is necessarily true. Matt Briggs wrote about this yesterday in regard to philosophy. He argues that philosophy is important but that philosophy departments are not. He quotes Peter Kreeft:

Philosophy was not a “department” to its founders. They would have regarded the expression “philosophy department” as absurd as “love department.”

Love is important, but it doesn’t need to be a department. In fact, it’s so important that the idea of quarantining it to a department is absurd.

Computer science and statistics departments may shrink as their subjects diffuse throughout the academy. Their departments may not go away, but they may become more theoretical and more specialized. Already most statistics education takes place outside of statistics departments, and the same may be true of computer science soon if it isn’t already.

28 thoughts on “How long will there be computer science departments?

  1. I currently work in a bioinformatics group, and have been in computer applications for science for 20 years. I do not think Bioinformatics will be going back to biology, I see it as going back to computer science and biology. As the tools get better, there will be less and less need for people that understand both – there will still biology computer applications, but it will be commercialized and individual labs will not have their own developers. You can already see the trend starting. Statisticians do not write their own stats programs, they buy SAS or download R, in 10 years biologists will be doing the same.

  2. I think we will probably see more interdisciplinary programs with some basic CS (maybe just algorithms and data structures), focused on a high-level programming language like Python or Ruby.

    It is interesting to consider the idea of other departments that are “not satisfied with the education their students are getting from the computer science department.” It mirrors somewhat the situation in industry – what industry wants is programmers who are ready to hit the ground running with a specific technology stack.

    Given that there are immersive training options today (I am thinking of these 10-12 week learn Ruby on Rails or similar programs) that are attracting interest from traditional employers of CS program grads, I would suspect that academic departments that want “applied CS” skills will move towards training their students in the specific tools used in their field (see SAS/Stata/R in the social sciences). Kind of a classic 80/20 situation where the introductory 20% of a CS program will get you the vast majority of the results you would want in an applied field.

    It does make me a bit sad though – while it may be fine to have a limited programming world view, the programmer who has only seen an imperative, dynamic language is armed only with a hammer in a world where occasionally problems that aren’t nails do pop-up. Do “pure statistical departments” look on interdisciplinary departments (bioinformatics or biostatistics) the same way?

  3. tom_b: Universities are in the odd position of compromising between offering a traditional liberal education and being trade schools. As a result, they don’t do either well. Computer science majors can graduate without much of a liberal education and without the practical skills to be a software developer.

    Interdisciplinary studies are at the heart of what it historically meant to be a university. Now we have fragmented multiversities. Part of the reason is a conflict between the interests of students and faculty. Students benefit from integrated studies, but faculty advance their careers by being as specialized as possible. They publish in specialized journals, and their specialized colleagues review their grants and vote on their tenure.

    So interdisciplinary programs are often staffed by specialized faculty. They integrate math and biology, for example, by creating an organization unit that contains mathematicians and biologists. More of a kaleidoscope than a melting pot. That’s changing slowly as mathematical biology is becoming recognized as a new specialization. But most mathematical biology I’ve seen has been either mathematics with a biological gloss or biology with a mathematical gloss.

  4. How many of the great algorithms come from computer science departments? Of the big improvements in algorithms in the last 20 years say. Turbo codes didn’t. Nearly Optimal Sparse Fourier Transform was from a CS department. Most of the linear programming improvements seem to have come from CS departments. The factorization number field sieves come from maths people but that is to be expected.

  5. It is absolute true that Computer Science programs don’t prepare people for programming jobs very well. But I am pretty sure that the same is true of engineers and statisticians.

    Colleges are important, but more if you are interested in leading edge, pie in the sky stuff. Don’t go to college to learn how to put together an e-commerce site. Go there to learn about the latest algorithms to shard your application and the math. behind it.

    As for learning practical skills…. The problem has nothing to do with disciplines, it is far more fundamental. It has to do with our education model. Lectures, classes, homework over toy examples, 30 weeks a year for a handful of years… You just don’t learn that much about anything practical at this rate, except maybe for superficial skills (e.g., writing fancy Hello World).

    Medical doctors have residencies. That’s what we should all emulate. Go spend 5 years with a team of top software developers or industry statisticians, working closely with them. By the time you are done, you’ll have learned a thing or two.

    Well, thankfully, we already have this for programmers. Just go join a big open source project. Work with the people there for 5 or 10 years. By the time you are done, you’ll have a reputation, you’ll have deep expertise.

  6. I thought the first computer scientists resided in electrical engineering departments.

    But possibly you’re talking about computer science pre-history like church, turing, kleene, etc..

  7. This is a comment I left in regards to this post on Google+ when asked what I though. It is probably a bit harsh at the end, but I felt this post was so laughable it deserves it.

    “LOL! I would say he has no idea what he is talking about. This would be one thing is most of our courses were taught to people who were really here for other things. That’s not the case. Most of our students are CS majors who go out and get jobs as software developers. What other department is going to produce the software developers? What is more, demand for those software developers is growing, not shrinking. When companies come on campus, most of them want to talk to our majors as much, if not more than, anyone else. We have to break the bad news to them that we will only graduate ~15 students each year and the competition will be fierce.

    I think our seminar sums things up nicely. In the other STEM departments their seminars have lots of research speakers. We should have some, but our schedule keeps getting filled by companies who are begging to get in front of our majors. Last week and this week it is different consulting firms. USAA is visiting our ACM group. I’m sure Valero will schedule their time soon as well.

    None of these companies want students from other departments. They want CS majors. I would argue that the author of this post has a very shallow and uninformed view of CS to even have these thoughts in the first place.”

  8. I’m remembering one school I went to — a small one — where the best computer science training came from the Physics department, which was also supporting the Biology and Foreign Language departments at the time.

    That said, there was this one music class I took that offered some very different perspectives, which was also interesting…

  9. Mark: I agree that the vast majority of CS majors want to be programmers. They want to learn how to develop software, not become computer science professors. They don’t necessarily want a computer science degree. That’s often the closet fit to what they want.

    But at some schools, the engineering department offers a degree in software engineering. That’s more in line with what future programmers are looking for.

    Computer science and software engineering are not the same. There is some overlap, but not as much as many suppose.

  10. I am going to agree with John here…

    There’s several issues: one issue is that software gets into everything. It’s kind of like “English” as a subject.

    Another issue is that “Computer Science” is not — as a general rule — a science. It’s engineering. It’s art. It’s perhaps a kind of philosophy. It’s … did I mention that it gets into everything? But the “science” aspect is particularly weak — much of what is useful when dealing with science is not taught as a part of “Computer Science” — if you are interested in that, you’ll probably get that part of your education from the math department. So, anyways, there’s a labeling issue, here. (And, labeling, ironically, is one of the skills you really need to develop if you are into creating computer systems.)

    In a sense, the problem is that “computers” is too big of a subject to fit into one department. The good news is that “computer science” is such a meaningless term that we can be totally arbitrary about what a computer science department deals with. The bad news is that some people actually want to talk about things in a way that conveys information.

    But perhaps we can ignore them?

  11. I went to the University of Waterloo one of the top 3 or so universities in the world for CS. It was so big there that things blended into so many special combinations.

    1) CS majors: pretty much take all the advanced CS courses you want.
    2) CS for science and math majors: slightly watered down versions for people with CS requirements in their program or looking for a minor.
    3) Software engineering: a blend between CS and computer engineering to the point where in alternate years you either get a BEng or a BMath (math is its own faculty).

    I took physics and since numerical analysis was a 3rd year CS major stream course over the fence physics ended up teaching it themselves. The funny thing was because we were so crunched for time they ended up just assuming you knew how to program in C and jumped right into numerical methods. Which left ~30% of the class completely terrified because they’d never had to program before and now they are making double linked lists with pointers for their first assignment :)

    By the time I left in 2002 they had added a bioinformatics degree which was a half biology half CS course load, and a computational option to all the core sciences so you could do a physics/CS, chem/CS etc combo.

    John I think you are right as more and more fields become impossible to do without CS skills we’ll get more of need for both a strong CS department and strong CS training for the actual domain that the student is focused on. Rather than students complaining about not being able to understand their teachers accent they’ll complain about their teachers choice of language being too loosely typed to be understandable.

  12. The whole notion that students do not care about computer science and would rather just learn practical programming is completely false. Personally I hated the practical stuff in college. There would be hands-on Java labs that I would finish in 10 minutes while a lot of students would take the entire hour and a half and still not finish. Not just labs though, practical programming classes were a drag. There were some in there that had never written a program before. Or those with already 5+ years of programming experience under their belt.

    But computer science? Yea those classes were a much more even playing field. After being out int he professional world I am constantly learning new tech. The “practical” stuff as you call it. But I rely on my education far more than you think.

    A lot of why we think that “real” programming is so different from the mathematics is because of the forced poor architecture in imperative/objected oriented languages. In a language that makes explicit the separation of side effects and pure operations – it becomes obvious that software is largely just pure transformations of data with a few side effects sprinkled throughout.

    I do agree though that computer science *is* math. The departments could almost be merged. The problem is industry does not treat it as such.

  13. This post was one of your most insightful. It’s really got me thinking about things. Two comments:

    1) Part of the move from a liberal arts/singular cirriculum to multiple departments and areas might be due to growth and management of universities in general. It’d be interesting to see how universities organized themselves pre-1960s in North America. The 1960s are generally regarded as boom years for postsecondary institutions thanks to the Baby Boomers. Lots of schools were founded at this time and lots of professors and researchers were hired. Lots of pupils started attending schools and things like class size, tuition and focus at each school varied wildly. This probably meant a big shift in how universities were administratively run, and probably a far cry from teaching a handful of noble men in remote areas who were destined to end up at university from birth. I wouldn’t say this shift is necessarily a positive thing either, but it does help administrators figure out who to hire for that Philosopher position.

    2) Interestingly, math departments at schools big and small, prestigious and less-so still end up teaching a lot of math courses for other subjects. Physical sciences, engineering, business and even social sciences tend to have their own departments, schools and faculties but if CALC 101 is required, it’s still usually taught by a math department. I have a feeling this is a special case and relates to “math anxiety” that even very smart people feel from time to time.

  14. John: If a large school has Software Engineering, then I could see CS being in an odd position. However, small schools don’t ever have SE. My school has an Engineering department, but it is general Engineering Science and they have nothing for SE. Their students come to our department for the majority of their computer training.

    Personally, I hate the term “Software Engineering”. Software development is much more of an art than an Engineering field. If bridges were built like software I would stop driving. Part of that is because unlike bridges, you can’t, in general, prove that a program is correct. You can test it a bunch, but there is no single description for making sure that software is perfect. Turing showed that wasn’t going to happen back in the early days with the Halting Problem.

    It would be interesting to do a survey of different employers and see how they view CS vs. SE degrees. (I’m using my memory of the ACM description of the two to distinguish between them.) I could see big corporations being drawn toward the SE types, but it seems to me that small firms and start-ups would find a lot of value in the preparation of a CS degree.

  15. It sounds almost like you need a “Programming” collage course for programmers, which I thought most collages had these days.

    I should clarify for the Americans (Mike, feel free to clarify and correct things here): In Canada a University is where you get English, Chemistry, Engineering, Math etc degrees. Also, Computer Science, typically.
    A collage on the other hand, is a trade school. You go to collage if you want to become a wielder, plumber, carpenter, pretty much any skilled trade. Now, they aren’t just traditional blue-collar jobs; My Dad is going back to school for Brewmastering at Niagara Collage right now, and a lot of them will have photography or art programs that focus on the technical side of things.

    Typically (but not always) collages have better hands-on learning, apprenticeships, work-placements, etc, then universities. It sounds like this is a model that would fit programming better then a more theoretical grounding at a university, since, really, the guys you have coding your payroll application don’t need to know about Turing machines or lambda calculus. They just need to know how to make a computer do what they want.

    The only problem is there is a significant bias against collages for dumbing things down, since most of the people going there are blue-collar, while most going to uni are white-collar, which is sad, as it seems a good solution that would stop the whining.

  16. Yep Canageek I agree with most of what you say. I think the US term is trade school or junior college.

    Waterloo had one of the first coop programs though, and typically >50% of CS and 100% of engineers(mandatory in their case) take coop which requires about a year and a half of work placements (4 4 month terms I think).

    So generally the case that college is more hands on but U Waterloo does a pretty good job in that regards. Though there isn’t anything stopping you from getting a job placement that really sucks and has nothing to do with your field generally people try to find something relevant and getting into Waterloo CS or software engineering implies you are probably in the top 2% (more like top 0.2% for soft eng) or so of your graduating class so you don’t have too much trouble finding a programming gig.

    My last job the senior dev was a college (junior college) grad and was probably the most technically competent coder I’ve worked with (doing low level C real-time bit twiddling code like it was nothing).

    The challenge always comes when you find out your problem is more complicated than you thought and a hacked out solution won’t do. University level education, at least from a good school in a technical field, can act as a first order filter for people that will just get stumped and not have the intellectual ability to come out with the Google level algorithm needed for your problem. Still lots of people without the degree that can do it, still lots of problems that don’t need that level of skill but the good school grad pool will have a higher concentration of people that can figure out the hard problem in my experience.

    It isn’t fair but there isn’t anything that forces a potential employer to consider you for a position. If the “has university degree” option selects a sample pool with a higher concentration of good candidates and eliminates a lot of the pile of resumes to consider chances are the top school grads are going to get a call for an interview and only after they don’t work out will the pile be sorted out for other potentials.

  17. This year at MIT, only sixteen students declared a EE major. (Down from 200 or so a decade ago.)

    There are still many students who want to learn hardware, but apparently not exclusively.

  18. Hi John,

    I studied Cs and worked in science for a few years now.

    CS departments are the heart of computing as they integrate the full stack of CS -from the electronics to the programming-.

    The problem is that computers are so ubiquitous that it seems that they can be everywhere.

    But without people trained to understand the full stack, in my view we will loose control over computers manufacturing, design etc.

    It is a bit like other low-ends manufactured in China. Now that we do not do them in Westernized countries anymore, it seems that we have forgotten how to make the most basic stuff. And this should be worrying.

    It is important to look at the application level -bioinformatics, big data, web apps, mobile apps, simulation apps- but we can not forget the bottom.

    It is interesting how many things we take for granted.

    Great blog by the way, I really like all your articles!

  19. I studied at an ‘Informatica’ department in The Netherlands. This name reflects that computer science is more about information processing than computers. As you wrote; processing information, specifically with hand-written programs, will always be a speciality. I have met quite a few people that studied informatics-specialized studies and now regret not having learned to program properly.

  20. @Erik van Oosten

    The jobs will always be there but they usually suck. I’m not sure if there is a way around it but I find apps used for internal use are pretty frustrating to code. For the following reasons:

    1) In my experience the programs usually have poor specs (agile to a flaw: I’m not sure what I want, just start doing something and I’ll correct you as you go)

    2) once built often are of one, or few time use (answering questions like “how many left breast patients waited longer than 10 days for treatment last year”)

    3) have very few users (often you as the developer as asked to run it and email the results to someone).

    4) the data is being used by domain experts and since you are the code monkey you need to keep coding and not concern yourself about the organizational, market, patient or whatever implications of the data you gather. So even if the space you are working in is interesting you don’t have the knowledge or the “need to concern yourself” with actually using the data. You are a librarian at a med school not a medical researcher (point me to the book don’t bother reading what is in it).

    5) It doesn’t have to be this way but always has been in my experience: projects are usually small one person is the coder and everyone uses their favorite tools. So you have 0 support and community as a developer in house (you have a couple okay Matlab coders, a guy that knows C, you might be the SQL ninja, another uses .Net etc). Ask someone how to do something and they will tell you … in a language you don’t know.

    6) Your peer skill level is usually quite low. They usually got hired for a different reason than coding ability (in my case knowing physics and being willing to do the boring part of the job after-hours work for a few hours into the evening everyday) they needed to be a nurse, have a HIM certificate, have book keeping experience, whatever. These places are hello world factories: most people are learning for the first time or dusting off something they haven’t used for 10 years.

    7) Often they don’t even want to be doing this coding thing it is just the side project they get pushed on to fill their day. So … how hard do you think they try to keep up with technology, give proper thought to architecture and performance etc.? How excited are they going to be when you figure out databinding for the first time and try to share with them the MVVM design pattern?

    Anyways all this makes it really frustrating to be a developer of any talent in the in house data-God role. It drives them/me away from these places because the problems often aren’t that interesting, the code you make isn’t really ever used, and no one really cares how polished (the craftmanship in the profession) the app is. Not to mention you’ll never get rich in these places either because the salaries are low to been with (university settings) or because what you are making will never be anything but a special purpose tool used to talk to 6 other in house systems and use the data in a way that only your employer uses it (ie no market/revenue stream to justify spinning it off as a company or giving you stock options).

    If I sound bitter it is because I am :)

  21. Mark. In response to your comment about proving programs correct and the Halting problem, I think you are incorrect.

    The Halting problem states that no program which takes a program as input can output whether or not a program terminates. This says nothing about whether a program can be proven correct or not.

    In fact if this were true I would be out of a job!

    Programs can be proven completely correct with respect to a specification in a number of ways. One can use automated theorem proving (SAT, SMT, etc.) or one can use types and a proof assistant (Coq, Agda, etc). My research lies in the latter. Richly typed programming languages provide a means of stating and proving properties of programs directly in the language. Coq is a dependently typed programming language which has been used to prove programs correct. I am talking about industry level software.

    Just to cut this short I will give a couple of examples. CompCert is a fully verified C compiler which was fully proven correct in the Coq proof assistant. The first publication about this can be found at the following link:
    http://gallium.inria.fr/~xleroy/publi/compcert-backend.pdf
    Others can be found at http://compcert.inria.fr.

    Model checkers which use SAT and SMT solvers are heavily used in the airplane industry. These can be used to formally define a model of a large program and then prove that an error state is never reached. These are used to fully verify flight control software such as collision detection.

    So I do not think your comment was correct. Software can be proven correct!

  22. @Harley Eades – the halting problem is not that a program cannot determine whether or not another program halts. That’s an easy problem in some cases.

    The halting problem is that a program cannot be universally successful, in the general case – there will be some problems where we cannot determine whether the program halts or not.

    Put differently: there exist programs which can be determined to halt, programs which can be determined to not halt and programs which cannot be determined to halt or not halt.

    And, yes, this same kind of thinking does apply to correctness proofs. (Though there’s an additional issue with reasoning about correctness proofs, which we might call the GIGO issue — “correct” is a logical characteristic but logic itself will give us garbage when we feed it garbage. And garbage correctness might not be thought of as being “correct” from the point of view of a relevant human.)

  23. Harley,

    I agree with everything you said, but I stand by my assertion. What the halting problem says is that you can not, through a general algorithm, determine if a program halts. Hence, there is no general way to determine if a program is correct. Things can be written which are undecidable. We can prove some programs correct. Every one is a special case though. There isn’t a general approach that can be applied to everything.

    If you don’t believe me, here is my challenge to you, prove that the following code terminates for all inputs. (Code in Scala and I use BigInt intentionally. If you use some other languages that do arbitrary sized arithmetic by default that works too.)

    def cc(num:BigInt):BigInt = {
    var ret = 1
    var n = num
    while(n>1) {
    if(n%2 == 0) n /=2
    else n = n*3+1
    ret += 1
    }
    ret
    }

    You listed a bunch of great proof tools and imply you can prove any program. This is short ans sweet. Should be simple. Of course, you might realize this code is associated with the Collatz conjecture and that you probably aren’t going to prove that this program terminates. If you do, feel free to mention me in your speeches for awards you get.

    That’s the thing. An Engineer can ALWAYS tell you if a bridge is safe. A Computer Scientist can’t do the same. They can prove some programs correct, but it has been shown mathematically that you can’t do it for all of them. That is one of the real lessons of the halting problem.

    Now, I actually have a thesis student working on a program proving system that I would like to see in IDEs. He will use some Coq in the project he is doing. A question I have never seen answered is what fraction of real programs fall into the unprovable side of things. It might well be that the answer is almost nothing of real value is unprovable. I’d love to see languages and tools that help make it so that lots of code is proven correct. However, if you make a language where everything can be proven correct, it will not be Turing complete.

    Mark

  24. @Harley I’m curious who proves the proof engine? Doesn’t it ultimately come down to someone assuming their tool has no bugs so whatever it says must be right?

  25. My College had the opposite problem with my CS department finding that the teaching its students were receiving from the Maths department was sub-expectations and started to teach its own Maths courses.

  26. Mark and RDM. I stand corrected! It is not everyday I think about how many programs can be correct. I usually work in a subset.

    Mark I know of the Collatz conjecture. :-) One of my favorite mathematicians once said, “Mathematics is not yet ripe for such problems.” Neither is CS. :-) Stan Ulam also conjectured it I believe.

    I am also now interested in what set (or perhaps class) of programs lies outside of what can be done.

    I am quite curious about your students work. Do you have any links to papers?
    My research is on the design and analysis of dependent type theories for software verification and formalized mathematics. I’d love to hear more about your student project.

    Mike, there is always going to be a fragment of a prover or proof assistants code base which must be trusted. This is usually called the trusted code base. The idea is that this core is small and can be inspected by humans, but this is not always the case. Take Coq for example. Its core is the inductive calculus of constructions. This core is well understood, but it is still an open problem if all of Coq is consistent. So there is always going to be some amount of trust.

    This has been a great conversation. Thanks!!

  27. Harley,

    He is going an undergrad thesis and it isn’t very far. Nor will it get very far because he graduated in May. I’ll briefly share the idea here simply because I would love for someone to do it.

    As you are probably far more aware than I am, proving programs generally suck. In addition, if you ask a programmer to do some type of formal proof you generally run into two problems. First, because the process sucks they won’t spend the time unless they have to. Second, they are just as likely to have typos/bugs in writing the formal proof as in the original code. My idea was to put something in the IDE that facilitates proof by showing programmers options for what things can be said at a given line of code so the programmer can pick the one that they meant to say. Think of it as having the tool suggest loop invariants or something like that. You would also need to be able to express bounds on arguments and such.

    To be honest, it isn’t clear how much of this is currently doable, but he’s making a first stab with a simplified language. The problem is that at any point in the program there are an infinite number of true statements. So the system would have to have some smarts in that regard. Autocomplete might be nice too.

    Along the lines of autocomplete, the proof system would help identify bugs because if the coder couldn’t find what he/she wanted in the options provided, he/she could type in what they think should be true. Then the tool could highlight why that can’t be said. It might just be a range thing in which case it could put in those range bounds. In other cases it would point to an error that the programmer needed to correct.

    If that sounds interesting to you, please take the idea and run with it. I’d just like to have such a tool. :)

    Mark

Comments are closed.