Question

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?

Was it helpful?

Solution

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.

OTHER TIPS

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.

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.

Licensed under: CC-BY-SA with attribution
scroll top