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.
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.
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.