Live data from Hacker News

Should top CS schools offer Software Engineering as a separate major?

nerdcollider.com

21–30 of 48 posts

Re: Should top CS schools offer Software Engineering as a separate major?

#21
post #3

I have attended both UT Austin and Texas A&M, who both proudly and decidedly adhere to opposing views. UT places CS under the Natural Sciences, and indeed I have spent the lion's share of my 3 years here studying algorithms, discrete math, and numerous levels of predicate logic. At A&M, however, the focus was on engineering robust software, using theory where applicable (straight from Dr Stroustrup's mouth during a l…

I'm studying at UT Austin, and I love all the theory work. It's challenging and makes my brain hurts, but the insights you get out of all this work changes the way you see programming and software engineering. You start yearning for beauty and elegancy, much like the algorithms we study. You find that you start thinking like a theorist in your every-day coding: what am I trying to solve? What are the constraints? How do all the pieces work together? Do I need this piece over here?

Some theory may not be practical, but learning to think the way theorists think is very, very practical. And a lot of fun.

Re: Should top CS schools offer Software Engineering as a separate major?

#22
Please don't do that! Programming is just not there yet.

All attempts to establish best "engineering practices" in programming have so far been resulting in incredibly messy and inefficient technologies. UML, Corba, Object Oriented programming -- just to mention a few.

Also, whatever comes from an academic institution, as a rule, doesn't pass the reality check until it get stress-tested by the industry. Professors who don't build real-life software systems, can't tech engineering by definition -- they should stick mainly to theory.

Until programming matures, CS algorithms and data structures should remain our nails and wood.

Re: Should top CS schools offer Software Engineering as a separate major?

#23
post #10

Yes, most people who take CS probably mean to take something more like Software Engineering (SWE) (actually they probably mean to take something like Programming, but that's not generally a field of study, maybe I.T. or I.S. is closish to what most people want to take, but the prestige just isn't there) CS and SWE are really quite different disciplines, as much as say Math is from Physics...perhaps a better analogy i…

>CS and SWE are really quite different disciplines, as much as say Math is from Physics...perhaps a better analogy is Physics and Civil Engineering.

I really am not sure about this. Software Engineering really is the process or craft of creating software. Computer Science is the theory behind how computers work. A good SE program should really be teaching more topics on top of a good CS program, because a good theory base can make a huge difference in creating good software.

The main problem is that Software Engineering, as a vocation, is just too large to really be taught. A developer that works in scripting languages only doesn't really need to be concerned about specific architectures or even most data structures because they don't really use them. However, a kernel developer needs to know all of that, and be extremely proficient in using those topics for their work.

So while a Civil Engineer only needs a subset of all the Physics topics, it's not really possible to do the same with CS and SE.

Re: Should top CS schools offer Software Engineering as a separate major?

#24
Absolutely, CS and SE are distinct fields of study. My school offered majors for both.

SE is unabashedly about software and the process of developing it. It's about design patterns, how to manage software projects, testing and verification, etc. I just looked over my school's latest curriculum and it looks like they've added electives on embedded, real-time and distributed systems.

CS is, well, CS. The software is just a means to an end. I was a CS major, and prefer it that way.

My issue with SE degrees in general is that we don't have the decades (or centuries) of process experience that other engineering disciplines (mech, civil, EE) have. Agile? Waterfall? Pair programming? OOP? TDD? We're still figuring out best practices in software.

There is a noticeable lack of rigor in most software projects, but that is correlated with software being incredibly hard to get 'right', as opposed to a bridge or other fixed piece of critical infrastructure.

Re: Should top CS schools offer Software Engineering as a separate major?

#25
post #22

Please don't do that! Programming is just not there yet. All attempts to establish best "engineering practices" in programming have so far been resulting in incredibly messy and inefficient technologies. UML, Corba, Object Oriented programming -- just to mention a few. Also, whatever comes from an academic institution, as a rule, doesn't pass the reality check until it get stress-tested by the industry. Professors wh…

Agreed 100%. Algorithms and data structures provide a better guarantee of correctness than any design pattern ever will.

But that's not only what SE about. It's also about taking all the various algos, data structures and design patterns in a system, and pulling them together on time, on spec and on budget. SE is a discipline of process, not of theory or algorithmic correctness.

But you're right in that most SE 'best practices', as they teach them in school, are sorely lacking.

Re: Should top CS schools offer Software Engineering as a separate major?

#26

