A question I have gotten a lot lately has to do with the differences and similarities between Computer Science and Computer Engineering. At the risk of over-simplifying the differences, I have written this guide to explain how Computer Science and Computer Engineering are alike and how they differ.
What Is Computer Engineering?
Computer Engineering is the marriage of Computer Science and Electrical Engineering. It focuses on computing in all forms, from microprocessors to embedded computing devices to laptop and desktop systems to supercomputers. As such, it concerns the electrical engineering considerations of how microprocessors function, are designed, and are optimized; how data is communicated among electronic components; how integrated systems of electronic components are designed and how they operate to process instructions expressed in software; and how software is written, compiled, and optimized for specific hardware platforms. Therefore, computer engineers are electrical engineers who specialize in software design, hardware design, or systems design that integrates both.
What is Computer Science?
Computer Science is the study of how data and instructions are processed, stored, communicated by computing devices. A modern descendant of Applied Mathematics and Electrical Engineering, Computer Science deals with algorithms for processing data, the symbolic representation of data and instructions, the design of instruction languages for processing data, techniques for writing software that process data on a variety of computing platforms, protocols for communicating data reliably and securely across networks, the organization of data in databases of various types and scales, the emulation of human intelligence and learning through computer algorithms, statistical modeling of data in large databases to support inference of trends, and techniques for protecting the content and authenticity of data. Therefore, computer scientists are scientists and mathematicians who develop ways to process, interpret, store, communicate, and secure data.
Overlap Between the Areas
Because both Computer Engineers and Computer Scientists ultimately work with data and attempt ultimately to harness meaning from it, there is significant overlap in coursework that students in the two fields take, as well as in the careers they pursue. This does not minimize the distinctive nature of the two disciplines. It simply acknowledges the fact that these types of computer professionals find context and purpose in similar kinds of projects or in different aspects of the same kinds of projects.
A Potentially Oversimplifying but Useful Distinction
Both Computer Engineers and Computer Scientists advance computing technology and solve problems using computing technology. If we consider computing technology in terms of scale, Computer Engineers operate often at the microscopic and macroscopic ends of the spectrum, whereas Computer Scientists work in the middle parts of the spectrum. More specifically, Computer Engineers deal with the physics of semiconductor electronics so that they may design hardware from the integrated circuit level (small), as well as with the integration of hardware and software optimized to run on it to realize complete, special-purpose computing systems (large). Computer Scientists write the software, design the databases, devise the algorithms, format the communications, and secure the data that are processed by the hardware to make the integrated system function.
A Concrete Example: An iPhone
Consider an iPhone. Apple employs both Computer Scientists and Computer Engineers to design each new version of the iPhone. Computer Engineers (and Electrical Engineers) designed the chips that house the integrated circuits that make the iPhone’s various components (cell radio, screen, controls, memory, microprocessor) function, and they figured out how to get the various components to work with each other. That involves looking at the device at both the microscopic level and the integrated systems level. Computer Scientists wrote the operating system that manages the memory and concurrently running applications, the apps in the app store that run on top of that operating system, the packing and unpacking of data into packets for network communication and the encrypting of data so that prying eyes can’t see it. The computer scientists provide the glue pieces that bring turn the computer engineers’ beginning product – the component designs – into the computer engineers’ end product – the device on which people text, browse the web, and play Angry Birds.
From this example, it is easy to imagine, with so much dependence on each other’s functions for realizing a finished product, why there is significant overlap in the coursework Computer Engineers and Computer Scientists take, and in the career opportunities they pursue.
A Helpful Perspective on Computer Engineering
I found the website http://www.ohio.edu/eecs/undergraduate/documents/upload/whatCpEsDo-better%20version.pdf provides a particularly helpful description of Computer Engineering that identifies the kinds of jobs Computer Engineers work, the companies that hire them, and the salaries they earn.
That page begins with a helpful list of specialization areas in Computer Engineering. I have copied that list of specializations here, but I have marked with an asterisk (*) those in which Computer Scientists also specialize. In all cases of overlap, Computer Scientists focus more on the software development aspect of the specialization, and Computer Engineers study the hardware design and integration of hardware and software needed to implement that specialization.
- Microprocessor and microcontroller systems
- Assembly language (*)
- Coding, cryptography, and information protection (*)
- Distributed computing (*)
- Computer vision and pattern recognition (*)
- Computer graphics and multimedia applications (*)
- Internet computing and wireless networks (*)
- Computer architecture and embedded digital systems design
- Network security and privacy (*)
- Real-Time Systems (*)
- VLSI, VHDL, and ASICS design
- Computer internetworking and Network Protocols (*)
- Embedded software for real-time microcontrollers (*)
- Algorithms, compilers, and operating systems (*)
- Human-computer interaction (*)
That same website presents a number of other interesting data on Computer Engineering. For example, this table expresses the relationships among Electrical Engineering, Computer Engineering, and Computer Science in terms of the classes each major takes and the percentage of those classes that fall in the categories of hardware and software.
You see the “computer science is software and computer engineering is hardware” theme play out once again in this table. That is the easiest way to distinguish the two fields. And yet, there is enough of an overlap to ensure that both kinds of students will find plenty of opportunity in a wide range of careers in the computer field.