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.