PDA

View Full Version : Computer Science vs. Software Engineering.



RavUn
October 29th, 2008, 06:42 AM
Hello. I've received mixed reviews on both software engineering and computer science. Some articles say one's more theory based than the other while others have conflicting arguments. As far as I can tell, computer science is mostly about writing code/developing programs while software engineering is about designing programs and leading a team. Can anyone expand on this or tell me if that's correct or not? I started as a computer science major but was told by my career counselor that software engineering has better job security so I switched.

I started doing my major courses about a year ago and hope I am going the right way (luckily, all of my courses so far are for both CS and SWE). I've been looking over the courses for CS and SWE and the CS courses seem a little more fun since it's mostly programming. However, SWE seems to be aimed at user interaction and efficiency. Is this the case? I enjoy programming but I don't want to be a code monkey.

So, like I said, could anyone expand on what the differences are and what types of jobs and salaries are out there for each?

Thanks.

LaRoza
October 29th, 2008, 06:46 AM
Surely there is a career services at the school?

The course catalog likely explains the difference between the courses.

CptPicard
October 29th, 2008, 07:29 AM
Computer Science is the theoretical study of problems, their structure and properties as they relate to some abstract computational device. At its most fundamental, CS tries to answer questions on what is computable in a "mechanistic" fashion in general (http://en.wikipedia.org/wiki/Computability_theory_(computer_science)) -- that is, what kind of problems you can give an algorithm for that some machine is then able to compute without the further invervention of the human intelligence.

A step up from these fundamental questions of computation are algorithms, their design and analysis. Usually, mathematics is used to describe the problem and analyze the algorithms which often rely on some specific features and structures of the problem. There are a lot of general algorithmic tools and abstractions that can be applied to a wide range of problems and which yield solutions of different efficiencies, most importantly data structures (http://en.wikipedia.org/wiki/Data_structures) (which, interestingly, are often nicely demonstrative of the more general computation vs. storage tradeoff).

Programming languages occupy an interesting niche... first of all, formal languages and theory of computation are linked at the hip (http://en.wikipedia.org/wiki/Chomsky_hierarchy) to begin with in very deep ways (recognizing classes of languages is equivalent to solving problems of differing difficulty classes). Although all Turing-complete languages are fundamentally equivalent in computing power, it is interesting to consider what the human-computer interface looks like to best serve the interests of the programmer.

In general however, when taking a proper theoretical CS education, you don't necessarily code at all. I managed to get by on pencil and paper most of the time, and coding class projects was just a time-wasting nuisance when I had to actually do that.

Software Engineering can on the other hand even approach Business school stuff... they are trying to bring some sort of "engineering practices" into software development, with the idea being that quality of software can be increased by improving the process. I am not all that convinced of that, although of course in a business setting you need some sort of control over your process. I just feel that sometimes, they imagine that an aircraft manufacturer makes better airplanes by making their bureaucracy better instead of getting Engineers who actually know their Physics better...

When it comes to "job security" and job prospects... I prefer my CS education any day over anything else, as it gives me a fully independent ability to look at the whole field... the practical stuff can always be learned on the job, there is no need to go to school for it. For example, I would never ever hire anyone who didn't know their sorting algorithms and basic data structures no matter how good they were in their understanding of the process and OOP design patterns or whatever...

ad_267
October 29th, 2008, 07:41 AM
Is the software engineering course run by engineering? At my university there is computer science which is part of the science department and software engineering which is an engineering degree. This means that software engineers end up doing a lot of the mathematics, design and other general engineering papers. Software engineers of course still know their programming stuff. I'm doing biomedical engineering and even we've been taught basic sorting algorithms, as well as things like finite differences/elements, solving systems of linear equations and systems of ODEs.

Changturkey
October 30th, 2008, 02:49 PM
Some schools here in Canada also have CS specializations in Software Engineering.

themusicwave
October 30th, 2008, 03:08 PM
I completed my B.S. in Software Engineering last year. Much of what the good Captain said is correct.

At my college, they offered Software Engineering in the School of Engineering and Computer Science in the School of Science. There was a good deal of cross over, and most of the difference was the last 1-2 years.

As an SE major I still had to take plenty of mathematics and algorithms classes from the School of Science. The two programs started the exact same.

However, in the last year or two they diverge. I took classes in databases, software testing, software design. They took more advanced math.

We focused on practical programming, we actually built stuff. They mainly did theory.

I personally prefer actually building stuff to just doing the theory. I can certainly hold my own in the algorithms and theory side of things, but not as well as a CS major.

However, many of my CS major friends struggle to create actual working programs. In college they never did any big projects, just lots of math, so they have trouble adjusting.

I honestly think both sides are needed. We need both SE and CS in this world, your choice is really a matter of personal preference.

Luke has no name
October 30th, 2008, 03:31 PM
Computer Science is not all about programming. That is a part of it, but it is as much about theory, math, and abstract concepts as it ever is about programming. That said, a CS degree should make you a GOOD programmer if you use what you learn in theory classes to write good algorithms.

My school has a master's program in software engineering, but not an undergrad degree.

fsleeman
October 30th, 2008, 03:40 PM
Historically, Computer Science had been part of math department. As software projects began to get very large, some people starting looking at software development as an engineering problem. When you design something as large and complicated as a skyscraper you need to follow a set of formal procedures to make sure there are no mistakes. Many critical systems today are run my large and complicated software systems and the same care is required.

Having an engineering degree, I will always be partial to engineering over the pure sciences. That being said, there is no point arguing whether computer science is better than software engineering, they are just different. As previously stated, CS is usually more math based and theoretical (but not always). Software engineering, or CS as taught as part of an engineering program, tends to lean more towards teaching formal methods of designing software.

You should pick whichever one suites you better. I picked engineering because I enjoy working on projects with more tangible products than I like doing proofs or theoretically designs. If you are more math inclined non-engineering CS might be the right fit for you. Ultimately, the differences between the programs are determined by your school.

Tomosaur
October 30th, 2008, 08:22 PM
My job title is 'Software Engineer', and I am responsible for the design and planning of development projects. However, as my company only has a small software department, 'Software Engineer' and 'Software Developer' are pretty much exactly the same thing.

I am a code monkey, but I also design my bananas.

lisati
October 30th, 2008, 08:28 PM
Doesn't an engineer who designs a bridge or a building build upon the work done by scientists?

Tomosaur
October 30th, 2008, 08:33 PM
Doesn't an engineer who designs a bridge or a building build upon the work done by scientists?

Yes.

CptPicard
October 30th, 2008, 09:00 PM
I am a code monkey, but I also design my bananas.

This is all I would expect from someone who has to live in the real world, that is, most all of us. I love being competent enough to design my own bananas, and I wouldn't want to work with anyone who isn't able to :)

My university (http://www.cs.helsinki.fi/) also has a software engineering specialization to it's Master's degrees, and I do not look down at them as much as it may seem like... at least they are made to take the Theory of Computation class. :)

Admittedly my weak spot indeed has always been architecture and the "process". After graduation I have found that using higher-level languages such as Python and Lisp (of which I only had a passing academic familiarity before) have eased me more into appreciating design and the language-aspects of programming. The guys who actually study programming languages at university are right :)

However... architecture is just extension of theory if you really think of it. It is not to be overlooked, but I still am not sure if it can really be studied apart from a deep theoretical understanding. For me, these days, programming architecture is something akin to type systems married to ability to capture closures, and my programming reflects that whichever language I use... "patterns" for example are just dumbed-down generalizations of these issues.

wrtpeeps
October 30th, 2008, 09:11 PM
I am currently on a Computer Science degree, but it's the school of "Electronics, Electrical Engineering and Computer Science." I will come away with a Master of Engineering in Computer Science (go figure).

There is a bit of programming, but also a lot other stuff I hazard you wouldn't do in a bog standard Software Engineering degree.

Saying that, my university doesn't offer a Software Engineering degree.

Tomosaur
October 30th, 2008, 09:14 PM
This is all I would expect from someone who has to live in the real world, that is, most all of us. I love being competent enough to design my own bananas, and I wouldn't want to work with anyone who isn't able to :)

I am currently fixing some bespoke software for one of our customers which was originally outsourced to some other company. If I'd had the displeasure of working alongside the idiots who've made this mess, I would probably have been locked up in an institution by now. My desk has several head-shaped holes in it now :(

EDIT: While I was at university, there was a lot of overlap between the Software Development course (Which was my own course), the Software Engineering course, and the Computer Science course. It really depends on your university / college. I was fortunate enough to receive a pretty well-rounded education.

samjh
October 31st, 2008, 12:50 AM
Having studied SE and CS:

CS is like the study of mathematics and physics. Focus is on the theoretical basis of computation and computer-based problem-solving, such as algorithm design, formal proofs, etc.

SE is the engineering application of the theory. Focus is on applying engineering processes to software specification, design, and implementation, in order to achieve better quality than not using such processes.

You really need both, and indeed any good IT/CS/SE degree program will incorporate aspects of both CS and SE, with varying levels of emphasis (I did nearly 4 years in SE, and then graduated early with a CS degree after studying one additional subject). Relying purely on CS is like using only physicists to build aeroplanes, while relying purely on SE is like using only engineers to build particle accelerators. You can do such things of course, but the outcomes will likely be mediocre at best and catastrophic at worst.

Just to add: during some of the project work, I had the pleasure of working with a wide variety of students from Computer Systems, Electrical, and Software Engineering majors, and the Information Technology and Science programs. In the area of programming, I have yet to see any clear distinction in the quality of work produced by SE/IT/CS students (attitudes vary a little, SE students tended to focus on solving the problem, while IT and CS students tended to focus on how to solve it, but the problems get solved in the end anyway). The individual person matters more than their degree program, IMHO.

rplantz
October 31st, 2008, 06:48 AM
... I started as a computer science major but was told by my career counselor that software engineering has better job security so I switched.

I would be cautious about following the advice of this "career counselor." I don't think there is any good evidence that would support such a statement.

The real goal should be for you to find something that you like to do. The salary differences that might be associated with the various job titles are not worth doing something that you don't like. And chances are that if you like it, you will do a better job.

Keep an open mind and look for opportunities to learn new things. Don't be afraid to take chances, especially while you are young. You won't know whether it suits you or not until you try it.

My perspective comes from being 69 and retired. My experiences include designing analog circuits for spacecraft, neurophysiology research, lots of assembly language programming for medical instruments. My last career was a CS Prof. at a university for 21 years. And I took a turn at low-level management and administration.

What did I enjoy the most? Being a "code monkey." I do it for fun in my retirement. In undergraduate school (late 50s/early 60s) I never would have guessed that my life would have followed the paths that it did. And there are still some adventures awaiting me.

I would say that the most significant events in my career have been serendipitous, not the things I so carefully planned. The thing that helped me the most is that I enjoy learning new things.