Monday, December 20, 2010

What is Computer Science?

Some of you may have heard the saying, "If you want your computer fixed, don't ask a Computer Scientist." At BYU I had a friend who was majoring in computer science and it was always rather awkward when people he knew would ask him to fix their computers. It was partly awkward because he is a very nice person and he felt terrible about embarrassing the person who asked when he had to explain that computer scientists don't actually know how to fix computers. If I was ever around when people asked him to fix their computers I would try to bail him out by offering to fix it for them, because usually the people who asked were using a PC and my friend was a die hard Linux user to the point that he had no idea how Windows worked ("'My Documents'? What's that?" I don't think that he had ever owned a Windows machine in his life).

Later when I came to UNC I also made a few friends in the Computer Science Department here and sometimes it was rather awkward hearing them trying to explain what they did for their graduate studies (especially when they had to explain it to Med students). The conversation would usually go something like this:

CS Student: "I'm working on my PhD in Computer Science."

Med Student: "Oh so you what...learn how to fix computers?"

CS: "Uh. No. I do Computer Science."

Med: "So you program computers?"

CS: "No. I...uh...I figure out how to solve problems on computers."

Med: "Like math problems?"

CS: "Uh...not really...more like I work on [technical explanation that causes the Med student's eyes to glaze over]."

Med: "So you figure out how to make pictures on the computer?"

CS: "Something like that."

Med: [Later talking to his wife] Wife: "What does he do?" Med: "Something with computers."

So with problems of communication like this it is no wonder that people really don't understand what computer scientists do. This is usually compounded by the fact that the most esoteric of the CS guys don't even do any of the normal computer stuff like replace hard drives or fix Windows or even know a single programming language (it is surprising how many CS guys there are that don't know a single programming language, more than you would expect). It is precisely because of this misunderstanding that there are apparently high schools that offer "Computer Science" courses which actually turn out to be classes on typing or making web pages in HTML (which actually doesn't require any programing at all). To give you an idea how bad that is, it's like offering a shop class and calling it physics (imagine a class called Physics 110 with the description stating that the class will teach "introductory lathe techniques"). Or for a different perspective, it's like offering a class on "Introduction to Libraries" and calling it a Law Class.

So we return to the question, what is Computer Science? To put it simply, Computer Science is applied logic (and before anyone tries to correct me, calling Computer Science applied logic makes as much sense as calling Physics applied math, which only makes sense if you are a mathematician who has never actually done physics). In a more general sense, Computer Science is the study of how we make computers useful and how to make computers do new stuff (for example, a team at UNC took photos from Flickr and used them to recreate 3D images of famous landmarks. It was a friend of mine who worked on this project.) Other Computer Science projects include things ranging from Google Maps and Google Earth to modern digital readers (2D "bar codes"), and things as strange as trying to figure out how to test all possible permutations of DNA that will result in stable strands (depending on the length there are something like 10^275 possible permutations (that's a 1 with 275 zeros after it, which is more than the total number of stars in the universe). Now imaging trying to run through all possible permutations and find the ones that could possibly be stable. Now try doing that in less time than it takes the universe to experience entropic death i.e. you have to figure out how to do it within your lifetime. That's what computer scientists do.)

So returning to what I started with, asking a computer scientist to fix your computer is kind of like asking your dentist to lay down tile in your house (hey they both use cement right!?!). So the take away lesson here is that Computer Science is just applied logic, just like Physics is applied math (in other words it isn't, but I guess that is a good way to explain it to those who have no clue). Can anyone think of a better way of explaining what Computer Science is, and have the explanation make sense to a Med School Student?


  1. Even within computer science it varies significantly what people actually do. Most CS students that graduate with a bachelors and masters degree go into programming software. From there many quit programming every day and go into dev management or product management etc... Those to get a PhD usually don't program. They do research. They can't program. I've seen that first hand.
    My parents bought me my first computer and sent me through college. They keep asking me what it is I do. They don't get it. I should have shown them this xkcd comic...

  2. Stan,

    I don't know how true it is but I've been told the best computer programmers never go on to get PhDs because if they are a decent programmer they will get snatched by a decent paying job fairly quickly.

  3. What does a med student do, besides carrying a drug encyclopedia on a handheld gadget that some computer viz figured out how to program?

  4. Personally, I just find the "straight man" in this conversation to be rather interesting. There are very few venues in which a med student (usually admired for intelligence) would be cast as the Costello to our Abbot.

  5. Joseph,
    It's true. Many PhD students never make it through the program because they get snatched up quickly. I know it was that way back in the dot com days. I'm sure it's true to some extent today too.

  6. I did a BS in computer engineering, so I had to take a fair number of CS courses. It's true that being a CS major does not mean you know much about computers. Rather, a CS major knows about computing.

    It's a funny thing because often engineers belittle comp sci's because their methods are sometimes not well grounded in solid mathematical techniques (think neural nets or q-learning). OTOH, we engineers are often held back by these self-imposed artificial limitations. The CS community seems to be more willing to take risks even without a solid corresponding theory. In engineering you'd never publish if you took that tactic.

    At LLNL, my boss refused to hire CS majors even though we were software engineers. The reason is comp sci's often take a "black box" approach to physical systems, and when you're trying to control all the physical devices on an 80,000 control point laser, you can't afford that luxury.

    Comp sci's and engineers end up solving many of the same problems in radically different ways. My MS thesis was a computer vision problem (very much both a CS and EE topic) and one of my co-advisors was from the CS dept.

    Right now my research is on cyber physical systems (systems which use a computer to control a physical system (which is pretty much every control system anymore)) which is very much a bridging of EE and CS. Most of the work in this area has come from the CS community and has focused on real time system scheduling. We're trying to break new ground by coming at it from a controls theory perspective (which is really an EE topic).

    At the end of the day, comp sci's might are really engineers just like EEs, MEs, etc. Where the two fields diverge is really more historical than anything else. If you're a CS major you had to take a course on algorithms, discrete mathematics, databases, system architecture, etc. In EE you had to take multi-variable calculus, circuit design (which is useless), and digital signal processing, etc. At the end of the day, you ended up solving the same set of problems. There are some stark differences, particularly when it comes to embedded computing. That's very much in the CS domain right now, just as electromagnetics is still very much an EE topic.

  7. I will add that my current advisor actually got her BS and MS in aeronautics/astronautics and then her PhD in Computer Science. She's in the Aerospace dept. here and she works tireless to bridge the Artificial Intelligence community (a CS topic) and the Controls community (an EE topic). On those topics particularly, there is VERY little difference between a CS and EE. They really are solving the same problem.


To add a link to text:
<a href="URL">Text</a>