Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

While most agree that a certain level of Computer Science is essential to being a good programmer, it seems to me that the principles of good software development is even more important, though not as fundamental.

Just like mechanical engineers take physics classes, but far more engineering classes, I would expect, now that software is over a half century old, that software development would begin to dominate the undergraduate curriculum.

But I don't see much evidence of this. Is there a reason that Software Engineering hasn't taken hold as an academic discipline?

share|improve this question

closed as not constructive by Yannis Rizos Mar 25 '12 at 0:35

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.If this question can be reworded to fit the rules in the help center, please edit the question.

1  
bit-twiddler: That's false...se.rit.edu is an ABET accredited Software Engineering undergraduate program. There is one required CE course and only 4 required CS courses. –  Thomas Owens Mar 18 '11 at 20:12
3  
@FarmBoy, why? If/when I go back to grad school for MS in CS, I want to take truly 'core' stuff: algorithms, computer languages, compilers, adv. database, adv. OS, maybe more algorithms if I am crazy enough ... a biotech class maybe. If I had unlimited life and $$$ I would also get an MS in applied math, and one in statistics. Software Engineering is the last on my priority list. I would sooner study American Sign Language - better bang for my buck. You might take your math bg which I envy for granted, but software engineering is what you learn while getting paid; don't waste tuition on it. –  Job Mar 18 '11 at 22:10
show 7 more comments

18 Answers 18

From my experiences in school, it is out there and it is not common as a stand-alone, but is usually mixed in with regular CS. When I was in undergrad, they started introducing the "engineering" concepts in 2nd year, scattered in the courses more oriented to the "practical" side of things. Courses that focused exclusively on Software Engineering (I think it was called "Software construction and design" - they didn't use the word "engineering" because that would have implied some sort of software engineering accreditation which I don't think existed then) were introduced in the 3rd year and the senior-most courses also had grad students in them.

One reason it may not have caught on as its own discipline is that in some places, to call something "engineering" requires it to be accredited. I believe that there are some schools where I am that do have formal Software Engineering courses in place, but it takes time to build up a program and get it recognized. I imagine over time it will become more common.

share|improve this answer
1  
+1. I happen to have graduated from an SE program accredited by the CEAB. Canada seems to manage the word "engineering" more effectively when it comes to education, for whatever reason, which is definitely a benefit. Fewer people seem to associate it with things like Microsoft's SE certification, for example (although I still get plenty of "How is SE different from CS" questions). –  Matthew Read Mar 18 '11 at 17:34
add comment

It's a chicken and egg problem. Very few schools offer it as a major, especially in undergrad. In addition, there are very few dedicated software engineering faculty around, and many CS departments have a traditional CS or even math/science background. Nobody knows about it, so there is very little demand.

Same goes for grad school, I have a PhD in software engineering, rather than CS, which is extremely rare.

share|improve this answer
add comment

I have a Bachelors and a Masters in software engineering (SE), so this is near and dear to my heart. I'm no academic, but these are my ideas on why CS is more popular:

  1. Because CS is more well defined as a major. Although there are standards for SE degrees, and accreditations, I've seen a lot of core differences between my degree program and those of friends majoring in software engineering at other schools, or minoring in it. To some people, SE is a blend of computer science and computer engineering. To others, it's about good software development. To others, it's all about management practices.

  2. Your professors were computer scientists.

  3. Really, to do SE you need the foundation in CS - this is why the trend seems to be offering an SE minor or Masters. It doesn't matter if you can TDD or know RUP backwards if you can't understand how/why to write code in the first place.

  4. Companies are still looking for (and populated with) CS majors - that's what they expect coming out of school, so schools don't have much pressure to change. It'll probably just take time - for more SE to creep into CS programs, for more SE minors and majors to pop up, and for more people to get interested in it.

share|improve this answer
show 2 more comments

Mechanical engineers learn the limitations of materials under mechanical loads. Electrical engineers learn the limitations of materials under electrical loads. Civil engineering, mechanical engineering, chemical engineering, and electrical engineering are all essentially applied physics.

What is software engineering? The only limitation to software complexity is the finite capacity of the human mind. If humans were infinitely intelligent, we could instantaneously produce optimal machine code for any solvable problem.

Therefore, software engineering is a branch of applied psychology, attempting to define processes that will enable humans to write software with minimal error.

Mechanical engineers and electrical engineers have the luxury of working with standard components, whose characteristics have been thoroughly measured. However, we haven't figured out how to produce programmers with any repeatability at all. The enormous variability in human capacity makes software engineering a very soft discipline. The only thing "software engineering" has in common with other engineering fields is the word "engineering".

Software engineering is much more like business administration. About the best we can do is look at past projects, searching for common practices among the successful projects. Even then, no set of processes can guarantee success, no more than an MBA can assure the success of a new business.

Almost all the useful advances in software engineering have come from working programmers, not from academics. Academics have produced things like Ada and the Capability Maturity Model. Working programmers invented test-driven development, and continuous refactoring, and all the agile practices we now consider essential.

share|improve this answer
show 1 more comment