Absolutely, CS and SE are distinct fields of study. My school offered majors for both. SE is unabashedly about software and the process of developing it. It's about design patterns, how to manage software projects, testing and verification, etc. I just looked over my school's latest curriculum and it looks like they've added electives on embedded, real-time and distributed systems. CS is, well, CS. The software is ju…

> SE is unabashedly about software and the process of developing it. It's about design patterns, how to manage software projects, testing and verification, etc.

True, but is an academic setting (especially a university) the right place for such a curriculum? What languages, platforms, testing methodologies, coding practices, etc. do they choose to teach? Do they try to teach things that will get their graduates jobs at Fortune 500 enterprises, or cater more toward the local/regional offerings? What about the start-up world, where you're almost guaranteed to be using a large number of cutting edge technologies that you probably won't have used before you got the job?

The thing with CS, at least as it's taught at my university and the several others I looked into, is largely concerned with making sure the students understand theory. It doesn't matter a whole lot what programming languages or textbooks they choose to use, because the assumption is made that when you get a job, you're going to have to learn the ins and outs of that particular job no matter how much you learned about specific software engineering practices in class.

This is why I wouldn't even want to study "software engineering" over "computer science," unless I knew exactly where I wanted to live and who I wanted to work for and thought the particular SE program would prepare me directly for that specific job.

Re: Should top CS schools offer Software Engineering as a separate major?

#27
Yes of course schools should offer students a choice, with CS focused on theory and SE focused on practice. In addition to those I like Richard Gabriel's proposal for a "Master of Fine Arts in Software". http://www.dreamsongs.com/MFASoftware.html We need all kinds.

Re: Should top CS schools offer Software Engineering as a separate major?

#29
Having done degrees in both electrical engineering and computer science, it seems to me that EE schools on the whole manage the theory vs. practice a bit better than CS schools do.

Just as in CS/SE, EE has a wide range of topics, from the very practical ("how do we organize a team to build this") to the very theoretical (quantum mechanics, nonlinear control systems, signal processing). Yet somehow, no one in the EE industry is lobbying for two separate majors (I know; I work in it).

In EE, it is just accepted that you just need a theoretical background to be a top circuit designer. This isn't really open to argument: the best ideas and the best designs are almost always the result of careful analysis and deep understanding of the underlying phenomena. When I interview someone, I'd much rather know how well they understand control theory than how well they can throw together yet another folded cascode. (I'm sure there are exceptions to this rule, but frankly I have yet to meet one.)

Most good EE departments naturally have a few separate tracks that you can follow as an EE. For example, at MIT, the EE headers are circuits (6.012), signal processing (6.011), E&M (6.013/6.014), and bioelectrical (6.021). You had to do some work in each, but everyone generally gravitated towards one or two of them. As a result, people who want to do hard core device physics can take a very different set of classes from those who want to design microprocessors.

At MIT, the same model applies in the CS department. There, the headers are 6.033 (computer systems engineering), 6.034 (AI), and 6.046 (algorithms), and under each there are vastly different topics offered, from compilers to classes basically indistinguishable from pure mathematics :). As a result, I don't feel at all like my CS education was too theoretical: I was able to choose a somewhat more practical path.

Given my experience, I hold with those who favor the ability to diversify in accordance with one's interests. It has served me well, anyhow.

Re: Should top CS schools offer Software Engineering as a separate major?

#30
Interesting: he doesn't identify the biggest problem with offering Software Engineering as a separate major. I have my suspicions as to why.

Here's the big problem. Incoming students usually pick majors as freshmen or sophomores. These students do not understand the difference between software engineering and computer science: they naturally assume that by signing up for a software engineering major they'd be preparing themselves for the exciting world of coding. After all that's what you're doing, right? Electrical engineering students learn to build actual circuits. Why shouldn't software engineering students learn to build actual programs? Totally reasonable.

Much of this problem is due to software engineering's misappropriation of the term "software engineering": but to students that term is largely synonymous with "software development" (and students aren't alone -- this is a common association in the industry as well). Unless software engineering faculty do a better job of explaining the difference, this will continue to be a major bugaboo.

The problem is that it's not in the interest of software engineering faculty to make this distinction to students, because to nearly all students, building a computer game is much cooler than defining its UML layout on paper. Departmental budgets are driven by butts in seats... why make it clear that a student who wants to code that he's in the wrong major because of an unfortunate terminological distinction coined in the late 1960s?

Post reply on HN