Sign up ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free.

Possible Duplicate:
30 minutes to explain programming to a 15 year old

As a professional software engineer I have been asked to speak at a local high school junior class career day. As is par for the course with people outside our discipline they have lumped all of the kids who listed an interest in programming, computer science, software engineering and computer engineering into my sessions. I have my opinions on the distinctions in each field, but want to present the factual differences so the students can form their own opinions. I would hate to say something about a particular field and lead someone to start their collegiate career in the wrong discipline.

What should be emphasized about each field? How should the fields be juxtaposed to best present their similarities and differences?

There are some similar questions running around programmers so I thought it was a good idea to list them as I don't feel they specifically cover what I am asking above.

share|improve this question

marked as duplicate by Robert Harvey, Mark Trapp Jan 30 '12 at 21:43

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

Perhaps look at the local colleges and see what distinction they make in how they teach the material. I know that at my company we hire people who are both from Computer Science and Computer Engineering programs for our software developer positions. – Tyanna Jan 30 '12 at 16:51
One problem you are going to have is that SE is still relatively open in its definition, and only time will fix that. – Ryathal Jan 30 '12 at 16:52
@Tyanna Most colleges don't have the differences formally defined. :( – Karlson Jan 30 '12 at 17:08
@Karlson Software Engineering 2004 formally defines undergraduate software engineering program suggestions. Most software engineering programs at the graduate and undergraduate level are also grounded in the SWEBOK. It's not as open or ambiguous as people make it out to be. – Thomas Owens Jan 30 '12 at 17:34
For the most part, my college lumped all three of those into "Computer Science"... Quite annoying – Izkata Jan 30 '12 at 17:50

10 Answers 10

up vote 31 down vote accepted

Are you supposed to be helping them choose a major or helping them choose a career? While college curricula differ significantly among the disciplines, the career part is very hard to distinguish:

  • Computer scientists spend 7 hours a day coding new software or debugging old software, and 1 hour online debating obscure theoretical concepts they never get to use in their actual work.
  • Software engineers spend 7 hours a day coding new software or debugging old software, and 1 hour debating the process.
  • Computer engineers spend 7 hours a day coding new software or debugging old software, and 1 hour blaming the hardware.
  • Programmers spend 7 hours a day coding new software or debugging old software, and 1 hour in meetings wishing the above guys would shut up already.
share|improve this answer
Software Engineers spend 7 hours in meetings debating the process and 1 hour coding or debugging. :) – Karlson Jan 30 '12 at 17:53
Computer Scientists spend 7 hours designing a new language in which this problem would be trivial and 1hour trying to convince everyone else to switch to it – Martin Beckett Jan 30 '12 at 18:00
Web Programmers spend 1 hour coding new software or debugging old software, and 7 hours cursing IE. – Ryathal Jan 30 '12 at 18:08
Software Engineers spend 7 hours drawing neat-looking architecture diagrams of what they think the system should be, and 1 hour in meetings criticising the architecture diagrams of other Software Engineers. – FrustratedWithFormsDesigner Jan 30 '12 at 18:12
@MartinBeckett And then the rest of their lives trying to have everyone switch to it. – Karlson Jan 30 '12 at 20:45

Start with a joke: How many software engineers does it take to change a lightbulb? None! It's a hardware problem! :P

I thought up some more:

...How many computer engineers does it take to change a lightbulb? Two: One to write the device drivers and one to change the lightbulb!

How many computer scientists does it take to change a lightbulb? Only one but he won't actually change it, only prove that it can be changed in O(n).

There is a lot of overlap in these fields, so if you want to emphasize the differences, you'd have to look for very specific tasks or jobs that would only really apply to each field.

share|improve this answer
Absolutely there is overlap, but there are differences. Not all software engineers are computer scientists and vice versa. I'm just hoping to give the students a clear as possible understanding of the differences. Maybe all that is possible is something as clear as mud. ;) – ahsteele Jan 30 '12 at 16:43
And then spend the rest of the day explaining why these were funny to the crowd half of which might actually think that log(n) might be a sexual reference. – Karlson Jan 30 '12 at 17:28
It's also worth pointing out that the name of the degree/dept has no correlation with whether they are teaching Computer Science, Computer Engineering or Software Engineering – Martin Beckett Jan 30 '12 at 17:59