I think it is becoming more common, but you have to keep in mind that most SE programs have only been around for a few years probably less than 10. That means developers even as young as late twenties probably didn't have the opportunity major in SE. Also, software as an engineering discipline is way younger than more traditional engineering disciplines such as mechanical or electrical so you can't really compare them yet. Just let it stew a bit. I bet it becomes way more common in the next decade or so.

share|improve this answer
add comment

Most of the colleges I've seen and the one I attended tack on the Software Engineering onto the CS degree. Although, I'm a bit dated on that.

IMHO you really need to know how to program and have experience programming before you can be a good software engineer. Some parts of Software Engineering can be learned at school, but to really understand it and be good at it you have to have some experience under your belt programming.

share|improve this answer
1  
I agree. My school has a "SE option" for the CS program, and the actual SE program definitely focuses on the CS theory and programming skills before adding in design and other aspects of SE. –  Matthew Read Mar 18 '11 at 17:36
add comment

Surely there are multiple reasons (I like the list given by zlopid). On of them is the fuzzyness of the term "Software Engineering". To me it always sounded like a hyped marketing term. In many cases it is more like consulting than traditional engineering. So it is hard to tell when some specific method is better than another. You could even argue that Software Engineering is not a science at all. Other parts of Computer Science are easier to judge. In theoretical computer science you have mathematical proofs and in practical computer science you have running code. As long as nobody asks how the code was generated or how to maintain it, you don't need Software Engineering.

By the way there is a related discipline called "Information Systems" that deals with all aspects of software systems, not only how to engineer them. I practice I would not want to depend on engineers only. Engineers can build you technical systems, for instance a nuclear power plant, and software engineers can build you information systems, but it needs a background in social sciences and humanities to make the right use of these systems.

share|improve this answer
add comment

At my alma mater, there was no Software Engineering degree.

I believe that's the basic reason. :-)

share|improve this answer
show 1 more comment

