# How can I explain the difference between CS and coding to a layperson?

I was at a party a few days ago with a doctor (the medical kind, not the research kind) who was thinking about writing a computer program to solve a scheduling problem at work. Someone introduced him to me because I have a CS degree and worked as a software engineer for a few years.

It wasn't long before we moved on from the specific problem he had (for which the answer was "hire a freelancer" or at least "I can't solve this for you just standing here with a beer and without a computer") to talking about computer science in general. To his credit, he asked good questions, picked up on the answers immediately, and asked smart follow-ups. But a lot of stuff that's second nature to us CS people was totally new and surprising to him.

The big one, which isn't surprising in hindsight but which we didn't get to until late in the conversation, was that computer science isn't the same as programming. There was also the fact that complexity/Big-O makes a real difference, and that the Halting Problem/unsolvability exists. It kinda made me feel like I wasn't a great ambassador for CS.

My actual question here is: how do you explain computer science to people when you have not a year or a semester, but just an hour, or even only five minutes?

(This question might be a little outside the typical scope for this site, but it's still relatively early in the beta, so I figured let's give it a shot.)

• It's similar in spirit (but different enough to be a different question IMHO) to this question: cseducators.stackexchange.com/questions/868/… We used layperson there, which would fit here as well. I will add it. – Peter Jun 21 '17 at 19:00
• @PiyushParikh Feel free to roll back the title - I'm just trying to massage the question to be more on-topic, but you don't have to accept any changes you disagree with. (To roll back, just click where it says I edited the question, and you will see the edit and have the ability to roll back if you choose) – Ben I. Jun 22 '17 at 1:55
• Title might be better comparing CS to coding. Maybe 'the science part of CS'. – Sean Houlihane Jun 22 '17 at 9:39
• If you got to complexity and undecidability, you are probably one of the better 'ambassadors' in the world. – user737 Jun 30 '17 at 0:36
• You're giving me a lot of credit when you should be giving it to my "audience." He was really sharp, and interested. Guess you'd expect that from a doctor. – Piyush Parikh Jun 30 '17 at 4:15

I regularly have to explain what computer science is to parents, and I have lately settled into this explanation:

Technology keeps changing all the time. You get used to the menus in Microsoft Word, and then they change it to the Ribbon. You learn to program buttons in Java using Applets, and then Applets get removed from every major browser as a security risk.

But there are some things that never change, because they're in the realms of mathematics, or they are fundamental organizing principles. For instance, computer right now work in binary, 1s and 0s. The properties of binary numbers themselves aren't going to change no matter what new technology comes around tomorrow. We might create a computer that's not based on binary, but the properties of binary itself are fixed. This is the realm of computer science. Computer science is the foundational stuff that doesn't change.

It's highly mathematical, highly theoretical, and there are a lot of proofs involved, but when you study computer science, you are studying the deeper question in the nature of computation itself, and that's stuff that never gets dated.