I don't think there is any need to emphasize on the overlap to junior kids. College grads don't understand Software Engineering, let alone school kids! Speak in general about Computer Science and show them the different careers they can choose within the field (Software Developer / Computer Scientist / Academia / Entrepreneurship etc). Also talk about the kind of work you are doing. This will be better than bothering them with unnecessary jargon which will leave them more confused than they originally were.

share|improve this answer
College grads don't understand Software Engineering I think anyone who graduates with a degree in Software Engineering should understand what software engineering is. In fact, I understood what software engineering was before I even went to school for it. I don't think it's unreasonable to explain the differences between CS/CE/SE/IT to a high school junior - these are people in the process of applying to universities, the people who absolutely need to know the differences before they invest so much time and money in 4-5 years of education. – Thomas Owens Jan 30 '12 at 16:58
@ThomasOwens : In a Utopian world I too wish that were true. However, most people learn about software engineering principles only at their jobs. The CS/CE/SE/IT demarcation at the undergraduate level is unique to the US educational system. Elsewhere in the world (and most top ranked US universities), there is a single degree called Computer Science & Engineering. Further specilization happens at grad school / work. Ultimately, though, most of these grads end up as programmers irrespective of the title of their degree. – aml90 Jan 30 '12 at 18:04
The existence of these different departments at an undergraduate level is not unique to the US. In fact, one of the first (if not the first) undergraduate software engineering departments in the world was in Canada. With the development of the CSSE's Software Engineering 2004 and work on the SWEBOK by the ACM, IEEE, and various industry and government partners, the introduction of software engineering principles at the university level is increasing - there are now over 300 undergraduate programs offering a degree in software engineering in the US alone (I don't have access to worldwide data). – Thomas Owens Jan 30 '12 at 18:13

This is a very interesting problem on how to present this to kids who think they know everything simply by interacting with the user interface.

So I would go something like this:

Point 1: Underneath it all you'll start with the same basics. Math, Physics and understanding that all computers are just fancily implemented solution for presenting sequences of 0s and 1s to you.

Point 2: Computer Engineering or probably more important Computer Electrical Engineering if you are in the US will take these concepts and will teach them how to make the physical objects talk to each other. For example how to take a radio inside their phones be able to send signals appropriate for them to be able to talk, how would it be possible for them to use their finger on a screen to make things happen instead of keyboard or switches, etc.

Point 3: Computer Science is basically coming up with ways of explaining human concepts to computers. Namely explaining concept like "nothing" aka NULL to a computer is difficult. How to come up with systematic way of solving problems like sorting a set of data, which they take for granted since kindergarten is much more difficult to explain to a machine. How to make a machine recognize a certain pattern as being solvable by the concept it already knows, etc. Coming up with Languages that would be understood by the human and can be easily translated into machine code.

Point 4: Software Engineering. This one is basically a field which is bridging the Computer Science and Engineering concepts to provide some sort of standardized ways to the people programming the computer for it to become a tool like a wrench or a mechanical machine(cars, planes or something else of your choice) of some sort. So if it breaks it can be easily and hence cheaply fixed that it runs fast (so algorithms from Computer Science and understanding of architecture from Computer Engineering become important) it runs reliably and the "idjut" sitting in front of the screen actually understands what exactly it is that the software is trying to tell him or her.

I would do it in this fashion so you can probably go through these in about 10-15 minutes and leave the rest of the session for question. I'm sure that they don't want to leave you there for more then 1 or 2 periods.

share|improve this answer
Karlson instead of <br /> just leave an empty line between paragraphs. Check here for more tips on the Markdown syntax... – Yannis Jan 30 '12 at 17:22
@YannisRizos I added the <br /> elements. @Karlson had all of the points run together. Adding them was closer to his initial formatting. :) – ahsteele Jan 30 '12 at 17:24
@YannisRizos I thought I changed it to do just that. Sorry will check the tips. – Karlson Jan 30 '12 at 17:24
@ahsteele Well, then you should check the formatting help page as well :) – Yannis Jan 30 '12 at 17:26
@YannisRizos will do, just didn't want to leave Karlson holding the bag for my edit. :) – ahsteele Jan 30 '12 at 17:27

