Computer science vs software engineering

There is much debate about splitting computer science and software engineering. Computer science being the theoretical stuff and software engineering the practical, but is that feasible?

bridge constructionWe probably agree that software development should be engineering. Building a software application should be like building a bridge. The problem is that it is not.

Joel Spolsky talks about three phases in software development:

  1. Design needs an artist
  2. Building needs an engineer
  3. Debugging needs a scientist

When the building part is already engineering, we just need to figure out, whether design and debugging can be made engineering or (mostly) optional. If you use a framework like Rails, you don’t need to design (apart from CSS and URLs). Type checking and verification could help to make debugging disappear.

A software developer describes the requirements for a job as a software developer:

  1. communication skills “The best developers are often the ones who can explain problems and solutions the most clearly to others”
  2. teams “Very few developers really work alone”
  3. analytical skills, particularly around ambiguous problems “It’s important that developers understand the intention of what they’re being asked to do as well as the implications of a solution they’re thinking of and can weight and communicate these”
  4. development processes “Not a theoretical one—they need to work on teams that use formal, top-down development process, agile development, teams with other developers, teams with test processes, and so on”
  5. an ability to learn on the fly
  6. competence in several programming languages “C++ is typically a must; C# or some other managed-code language is also mandatory, competence in one dynamic language, such as JavaScript, should also be present and the graduate should have the ability to know which to use when.”

No need for insight into algorithms or math. This may help, but isn’t mandatory.

There is still a big part, where computer science and software engineering intersect. Somebody has to build the standard and extension libraries. Somebody has to understand the math for multimedia and implement it.

For the common (web or desktop) application development, you don’t need to study computer science. This leads me to the conclusion that a software engineering education could be separated from general computer science. Do you agree?

Published in: on September 10, 2007 at 9:09 am  Comments (5)  

The URI to TrackBack this entry is:

RSS feed for comments on this post.

5 CommentsLeave a comment

  1. I don’t agree.

    You are correct that one does not need to study computer science to build common applications, but that is much in the same way as one not needing to be an Engineer to assemble IKEA furniture.

    What is practise without any theory behind it? It’s trivial cases for common problems. The only way to avoid the design phase is to have it already included in a cookie-cutter solution. And there will _always_ be bugs.

    I think that computer science, software engineering, and all the related fields form a fine gradient of disciplines, and the intersection of material is necessary.

  2. Building complex furniture doesn’t require a university degree either.

    Academics may be needed to develop new materials and better tools. Sawing, milling and drilling wood is a craft, though.

    The world is full of trivial cases of common problems. That’s why Ruby on Rails is so successful.

  3. I would have to agree with the ‘separation of powers’ because in my experience the process of ‘engineering’ is very much different than the process of ‘science’. An engineer will look at a problem and then use available tools to come up with a solution. In contrast, a scientist will typically look at a problem and try to come up with a NEW tool to solve the issue.

    That being said, I think that any computer scientist that is worth his salt will have solid software engineering skills (and a good software engineer will have good computer science skills). const-correct templates with virtual, overloaded sub-templated functions, oh my!

  4. I did a Computer Science degree, but became a software engineer. I guess lots of us do. I remember thinking: “My education has not prepared me for this!”. I did all the algorithms and maths and theoretical stuff in college, including formal languages, proofs of correctness, equivalences etc. I wrote a compiler for my last year thesis. Cool, but pointless.
    None of it was practical enough to inform me about the following: working in a team, applying software to solve real-world solutions, user-centric design, debugging messy applications written by idiots, etc. All the stuff you need to know about!
    Having said that, I never stopped learning.

  5. In my opinion, having a computer science degree to develop web/desktop “business” applications is like getting a law degree to be in sales. If computer science majors want to apply their learned skills, would they not be better off developing complex software used by NASA, defense military and such?

    I agree with jrdittmann, I also see computer science majors as those that build tools for developing software.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s

%d bloggers like this: