I often get asked, what's the difference between software engineering and computer science? My short answer is this:
- computer science is the study of computers; what can they do?, how do they work at a logical (not physical) level?, how do we get them to do more things?, how do we get them to do things faster or more efficiently?
- software engineering is applying computer science to build software systems that are useful for people.
- computer engineering is designing and building the computers
I like to think of a spectrum from physics and chemistry up through electrical engineering, computer engineering, computer science, software engineering, information systems, business. Each level gets more abstract and generally builds on the previous layer.
Here is a quick overview of the three computing majors that our department
offers. I teach primarily software engineering courses so it may be a bit biased.
1. Computer Science covers the core concepts and technologies involved
with how to make a computer do something. Learning to program a computer by
writing software is essential, and computer programming is used in most
computer science courses. You will learn details about how computers and
networks work, but with an emphasis on how software and programming languages
work. You will learn how to make them do very sophisticated things (e.g.
graphics, robotics, databases, operating systems). You will also learn about
the theory behind how and why computers and software work.
In your senior project, you will tackle a problem at the frontier of computer
science. You may be building a new system, discovering better ways to design
software, or developing new algorithms for projects in entirely different
fields; it's up to you.
Past student projects include: video games, computer modeling and animation
tools, and a Linux driver for the Wii remote.
2. Computer Engineering teaches you how to design systems that
include both computer hardware and software. You will take classes on how
computer hardware works and how to build a computer. You'll take software
classes with an emphasis on hardware-related software such as device drivers
and operating systems. Computer engineering courses are taught by faculty
from both the computer science and the electrical engineering departments.
Working computer engineers design computers and the basic software that runs
them, including both personal computers and the "embedded" computer systems
that run cars, aircraft, videogames, etc.
3. Software Engineering focuses on how to design and build software
in teams.
You will take many of the same courses as you would in computer science, but
you will take additional courses that teach you about topics like requirements
engineering, software architecture, software testing, and software deployment.
You will learn about working with people
(communication, management, working with non-technical customers), processes
for developing software, and how to measure and analyze the software product
and the software process. The software engineering major requires that you
take a three course (nine-month long) sequence called the software
engineering capstone. The capstone courses are centered around a large
project for an outside customer. In recent years we have built web and mobile
applications
for Microsoft, AWS, and Cru (see more here).
Students work in teams of four or five people to elicit and develop
requirements for the system, design an architecture, build prototypes,
implement the system, then deploy and maintain the system.
See this additional comparison of
our Cal Poly programs.
For another take on the difference between computing degrees, and
what you can do with them, see
ACM's Computing Careers website
and particularly this overview.
Or, you can see what some Cal Poly students
wrote on the subject a few years ago.