Here's my simple explanation:

  • Computer science is science. It describes the underlying way that humans talk to machines and how everything interacts.

  • Computer engineering is taking those computer science concepts and applying them to hardware. The goal is to solve a specific problem in a general way using reusable hardware components.

  • Software engineering looks at the process of building software. They focus on teams of people building complex software using the concepts of computer science and the hardware of computer engineering.

  • Any of these fields will give you a basis in Programming. Programming uses the hardware computer engineering creates, the concepts developed by computer science, and the process defined by software engineering to build specific solutions to problems. Since software is easy to change, it can be customized for every user or made general enough for anyone to use.

Or in terms of products:

Computer Science: Papers, Languages, Turing Award (Nobel prize)

Computer Engineer: iPod, Space Shuttle control systems, XBox

Software Engineer: Books, Consulting, Developer Tools

Programmers: Facebook, Windows, Halo

share|improve this answer
Agree these are the theoretical differences, but not by-and-large the practical differences in much schooling and industry. e.g. most CompSci people end up as programmers (at least in Canada) – sdg Jan 30 '12 at 17:30
@sdg - Yes, that would probably be my point #1 - any of these majors will give you "enough" of a basis to be hired as a programmer. – Steve Jackson Jan 30 '12 at 17:48
+1 for the product-based approach. That's something high school students can grasp. – Karl Bielefeldt Jan 30 '12 at 18:46

