Take the 2-minute tour ×

For decades, the accepted degree to get to become a software developer was "Compter Science."
We've had a few questions already about whether that degree really prepares students to develop software.

Some schools have, in the last 8 years or so, started offering multiple distinct majors in programming. Using the curriculum from my school:

  • Computer Science, which starts out with some intro programming courses in the first year, and then focuses on theoretical computer science, algorithms, and a bit of OS stuff. Most classes involve several smaller projects and homeworks, done solo or in pairs.
  • Software Engineering, which starts out with the same intro programming courses, does a few classes of theory, and then goes into software development practices (testing, process methodologies, sofware metrics, requirements gathering) and software design (distributed system design, info system design, real-time/embedded design, subsystem design, etc)

Different schools do it differently, so the above is just a real-world example I'm familiar with. What I ask is: Is there a need for distinct majors in programming?

share|improve this question
Not really. The way to learn these skills is not to teach a course on them, but to give them actual project work –  Casebash Sep 4 '10 at 5:55

3 Answers 3

up vote 15 down vote accepted

Yes, they should be.

The relationship between computer science and software engineering is the same as the relationship between physics and mechanical engineering. One provides the theoretical background while the other takes those theories, along with good engineering principles, and applies them to the design and implementation of software.

You need both in order to produce new and better software. A good computer science education trains people to produce new and better algorithms, data structures, programming languages and paradigms, compilers, and a number of other things that can be used to enhance software systems. A good software engineering education, on the other hand, trains you to take these tools and knowledge obtained through a scientific study of computation, along with a knowledge of the software development lifecycle and process models to actually build the system that a customer wants and needs.

share|improve this answer
The physics/engineering analogy is one I use a lot. We don't hire physicists to design and build bridges, why do we hire computer scientists to design and build programs? –  HerbN Sep 11 '10 at 20:33
Because computer science programs teach a little more about how to build programs than your typical physics program ;) –  Wayne Werner Dec 23 '11 at 17:38
@WayneWerner: No, they really, really don't. –  DeadMG Jan 30 '12 at 17:26

It is well known that a typical CS curriculum does not prepare one for the industry, not as much as it wants you to be prepared anyway. So yes, there's a need for a software engineering major, and the two should be distinct, though definitely in the same faculty.

share|improve this answer

They should be different disciplines, but not at the undergraduate level. I just don't see how they can cramp up all that is needed for Software Engineering on an undergraduate degree. Just in the same way we do not see undergraduate degrees in Systems Engineering (where people get a MS in after getting a degree in EE, CE, Mechanical Eng or CS), it is a similar case with Software Engineering.

It is a multidisciplinary approach based heavily on computer science and/or MIS. People truly become software engineers in practice (and not just in title) after pursuing advanced course work and/or work experience in the field, provided that the later is done in environments conductive of software engineering.

Most people have titles of software engineering but have not really advanced beyond coding. This is not a dis on them, but an observation - they have not been sufficiently exposed to the type of work that would help them accumulate work experience beyond coding. Worse yet, most jobs and organizations are atrociously run, and are not conductive of doing proper software engineering.

Furthermore, without some work or scholastic maturity, software engineering material will simply fly over the heads of most undergrad students.

share|improve this answer
If you want to know how they "cramp up all that is needed for Software Engineering on an undergraduate degree", take a look at the first undergraduate SE program in the US: se.rit.edu –  Thomas Owens Nov 28 '10 at 13:29
Unless I'm missing something, they didn't cramp it up. They simply created an 192-credit extended curriculum. This is beyond the typical 60-80 credit undergrad curriculum you find in CS and MIS - there are a lot more courses going on here, enough to make it comparable to taking double majors (or getting an undergrad and a grad degree). I do like the flow and the integration of other engineering disciplines at the senior year. It is a perfect curriculum that one can follow. But it simply proves my point that you can't get SE with the typical undergrad courseload alone. –  luis.espinal Nov 28 '10 at 13:50
And one caveat I'd see here is that you spend so much effort and you simply get a single undegrad degree (as opposed to completing similar course work to get double majors or an undergrad and grad degree.) Sheepskin matter unfortunately. Maybe that concern will matter less once such SE degrees become more widespread. –  luis.espinal Nov 28 '10 at 13:52
It's a quarter system, meaning that it's the exact same workload as a CS degree (or any other undergraduate degree) from the same university. In the end, it's 4 years of classes (10 weeks of classes, 1 week of exams per quarter, 3 quarters per year), 1 year of co-op. –  Thomas Owens Nov 28 '10 at 13:59
Not really. It isn't equivalent when it comes to work load. I'm currently pursuing a second masters (CE+EE) at WPI which follows a similar format (3 quarters, 10 weeks classes+1 week for exams). From experience, programs like these are more rigorous and cover more than the typical undergrad 60-80 degree. It is not a criticism of the program, mind you. I think it is necessary to really cover software engineering at the undergrad level. And a similar approach should also be necessary for CS (since typical CS no longer covers enough hands-on, multi-disciplinary practicum nowadays.) –  luis.espinal Nov 28 '10 at 15:05

Your Answer


