Computer Engineering is an engineering discipline that deals with the design and production of computer hardware, the design and development of low-level computer software, and computer hardware-software integration. The field overlaps heavily with the fields of electrical engineering and computer science.
Examples of Computer Engineering
- Design of a microprocessor. A certain degree of electrical engineering is involved. However, a successful design requires a broad view of the context in which the processor will be used. Thus, an understanding of program execution patterns and compiler technology is helpful.
- Design of a compiler. A compiler is a computer program capable of translating a unambiguous description of an algorithm into a form which can be executed by a machine. To design a compiler requires knowledge of both the programming language and the operation of the machine.
- Digital Signal Processing. 20 years ago, a radio would probably be designed using traditional electrical components. Today, it is just as likely that a large portion of this task would be implemented in software, with just the minimal amount of electronics to convert the analog signal to digital and vice-versa. The trend to software-defined radio accelerates this process
- Network engineering. There is a distinct area that deals with loosely coupled processing elements, over imperfect media, often in very large scale combinations. It overlaps with telecommunications engineering, which, increasingly, deals with the tranmission and other physical aspects of networks, rather than its traditional association with telephony and radio.
- Telecommunications engineering Once the discipline of radio and telephony, with convergence of communications, it tends to focus more on the wired (fibered) and wireless aspects of the movement of information among widely dispersed processing nodes. It also has a significant amount of antenna and electromagnetic propagation work, and blurs into topics such as radar.
Differences from Computer Science
Computer Engineering is a very practical form of computer science. Computer Science focuses also on abstract algorithms for performing mathematical tasks efficiently, where Computer Engineering focuses more on the implementation of computers and computer systems.
For instance, a computer scientist might consider an algorithm which sorts a list of numbers. In doing so, the scientist might first describe the algorithm as a series of instructions which cause the desired effect, perform a rigorous proof that the algorithm will always perform the task properly, and analyze how efficiently said algorithm performs its task against criteria such as time or memory complexity before finally implementing it. A computer engineer would research how such algorithms work, and attempt to create computer hardware capable of executing those instructions, optimized against calculation time, component cost, component size, power consumption, etc., and attempt to validate and verify the correctness of said implementation.
Differences from Electrical Engineering
While electrical engineering is a broad field, computer engineering generally focuses on a restricted subset of electical engineering known as digital logic design. Digital Logic Design is a way to simplify many tasks in electrical engineering, by creating reusable building blocks such as the NAND Gate.
In general, the analysis of an electrical circuit is complicated. At its lowest level, electronics depends on physical properties of conductors and insulators. The mathematics used in electrical engineering can become quite difficult: simple circuits containing resistors, capacitors and inductors may require solving a set of differential equations, and circuits containing transistors may require the engineer to solve transcendental equations. Through the design of robust and simple digital building blocks, a digital designer may avoid much of this mathematics and focus on systems which can be easily described with discrete mathematics. This method allows a digital engineer to create larger systems, more complicated systems.