A computer-focused degree can open a lot of doors: not only in the tech world but in healthcare, retail, entertainment, and other industries as well. The market for computer scientists is growing much more quickly than the aggregate job market; the same is true for jobs in cyber security, information systems management, and niche tech fields like machine learning and robotics. Computing jobs may no longer be the number one source of new wages in the US, but qualified computer experts remain in high demand. And, all those jobs in computer science and computer engineering are among the most lucrative out there.
Filling roles in technology jobs often means specializing in computer science or computer engineering. While there is some overlap between these disciplines, there are also ways in which they are very different.
The same is true for computer science and computer engineering degree programs—and the jobs they prepare you for. Computer science is a broad discipline that encompasses programming, architecture, and computing theory. In contrast, computer engineering focuses primarily on computer hardware and software systems, and how they align in form and function. If you love computers, choosing between these two disciplines can be tough. The key to making the right choice is understanding the difference between them. In this article about computer science vs. computer engineering, we cover:
The difference between computer science and computer engineering isn't as simple as many think. The popular distinction—that computer science is software-focused and computer engineering is hardware-focused—is overly simplistic. After all, the design of computer systems hardware is part of computer science, and computer engineers write software. Let's dig deeper.
Computer science (CS) focuses primarily on computational theory, information processes, and software design, with applications across a broad spectrum ranging from cyber security to robotics. There's a lot of math and complex programming involved. It tends to segment into theoretical and practical silos: theoretical computer science is abstract and heavily rooted in mathematics and algorithms, while practical computer science deals with things like computer performance, network management, and security. Artificial intelligence might seem to fall on the theoretical end of the computer science spectrum, but it's actually practical.
According to computer scientist and researcher Peter Denning, the fundamental question that drives computer science forward is, "What can be automated?" The fundamental question pushing innovation in computer engineering, on the other hand, might be, "What tech can we build for automation?" Like computer science, computer engineering is concerned with solving real-world problems, but it does so primarily with hardware rather than software. Computer engineering, or CE, is a hands-on, research-oriented field where computer science, electrical engineering, and physics come together. It is a broad discipline because even relatively simple computer components are now incredibly complex compared to those regarded as leading-edge just a few decades ago. Computer engineering does involve writing code, but when computer engineers code, it's often because they're building entire systems from the ground up.
Computer science and computer engineering are distinct disciplines, but they're inexorably linked—neither can exist without the other. Hardware and software are essential elements of all computer systems, from the phone in your pocket to the robotic arm that assembled your car's chassis. Both fields focus on data, automation, and discovering computers' capabilities. Computer scientists and computer engineers alike use computers to solve problems and power modern technology. Programming is part of both computer science and computer engineering. And both fields are concerned with optimizing human-computer interaction.
Professionally, computer scientists and computer engineers work on the same problems because both areas of expertise contribute to the design, manufacture, maintenance, and optimization of computer-driven technology. This may come as a surprise if you're currently researching computer science degree programs or computer engineering degree programs. Different departments offer these disciplines at many colleges and universities, and students in each program don't collaborate at all. However, according to the University of Houston, this is a quirk of history more than anything else. "The disciplines," the school writes in its Computer Engineering FAQ, "are broad enough that you have to separate them somewhere."
Sometimes, degree programs for computer science majors and computer engineering majors at both the bachelor's degree and master's degree level overlap. Still, the focus of these degrees tends to be quite different. Core courses in computer science master's degree programs focus on topics like:
This coursework will cover classic and modern algorithmic ideas, and focus on how to design algorithms and measure their efficiency.
Topics in this course will cover formal logic notation, integer congruences, discrete probability, asymptotic notation, and growth functions.
This class should introduce tools and techniques for professional software construction, scripting languages, and web programming.
This course will expand on component model frameworks, code inspection, stress testing, and unit and integration testing.
The emphasis here will be on cooperative and collaborative work in creative problem solving in computer program development.
Classes will focus on definitions of ethics and privacy, legislation and legal implications, network design, penetration and vulnerability testing, and risk mitigation strategies.
Coursework here will outline data types and structures including trees, sets, arrays, stacks, linked lists, and graphs with techniques for processing and storing.
Topics in this class may include exploring speech and vision in computer interaction, natural user interface, intuitive media authoring, language learning, and the design behind HCI interfacing.
This class will study the principles of information problem solving, human-computer interfaces, digital information representation, and searching and organization of information on the web.
This course will look at the foundations of the internet- protocols, security, performance evaluation, and algorithms for routing and congestion control.
Topics in this class will include memory management, interrupt handling, process synchronization, interprocess communication, virtual memory, and file systems.
Coursework will cover software design principles, families and hierarchies, pattern-oriented design, modeling, and analysis.
This class will focus on both the theory and practice of interface design, including interaction styles, dialogue design, software infrastructure, and human factors.
Computer engineering focuses more on hardware. Students in CE programs take core classes in:
Topics here will include learning, automated reasoning, natural language processing, knowledge representation, game playing, and computer vision.
This coursework will focus on data representation, specialized processors, performance evaluation, and memory hierarchies.
This classwork will include number representations, logic minimization, arithmetic circuits, and asynchronous circuits with coding, troubleshooting, testing, and documentation of design.
Material here will cover the memory architecture, data compression technology, and the digital signal processing algorithms used to measure, compress, and filter analog signals.
This class will deal with engineering in frequency response, semiconductors, diodes, field effect transistors, operational amplifiers, and transformers.
This work will focus on rapid prototyping and design methods, testing within an operating system, and network communication with mobile devices.
Material will include software configuration management, object-oriented programming, project organization, and prototyping.
This work will focus on the design of digital logic circuits like combinational and sequential circuits, and how to combine them to create, implement, and interface microprocessors.
Study here will include electricity, light and magnetism, and their application in electrical circuits.
Studies will include path planning, human and machine interface, kinematics, sensors, and control of manipulator and mobile robots.
This class will cover theoretical analysis techniques and standard modern circuit design, advanced logic synthesis, datapath, and arithmetic circuits and memory design.
Material will cover both current and future wireless technology with the study of path loss, intersymbol interference, spread spectrum, and adaptive modulation.
Given the pronounced differences in the nature of the coursework in these programs, you've probably guessed that Master of Science in Computer Science graduates and Master of Science in Computer Engineering graduates usually go on to work in very different tech areas. Tufts University, which has highly-rated on-campus and online computer science master's degree programs, has a list of possible computer science jobs on the program website that includes roles like:
Analysts and managers at this level design and install software to protect data, monitor an organization's networks for breaches, research trends. and recommend enhancements. Median wage: $152,480 .
These positions manage software developers and testers and take a broad approach to a company's software needs. Median wage: $109,840.
This job sees to the design, development, testing and application of hardware, and how it works with existing software. Median wage: $114,190.
This position manages the software planning needs for organizations including security, technology upgrades, and the direction of other IT professionals. Median wage: $157, 580.
This position broadly manages a system's current and future software needs, and may oversee other designers and analysts. Median wage: $109,840.
This position manages software development and implementation within the company network. Median wage: $110,140.
Job positions like this oversee the design and connectivity between systems within the company network. Median wage: $106,160.
This position oversees the complexities of company software, and the teams of IT professionals who design and develop it. Median wage: $105,310.
This job deals with testing and solving software problems and solutions and how to integrate current and future technologies. Median wage: $120,130.
This executive level seat oversees all other positions in the department, managing both technology and personnel in planning, design, testing, and implementation. Median wage: $142,920.
Computer engineering program graduates, on the other hand, might work in roles like:
This position oversees the design, testing, and development of computer hardware components and systems. Median wage: $119,560.
This job functions as the liaison between business and information technology, building computer systems that meet the needs of both. Median wage: $93,730.
An electrical design engineer oversees the manufacturing, as well as the design and testing of computer hardware. Median wage: $100,830.
This position oversees the relationship between the code writing for software, and the hardware schematics that software runs on. Median wage: $110,140.
Similar to an embedded software engineer, this position creates the device-control software like microcontrollers and processors. Median wage: $106,160.
Hardware engineers ensure that hardware and software work together, creating schematics for new equipment and overseeing production. Median wage: $119, 560.
Computer network architects design and build large and small data communication networks to work within and between businesses. Median wage: $116,780.
This position is similar to network architect, and focuses on the design, building, manufacturing, and troubleshooting of communication networks. Median wage: $116,780.
This position oversees the development of protocols and test scripts, identifying the gaps and planning for corrections and upgrades. Median wage: $106,160.
It might look at first glance like there's no overlap between job opportunities for computer science students and computer engineering students. That's often true when it comes to titles, but not when it comes to where professionals work. Remember, you can't have hardware without software, and vice versa. According to the US Bureau of Labor Statistics (BLS), most computer engineers work in computer systems design or in the sciences, while most computer scientists work for the federal government or in computer systems design.
The simple answer is that computer scientists are good at abstract thinking, while computer engineers tend to be better at analyzing what's in front of them. The reality is, of course, much more complicated than that. To succeed in computer science, you'll need skills related to:
Use logic and reasoning to create and fix code.
Organize, store, and manage databases, allowing for efficient indexing and modification.
Understand the strengths and applications of top computer programming languages.
Be familiar with the capabilities of computers and what problems can be solved through algorithms.
Use software and hardware to analyze data and search for ways to improve performance.
Understand encryption and decryption of coded language, and its impact on securing data.
Acquire, organize, dispose, and/or distribute information to and from multiple sources.
Keep computer systems running efficiently through comprehensive design and modification.
Apply code to develop software, and test applications rigorously.
Design and manufacture software for real-world use.
Successful computer engineers, on the other hand, use skills related to:
Use technology to transfer information between computer systems.
Use the structure of rules and methods to design data flow within computer systems.
Apply the specific driver programs to operate devices attached to a specific automation.
Oversee the design, development, and manufacturing of communications systems.
Outline and document circuits and modules in the schematics of computer hardware systems.
Use transistors, condensers, and resistors to store and create amplification for circuitry.
Aid in the efficiency and reduction of steps and cycles to execute tasks.
Protect network data integrity and usability with both hardware and software solutions.
Use physics to study the connections and transistors within circuits.
Understand the languages behind machine code output and the differences between them.
Apply the technology of radio frequency and infrared waves to transfer information without physical restriction.
The average computer scientist's salary is higher than the average computer engineer salary, though it depends on where you source your information. According to Indeed, computer engineers earn about $95,828, while computer scientists earn about $103,528. The BLS, on the other hand, reports that computer engineers earn about $119,560, while computer scientists earn closer to $126,830. These figures suggest you can earn good money in either discipline, so it makes more sense to make career decisions based on your interests, talents, and passions if you're trying to choose between them.
Right now, software is a much bigger business than hardware—computer science jobs are being created at a much faster rate than computer engineering jobs—but as robots and autonomous systems evolve and their use becomes more widespread, hardware may become king and the ratio may flip-flop. Until then, there are probably more ways to advance in computer science than in computer engineering, whether your interests lie in information management, cryptocurrency, or AI.
Keep in mind that plenty of employers treat CS and CE degrees as interchangeable, so your specialty area may not have as much of an impact on your earning potential as you might imagine. There are plenty of hiring managers out there who will only pay attention to the 'computer' element of computer science and computer engineering. You may be able to slip into a computer science job with an engineering degree or a computer engineering job with a comp sci degree.
If you're passionate about computers, chances are you'll do well no matter which path you choose. Computer science and computer engineering are both fascinating, well-paying fields that will likely keep growing as technology evolves, and your prospects will be similar in each. Choosing between these related disciplines can be especially tough when you're looking at university programs. It might be helpful to think about whether you're more excited by mathematics, puzzles, and abstract problem-solving or by tangible computational challenges and hands-on work. If you're a conceptual thinker, you may derive more satisfaction from a computer science program. If you love building gadgets and playing with circuitry, a computer engineering program might be the better fit.
Of course, there's a third option to consider. Many computer engineering majors make time to earn computer science minors, so they acquire the kinds of programming skills that will qualify them for jobs in both fields. You also can choose a double major that encompasses both CS and CE if you're as passionate about hardware as you are about software. After all, these disciplines can't exist alone. As one Quora commenter put it in a thread about choosing between computer science and computer engineering, "Computer engineering without computer science turns our machines into primitive tools. One could argue they are junk without it. Computer science without computer engineering is gibberish because the one thing that can compile and execute it wouldn't exist… neither can advance without the other." You may discover that's true not just in theory, but also in your career.
Questions or feedback? Email firstname.lastname@example.org