What’s the difference between software engineering and computer science degrees?
Getting a job as a programmer no longer requires that you have a degree in that field—or even a degree at all. Our 2022 Developer Survey found that slightly more than 70% of respondents learned to code using online resources. And about a quarter of professional developers did not have a college degree.
Of course, plenty of developers do have college degrees in relevant fields. If you’re looking at colleges in the hopes of landing a coding job, you may have to decide: Computer science or software engineering? Both are great fields to study for a career in technology, so what’s the difference?
A formal education in either subject will contain a large amount of overlap, particularly in the first half. Both fields require a solid understanding of math, logic, and basic computer programming skills and concepts. After this, the two diverge significantly.
This article will discuss the subjects that each of these majors will cover, where they overlap, and which you might want to pick depending on where you’d like your career to go.
What is computer science?
Computer science is the study of algorithms, information, and automation. This is a domain separate from programming; computer science builds off of the theory of computation, which has deep roots in logic, mathematics, and philosophy from hundreds of years before computers existed. In fact, the first computer science departments grew out of mathematics. The founder of the first computer science department, Purdue University professor Samuel D. Conte had a PhD in mathematics.
You can get a sense of what a university computer science degree will teach you by the questions you should be able to answer in the curriculum. What is the most efficient way to sort a list of random numbers? How can we transmit information between two people privately and how do we mathematically prove it is secure? Is there an algorithm that will sometimes return an answer, but other times continue endlessly? Much like how material science seeks to understand the fundamental properties of the things that civil engineering uses to build a bridge, computer science explores how we can organize and compute information as the foundation to writing software.
Take a look at our Computer Science Stack Exchange to get a sense of what sort of questions the field covers. Where the questions on StackOverflow.com cover the ins and outs of using programming languages and tools that build software, the computer science site is almost entirely about algorithms.
What is software engineering?
However, knowing how to calculate things doesn’t mean you can build the operating systems and computer programs that have become ubiquitous in modern life. Software engineering is the study of how to design, build, test, and maintain software. How do you coordinate thousands of programmers to work together to build a new version of the operating system on your phone and make sure that millions of people can install the update successfully? How does a social media website organize its code so that people can use the same program in dozens of different languages? Software engineers need to understand the algorithms they use to build a product, but they focus their attention on designing and building a working product for thousands or millions of people.
In fact software engineering is less about the actual code that gets written and more about the processes one goes through to write the code. Ensuring that code is properly tested, deploying code changes to production are reliable and automated, and teams are working together with a common set of standards and practices are paramount to running a successful software project. Here at Stack Overflow, we have an Architecture Guild that regularly meets so that we can come up with standardized practices for all of engineering that ensure that our teams are working together as best as possible. As Yogi Berra once said, “In theory, there is no difference between theory and practice. In practice, there is.” Software engineering is about ensuring that coding practices get as close to theory as practically possible.
However, there is a specific difference between these degrees in certain countries like Canada (and technically in many other places). Canada has very strict laws regulating who can call themselves an engineer: to do so, you must be licensed by the local engineering board where the title will be used, similar to how there are rules around calling yourself a medical doctor or a lawyer in many countries. While this requirement initially came about because of a bridge collapse, it applies to anyone who calls themself an engineer, including software engineers. If you want to say you are a software engineer (or anything else with “engineer” in the title) in Canada, you need to be properly certified; otherwise you risk being fined.
Again, to see what the field discusses, check out the Software Engineering Stack Exchange. You’ll see a lot of questions about things like software design, bug tracking, and deploying code.
What else could I study if I want to code?
Computer science and software engineering alone aren’t enough to build a software product. Computer engineering works to design the CPUs, GPUs, and data storage devices that enable our digital worlds and none of those devices would even turn on without electrical engineering. Mathematics builds the theory and understanding of numbers that underpin the foundation of cryptography and statistics builds the tools to process and understand the information we gather. Newer fields like data science are starting to get their own degrees as artificial intelligence and advanced statistical modeling blurs the line between math, statistics, and computer science. Many other fields in science and engineering use a combination of computer science, software engineering, computer engineering, and mathematics to design planes, develop vaccines, and create animations for TV and film. In fact, many of the best programmers I know have degrees in mechanical engineering or bioinformatics and use their skills to develop robotic systems or medical drug treatments. Even medical degrees like neuroscience and audiology are now requiring programming knowledge so clinicians can compare brain images or sound recordings in scientific programming languages like R or MATLAB.
Put together, computer science research creates the building blocks that software engineering uses to design and build a working computer program. Here at Stack Overflow, software engineering practices have helped us bring together a community that serves around 500 million pages a month. Our team uses these practices to coordinate over 200 programmers to put together the website you see today. What most people might not know is that this website runs on just five servers together small enough to fit in your living room. A solid understanding of computer science principles allowed our team to efficiently store and compute all the data we keep to help people get answers to their questions. As we work to move our company fully into the cloud, we rely on software engineering principles to allow us to continue to smoothly run all our websites while we redesign our software architecture and move our code from physical servers to cloud services.
There is no right path for how to become a developer, so keep asking questions to help you find the best path for you!
Tags: College, computer science, software engineering
23 Comments
The restrictions on the use of “Engineer” in Canada are most noticeable in the Province of Quebec (where Engineer (or Ingenieur – the French equivalent) is very tightly restricted. There are places in the US (Texas, for example) where there are restrictions on the use of the term as well (though they were relaxed somewhat about a decade ago). Take a look at: http://txrules.elaws.us/rule/title22_chapter137_sec.137.3
Hi Keith,
Nice insight on the difference.
Interesting too that of Canada’s strict laws.
Thanks,
Chris
Nice for the information,,it really helps.At least I can now decide on what I want to do
XR, that engineering has AR and science AI of AR !
Did you guys research if they can afford to take loans to enroll in college ? That can be scary for lot of kids. Given there is no gaurantee of jobs
Computer science is as much about computers as astronomy is about telescopes.
Or, another analogy, computer scientist can be compared to a civil engineer, where a coder is a bricklayer. Having a computer scientist writing code is as much of a waste as having an engineer or an architect laying bricks.
What do you think is an overall better option for future? CS or SE?
Depends on what are your goals and interests. CS is more an academic route, for people who’d like to become researchers and dig into the mysteries of the universe. And yes, I believe that CS is the key science to bind them all – the notion of computability brings everything else together, gives the foundation to mathematics, gives the method to natural sciences, gives a way to represent the knowledge to all the sciences imaginable and not yet invented.
SE – that’s a practical, engineering discipline, for those who want to build tangible, real world things. So, whatever moves you more…
Of the two which one is the best
SE is a branch of CS.
Software Engineer or better yet Computer Engineer (CE) – an electrical engineer with a software/computer specialization
Interesting take, I like it.
Minor correction: That theory/practice quote isn’t from Yogi Berra. It likely came from a 1986 book on Pascal by Walter J. Savitch, which cited it as a remark “overheard at a computer science conference”: https://www.snopes.com/fact-check/practice-and-theory/
Software engineering has largely failed to produce correct software, partly because of industrial practice to sell a product before it is ready in order to get a revenue stream going. “Ship it and let the uses debug it” seems to be the mantra. A better approach is exemplified in “Essential Logic for Computer Science” (MIT Press, available at Amazon). The authors use formal first-order and second-order logic, gently introduced, to establish the correctness of some software applications. It was used for some years at U. of Oklahoma to teach computer science undergraduate students about this approach.
Traditional Software Engineering as taught by CMU is a waste that only NASA and the DOD can afford. However, software engineering is not. It’s a matter of the discipline being done, and realizing one is not an artist but a team player.
Someone needs to write better code for this page. Just going through the comments and it keeps wanting me to reply to a comment! So annoying!
THANKS.
I thought I was alone.
Agree, scrolling through this page on mobile is a nightmare… On desktop it works well enough.
Great points. I’d go further to say that while formal school prepares you to become a computer scientist, your jobs are where you learn to become a software engineer. To me software development Is more of guilded trade where your current organization may have certain transferable and non-transferable processes and procedures.
Case in point the article states that Stack Overlfow has an Architecture Guild which meets to discuss and standardize practices. This is great for an organization, especially at scale. The key takeaway for software engineers is that your new company may not always do things like your old company, and that is OK.
This is an excellent piece and is spot-on explaining the differences. Unfortunately, the fact that “…70% of respondents learned to code using online resources…” may be the root cause of the sorry state of software development today. I’m not saying learning online is always bad, but once a bad habit is developed, it is very hard to change. I would guess that almost all CS and SE majors in college had learned some coding online before entering the university. But, a formal education helps to eliminate bad habits and to start to respect software designers and QA.
When I did my Computer Science degree in the early 90’s, it taught you a lot about what’s inside the physical boxes… we didn’t have to build anything (sadly), but we did have to understand analogue and digital electronic circuits, the design of RISC and CISC architectures (not just how to program them), the physical layer of the OSI network stack, etc.
It seems engineering disciplines have changed, probably with the expansion of the industry. I graduated with an ABET accredited Computer Engineering degree (in 1998) and it involved a mixture of electrical engineering and computer science. We had to design and build circuits, analyze frequencies and the dynamics of electricity, as well as static mechanical stresses, and understand the calculus behind all of it. It also covered theories in artificial intelligence, algorithms and data structures, logic and digital analysis, assembly, C++, compiler design and theory, and operating systems.
What you’re describing here seems like the difference between a junior software developer and a senior software developer. Engineering typically has a broader understanding of the problem domain but neither CS nor SE is short on theory.
This article seems to imply a computer scientist cannot develop a complete, real world application without the help of a software engineer. This is untrue, any proficient computer scientist will be able to fulfill the roles of a software engineer without a lot of trouble. CS isn’t just about the theoretical side of computing, that’s what makes it a much more complete (and harder, IMO) career path than SE, computer scientists are expected to be proficient both as mathematicians, and developers