While I cant tell you why colleges are not putting more emphasis on software engineering, I can give everyone a good example of why they should. The following is a segment of code, if you care to call it that, from a .net application we are re-writing for a client. Our lone competitor in the area is responsible for it.

            int index = this.responseXML.IndexOf("<ShippingInformation>");
            int startIndex = index;
            string str2 = this.responseXML.Substring(index);
            index = str2.IndexOf("<PostalCode>");
            if (index > 0)
            {
                int num3 = str2.IndexOf("</PostalCode>");
                index += 12;
                num3 -= index;
                this.destZip = str2.Substring(index, num3);
            }
            else
            {
                MessageBox.Show("Postal Code not set in Shipping Information!");
                this.isCorrect = false;
            }
            int num4 = this.responseXML.IndexOf("<TxnID>") + 7;
            int length = this.responseXML.IndexOf("</TxnID>") - num4;
            this.txnId = this.responseXML.Substring(num4, length);
            this.responseXML = this.responseXML.Substring(startIndex);
            while (this.responseXML.Contains("<ItemNumber>"))
            {
                //This is the biggest bunch of garbage code I have ever seen!!!
                this.itemCount++;
                int num6 = this.responseXML.IndexOf("<ItemNumber>") + 12;
                int num7 = this.responseXML.IndexOf("</ItemNumber>");
                int num8 = num7 - num6;
                string str3 = this.responseXML.Substring(num6, num8);
                int num9 = this.responseXML.IndexOf("<Qty>");
                int num10 = 0x19 + num8;
                this.totinfo = this.totinfo + this.responseXML.Substring(num6 - 12, num10);
                num9 += 5;
                int num11 = this.responseXML.IndexOf(".00</Qty>");
                int num12 = num11 - num9;
                string s = this.responseXML.Substring(num9, num12);
                this.qty = short.Parse(s);
                this.totinfo = this.totinfo + this.responseXML.Substring(num9 - 5, num12 + 5) + "</Qty>";
                this.totQty += this.qty;
                num7 += 13;
                int num13 = this.responseXML.IndexOf("<Desc1>");
                int num14 = this.responseXML.IndexOf("</Desc1>");
                num13 += 7;
                num14 -= num13;
                string str5 = this.responseXML.Substring(num13, num14);
                this.totinfo = this.totinfo + "<Desc1>" + this.qty.ToString() + " " + this.responseXML.Substring(num13, num14) + "</Desc1>";
                if (this.itemCount == 1)
                {
                    this.fullDesc = s + " " + str5;
                }
                else
                {
                    this.fullDesc = this.fullDesc + ", " + s + " " + str5;
                }

It goes on like this for 800 some odd lines. Every single person at that company has a Computer Science degrees. (banghead)

share|improve this answer
3  
Us lowly non-CS majors just can't understand this sort of beautifully designed masterpiece. –  Morgan Herlocker Mar 21 '11 at 18:32
show 1 more comment

In the US, at least, the idea of an undergraduate "liberal arts" degree is pretty widespread (most places other than state U's or technical schools - from small private religious colleges to Harvard's undergrad program). The (perhaps idealistic) concept from the institution's perspective is to provide a broadly-applicable academic education rather than job training, and from the student's perspective it's about the college experience and figuring out what you want to do rather than, well, job training. These schools don't offer - often are prohibited from offering - "practical" or "technical" majors. So my school didn't have a journalism major, but it offered "English with a focus on Public Voices". Or, in my case, no Software Engineering program, but CS with an emphasis in SE.

Or, another way of looking at it is that not all future software engineers know that they are, in fact, future software engineers because they've been programming since they were 12. People who want to be engineers go to schools offering engineering degrees. People who don't know want they want to do when they're 18 dither and take random courses until they get hooked by something, like CS (and their parents give a big sigh of relief that even though they don't know what their offspring are babbling about with this computer stuff, but are glad that they didn't go with Medieval Studies).

share|improve this answer
2  
Then maybe it comes down to the fact that it's hard to build a bridge without a mechanical engineering degree, but I can build software without a software engineering degree? –  Beekguk Mar 21 '11 at 19:49
show 1 more comment

I think part of the problem is using the word "Engineering". In an academic setting there is meaning to that word. There are core engineering classes that are required to get an "Engineering" degree, no matter what type of engineering degree. Those are the core classes that will enable a graduate to pass the Engineer In Training Exam. I don't recall the exact number of classes but I think there are at least 10. Computer Science majors do not take those classes. Computer Engineering majors do. Odds are that Software Engineering majors would not take those classes either. Thus, I suspect that many schools do not allow a degree in Software Engineering because it isn't really an engineering degree. If the graduates can't pass the Engineer in Training exam then they didn't get an engineering degree. Thus, most schools call the degree something else other than Software Engineering since it really isn't an engineering degree.

share|improve this answer
add comment

It actually has in a lot of places! My University and some universities around the country.

Some Universities are creating programs that are named "Computer Information Technology". Which are Engineering and programming, not so much theory and math.

Many universities are offering Masters programs titled "Software Engineering". However you need a B.S in Computer Science or most of the equivalent courses to complete the M.S.

share|improve this answer
show 3 more comments

Well for our college we only had 1 class in it, and it was the same class as my senior design. So it "feels" like it was kinda thrown in, Good teacher though however I don't remember a whole lot from it since we were working on our BIG project during the time.

Maybe it's just a tough curriculum to keep students interested? or it changes too much?

share|improve this answer
add comment

Personally, I don't like "Computer Science Degree" and "Software Engineering Degree" and similar I.T. titles. They are too much generic. My degree is "Computer Science Engineer", is generic. And I ended getting specialized in Software Development.

Take Medicine, as an example. After generic Medicine degree, there are "Cardiologist Degree", "Neurologyst Degree", "Obstretician Degree", they all have some common ground, but have some clear and documented specialization career path.

share|improve this answer
show 3 more comments

Full name of my major is "Software Design & Engineering"

BTW. In most of continental Europe the major is popularly called Informatics, not Computer Science.

share|improve this answer
add comment

At my university back in the stone age anything with "Engineering" in the title had to go through the College of Engineering and said college was very emphatic that engineers are engineers and specialization is for the birds. You did ultimately get a specialization, e.g., mechanical engineering or electrical engineering, but it was literally just a handful of courses. Everyone had the same core classes. End of story.

There was a new "Computer Engineering" program (which I think was dissolved shortly after I left) but it was a specialization of electrical engineering for digital systems. Not programming, not software engineering.

Other universities have a softer policy and it's not uncommon for physics, math and computer science to be in the College of Engineering instead of the College of Science (or local equivalent). But I still think there's a sharp divide between computer science, software engineering, and what we suffer in the real world. There's a lot of overlap but the emphasis is different.

BTW I remember some engineering students trying to get a quick 'environmental' credit by taking my 3rd year thermo class. (Our university required everyone to pass at least one upper-division class in each college. In practice this was usually just an introductory class intended for students from other colleges but not always.) They were there for only one or two classes before they split because engineering thermodynamics and physics thermodynamics are VERY different beasts.

share|improve this answer
add comment

I think colleges have it the correct way around. In my opinion the CS side is harder, a good computer scientist most likely has the aptitude to be a good software engineer, but not necessarily the otherway around. As an employer, I'd rather hire a super bright maths grad from a top uni, who is hungry to learn to program, than an average software grad from a bog standard uni who claims he already can.

share|improve this answer
add comment

I come from a math/computer family. Of the six of us, five have degrees in math or computer science and four went into some form of computer science. None of our children are considering computer science as a major. I'm thinking that they see all of the time we spend on and off the job doing our job.
Edit The younger set sees something that they don't like in programming. My take is that it is the hours versus money thing.

share|improve this answer
4  
I don't see how this relates to my question. I'm asking about the education of those that want to develop software, not why some are not interest in programming. –  Eric Wilson Mar 18 '11 at 16:58
2  
My children also want nothing to do with software engineering. Unlike law, medicine, finance and accounting, software engineering is a not profession in which one is compensated for cumulative knowledge. They look around and see how many of their father’s friends were forced out of the industry mid-career and say, “Heck no!” –  bit-twiddler Mar 18 '11 at 19:50
show 2 more comments

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