• Rather than 'never gets dated', a lot of it becomes more widely relevant as hardware improvements reduce the compute cost (so it's not all abstract). – Sean Houlihane Jun 22 '17 at 9:45
• One thing I emphasize with my students, once they're up to algorithms, is that faster hardware and bigger hard drives make a lot of things worse instead of better. An $n^2$ algorithm on a faster computer is not really faster if the availability of more data tempts you into a larger $n$. – Ben I. Jun 22 '17 at 10:38

I'll attempt a self-answer here, based on hindsight and a few previous experiences where I went in knowing I wanted to do this.

I've found that starting off with an analogy helps a lot of the time. Friends and co-workers have reported similar results in my super unscientific poll. The one we use is along the lines of

Computer science has as much to do with programming as architecture has to do with bricklaying

or

CS is to coding as astronomy is to telescopes

It can be helpful to try to make the analogy with the listener's own profession, as long as it doesn't backfire by derailing the conversation.

Computer science is an academic field. It's theoretical. Programming is more practical; it's a tool.

In my story above, I segued from this into the Halting Problem and efficiency. Looking back, I think that was too big of a jump, at least when presented as abstract concepts. I like the phone book example mentioned in Peter's answer. I think I'd modify it this way:

One big part of computer science is "algorithms," which is a fancy word for "figuring out a good way to do things." A good example of this is finding someone's number in the phone book. You could just open the book to random places and hope you get lucky. You could start on page one and start reading straight through until you find the person you want. You could take advantage of the alphabetical sorting and index to see what page the people with similar names start on.

Using the index is clearly smarter than repeatedly picking random pages. Coming up with these better ways to do things; that's computer science. The details get really complicated (and are a big part of the field) but it turns out that what seem like small differences in efficiency, or memory usage, or other factors like that, can make a huge difference how good an algorithm is in the real world.

Now, once you have the plan, you might want to tell someone else how to do it. I could tell someone the exact same phone book search plan in English, or Spanish, or Hindi. I could tell a computer how to do it in C++, or Java, or Ruby. Programming is just a way of communicating instructions to a computer, the same way human languages are a way of communicating information to other people.

The downside of this answer is that it doesn't get into the mathematical foundation of CS, or how CS is about unchanging fundamental concepts. But I'm beginning to think that's not a big problem... such topics might be beyond the scope of a five-minute intro for a complete layperson.

• "Computer science is an academic field. It's theoretical. Programming is more practical; it's a tool." Beautiful and succinct. – Ben I. Jun 22 '17 at 18:45

I would explain it like this:

In reality, you have to solve problems on your daily basis. It may be a time problem, like "how do I get these five tasks done it just 1 hour?" or "how can I stack these boxes so that they all fit into the cupboard?".

Computer science is in many ways equal to solving these problems, only that the problems are of a little more mathematical and logical manner.

One rather common problem of computer science is "how do I sort a list of numbers?". When a person is given this task, he or she will most likely pick out the lowest or highest number first, put it onto the sorted list and continue from the start until no numbers remain in the unsorted list. This is one solution for the sorting problem, and computer scientists often have to solve this task too. As you can imagine, like described above, it will take a relatively long time to sort all the numbers, as you will repeatedly look at all numbers to sort out the lowest / highest one. So one person once thought "how could I solve this problem faster?" and maybe created an algorithm to solve the task for example twice as fast as the original approach.

Solving problems, not only using the most intuitive way which often tends to be very slow, but thinking about a more complex and strategical approach, to get a given task done as fast as possible, this is a major part of computer science.

• Hi Tom! Welcome to CS Educators! This is a really great first answer, thanks for writing it up! – thesecretmaster Jun 22 '17 at 15:24

Dealing with (my) parents who are not particularly aware of computers or the difference between a server and a database, I believe I have a fairly simple answer for this question.

Computer science is the theory and study of how computers work, algorithms (in layman's terms, a process to solve a problem), and how to think like a computer in order to manipulate it to do what you/the client/whoever want.

Programming is the actual act of applying the theory and manipulation of the machine. They often get mixed up because programming is such an integral part of CS but is, in fact, only a part of it.

This explanation in some form has had a fairly positive response to me. Or, if you're particularly pressed for time: "Programming is part of computer science, but CS is a lot more focused on the understanding of how the computer works."

Computer science is a discipline of problem solving. I use this phrase from CS50 often (mainly because I teach an adaption of it):

inputs -> algorithms -> outputs

From the official CS50 notes from last year's Week 0 lecture, the following three bullets explain what this phrase means:

• At the end of the day, computer science is about problem solving: taking some inputs (the problem we might be trying to solve) and creating some outputs (perhaps a solution to the problem).

• Between those inputs and outputs is what we might call a "black box," something that solves the problem for us even if we might not know or care how it solves them.

• Algorithms are sets of instructions to solve particular problems.

This is what I use on Day 0 when I welcome students to my class and at Back-to-School Night presentations to parents.

If your "pitch" has enough time for an example, the canonical CS50 example -- one which my students remember vividly from Day 0 since it involves ripping up a phone book -- is to pose the question asking how to find a name in a phone book. You could approach the problem linearly and go page by page (correct but slow). You could look at two pages at a time to double the efficiency (incorrect without checking a potentially skipped-over page). You could divide and conquer by examining the middle page and throwing away the half you no longer need (logarithmic efficiency). Even something as simple as looking up a name in a phone book allows for discussing linear v. binary search, computational complexity, debugging, sorting (since the book comes pre-sorted).

As an alternative to the phone book example (since it's more effective with an actual phone book and not in the abstract), say this: "Think of a number between 1 and 1024. I guarantee I will get it in 10 guesses or fewer." A computer scientist will conquer that challenge every time.

• This is kind of what my older brother said to me when I was 7 and the only examples we had of computers were on melodramatic TV shows from the 60s: input, processing, output. Of course, I also had no clue what sort of inputs and outputs could possibly be important to anyone, so I focused on the black box in the middle, especially when I got my hands on one 7 years later. Don't type A=sys(-7) into a PDP-11. In other words: some people will be caught by the mystery, and everyone else will be put off by it. Just like every oter field. – user737 Jun 30 '17 at 12:08

I don't know if this will help you, but I often find myself in the position of explaining the difference between CS and IT to students / prospective students / parents, and I use the experience of being a one-time emergency medical technician to help.

I compare the difference between CS and IT to the difference between medical doctors and EMTs. As an EMT, I was required by law to follow the protocols established by physicians, who get to do the experimenting and the researching and the paper-writing. As an IT worker, you will be handed a set of tools (databases, operating systems, programming languages) and have to work with what the researchers (the Computer Scientists) come up with. The world needs IT workers as much as they need EMTs, so it isn't less, just different.

It's not perfect, but I teach at a two-year school, so it's enough to get students thinking about which major to choose.

• Remember to tell prospective students that programming can be very frustrating. It takes a lot of patience and persistence: "1% inspiration, 99% perspiration", as Thomas Edison said. – user737 Jun 30 '17 at 0:43
• It's like you were listening to the original conversation I had at the party! I was an EMT too, and made the exact same analogy! Well, maybe not exact same, but incredibly similar. EMTs follow a pre-written set of protocols, almost "cookbook"-style, whereas doctors are expected to do more thinking. Analysis, synthesis, and creation. In summary, it's the clinician/technician difference. Your answer makes me really happy. I don't know if the average person knows enough about medical infrastructure to really get it though. What responses have you gotten when you've used it? – Piyush Parikh Jun 30 '17 at 4:04
• Well, I am still a volunteer firefighter; I just let my cert lapse when I had a kid and didn't have time to refresh. I'm in an engine company, so it has never been a big deal. Also, I teach at a community college, where we probably have a higher concentration of FFs and EMTs than at other schools, and the firefighters always seem to find me, so I probably tend to have this conversation with people who understand EMS at a higher rate than others would. – Chris M. Jun 30 '17 at 12:47