I answered a similar question (that you didn't list :) ) a little while ago, but I did qualify it by saying that it only applies to schools around my area. As others have pointed out, there's a lot of gray areas between these different degrees, so unless you know which college each student will end up going to, explaining difference in majors may not be too productive.

And then regardless of which major you happened to take (CS, SE, CE, EE, Bio tech...), a lot of us just graduate and become programmers.

Maybe instead of degrees, you could talk to them about different areas of computing that they can go into after they graduate:

  • Research and coming up with new algorithms
  • Desktop App development
  • Web App development
  • Driver/kernel development
  • Computer Hardware
  • ...

Then based on the area that interests them, they can pick a specific program from the college of their choosing by looking at what each program offers in their specific college.

share|improve this answer
Very good point. I think focusing on peaking their interest may be the right way to go! – sixtyfootersdude Jan 30 '12 at 21:23

I'm going to give you a very different answer than most people: Don't try to emphasize the differences. Do you have a deep enough understanding of these three fields to fully outline the differences and similaries? Do you understand the job market and job perspectives post-graduation? Do you know what is common across multiple universities? Probably not, so don't try to.

When I was an upperclassman at my university, I would routinely participate in open houses, where I (and other software engineering students along with faculty and staff of the department) would stand in front of a room full of perspective (or in some cases, accepted) students who were trying to figure out which university they should attend, or which major they should start in. Dealing with questions about the differences between computer science, software engineering, information technology, and computer engineering was commonplace.

Every time I was asked about this topic, I emphasized what courses were part of the software engineering program, what the university's software engineering curriculum offered, how you could tailor the curriculum to emphasize different aspects that would be useful in various careers, my experiences on the co-ops that I had completed and internships that I had, some of the opportunities that my friends and colleagues had, and so on. When I talked about what other programs offered at the university, I did so in generalities, giving the extremely high level differences between the typical skills of a graduate in each of these programs.

Trying to explain the nuances is extremely hard when you are only talking about one university and have access to all of the information and guides from each of the departments and know people studying all of them and what they are learning in their courses, such was my case. However, in your case, you will be talking to people who are each looking at different schools, colleges, and universities. So not only will you be talking in generalities across academic disciplines, but also across universities. You are more likely to say something that would give the wrong impression or lead people down the wrong path - exactly what you are trying to avoid.

Rather than focusing on the differences between academic disciplines, talk about the career using your personal experiences. Talk about the jobs you've had, the things that you have done, what your typical day or week is like. Talk about things that you know well and know specifics about. If you want to talk about your education, make it about your education - mention the university you went to (and when you went there, as things change over time), the courses you took, the things you learned, and so on. Just don't generalize it into things that you don't know.

share|improve this answer

To highschoolers? The first thing to point out is that it largely depends on what school you talk to. Schools define the three different fields in different ways. The terms also mean different things to different companies. Sorry, but there's only a loose consensus on their definitions.

What they're supposed to mean as I see it:

Computer Science is where they learn how to make computers do more impressive stuff. Better algorithms, shortcuts to problems, advanced AI, stuff like that. But only the grad students seem to go on to that stuff. The first step is to teach people how to get computers to do anything at all. So undergrads are taught how to program.

Engineering is supposed to be the application of the science. So while the scientists learn a cool new algorithm to calculating pi, the engineers use it to display circles that much faster or sharper or whatever.

Software Engineering focuses on process and how to organize groups of people to work together on things. Requirements, design, chopping big problems into smaller ones, and getting 5 guys to hold the nail while 5 others hammer it. Honestly, it feels like a world of TPS reports sometimes. They also teach you how to program.

Computer Engineering, where I got my degree at least, was half-way between software engineering and electrical engineering. They focused on where the software met the hardware. Grad students could go on to design chip. Undergrades are set up pretty well for embedded software. Which I'm completely biased about because that's what I went into.

The last point I'd stress to the kids that it it usually doesn't matter. I got a degree in computer engineering, but I'm definitely a software engineer now. I had two EE classes that I struggled through and that fulfilled my requirements. With any of these degrees, you have a large about of leeway in charting out your future and which sub-field/specialization you want to go into. On top of that, what you get your degree in doesn't entirely dictate what your job will be once you get out into the world.

share|improve this answer
Did you get a job in embedded development? If you did then I can't imagine you would say it doesn't matter much. When we hire new grad developers there is a huge difference between the abilities of CS versus CE grads when it comes to working with and in particular debugging hardware. Yes, both degrees get the same title, but there really is a big difference in the type of jobs either can do well. Neither will be great at sw development until you teach them but the CE degree should be far stronger at understanding and fixing hardware problems. The CS student may never understand the hardware – Dunk Jan 30 '12 at 23:09
Point taken. And I have to reply "sort of". I develop applications that go into embedded hardware. In both of the shops I've done this in, we have people that deal with the hardware side. Occasionally I scope signals and touch pins, but it's rare. I guess my point was that while a CS student won't be taught hardware in his first two years, but if he wanted to go into that, he could take electives that cover it. – Philip Feb 1 '12 at 18:52

Here are my small definitions. The computer science explanation could be worked on.. but I think the others are good.

  1. Computer Science, at heart, is a discrete math field. Here you will learn how to create and analyze algorithms and everything that goes along with that.
  2. Software Engineer is more based on software development methodology. Which means that you concentrate on the process of designing software rather than the theory behind any algorithms you may use.
  3. Computer Engineering is really a mix between computer science and electrical engineering. Which means that while you cover many discrete math topics, you also cover many topics in electricity, physics, and circuit design.
share|improve this answer
For point number 3, remove the word electrical and you would be correct. If you get a CE degree from a good school then you should be able to pass the Engineer In Training(EIT) exam, which means you had courses across the entire spectrum of engineering disciplines. It just so happens that the CE degree has an electrical engineering slant because computers are after all, electronics. Also, it should be noted that while the programming aspects of a CE degree overlap with a CS degree, other than that there are very few similarities. Even the math classes are different. – Dunk Jan 30 '12 at 22:51

Speaking from the perspective of a high school student who knows the differences, I'd say:

  • Computer engineers study hardware and write low-level programs that make a computer run.
  • Programmers write software in programming languages.
  • Software engineers study the best ways of writing software in those languages.
  • Computer scientists study the languages themselves.
share|improve this answer
Computer Engineers know hardware and its inner workings but seldom get to design hardware. They write the programs that make the hardware perform useful functionality. They also tend to be the ones that make the hardware work despite the hardware not functioning as expected. Electrical Engineers tend to be the ones that design the hardware. – Dunk Jan 30 '12 at 22:59
OK. I'll change that. – alpha123 Jan 31 '12 at 6:46

Not the answer you're looking for? Browse other questions tagged or ask your own question.