A Lament On The Loss Of Computer Engineering And Engineers The field of "Computer Engineering" (CE) is one which usually doesn't receive much attention from the mainstream computer techie crowd. When people (even techies) think of computers, they usually think of "Computer Science" (CS). Even electrical engineering (EE) gets more attention. Computer engineering is an often-misunderstood field, which could be part of the reason for this; many people don't see the distinction between CE and CS, even though the differences are crucial. Tragically, even many important universities seem to have failed to maintain the distinction. Stanford University no longer even has a Computer Engineering major; their CE department has been absorbed into their CS department. This is astounding, considering that computer engineering largely made Stanford University what it is today. Similarly, UC Berkeley, on the opposite side of the San Francisco Bay, has done what many universities have done and tried to cover for the lack of a nominal "Computer Engineering" major by substituting "Electrical Engineering And Computer Science". Even MIT--probably the most important educational institution to the computer industry in all of the USA--does this, having no CE, EE, or CS major, but simply "Electrical Engineering and Computer Science". While it is true that CE can be somewhat crudely summarized as a combination of EE and CS, far too many such university programs simply create a heterogenous curriculum by mixing classes from each of these two fields, while failing to form the key connections that bring the fields together into "Computer Engineering". Having some classes on EE and some other classes on CS is *NOT* the same as a proper "Computer Engineering" curriculum. The differences between these fields is so important and so ill-understood, even by college students--let alone members of the general public--that I feel the need to explain what makes not only these types of engineering different, but also their types of engineers. An electrical engineer is a member of the old guard, steeped in physics and mathematics. EE was around long before computers, and unlike the fast-moving computer field, EE hasn't changed much, because the fundamental laws of physics don't actually change; only our understanding of them does occasionally. While the way that EE is applied changes from generation to generation, the fundamental concepts of electricity and magnetism remain constant for eternity. An EE is someone who makes an audio amplifier and tries to figure out how they can change a certain circuit or component to produce the maximum circuit power output. A noble and math-heavy field, for sure, but EE has little to do with computers these days. When computers first came around, they were usually used and studied in universities' EE departments, but eventually people realized that computers are important enough, and different enough from the rest of EE, that they warrant their own field. Today, computers are only a minor sub-field of EE, a particular type of device which doesn't get much more study than, say, an oscilloscope or a transistor curve tracer. "Computer Science" may be one of the most poorly-understood university majors of our age. Even students majoring in this field seem to sometimes go through several classes without having a real understanding of what CS is. CS has very little to do with hardware; it is eminently focused on data structures, algorithms, and human factors like how people process information. CS is infinitely more theoretical than EE or CE. While both types of "engineers" end up designing and creating actual physical things that run, the creations of computer scientists exist only in a computer's virtual world. This doesn't mean that the creations of computer scientists are any less important, just that they are non-physical. Computer Science, as a broad generalization, has little to do with classical fields of science like physics or chemistry. Instead, computer scientists play by their own rules, the very large field of information theory, which sees little use in any other field. A computer scientist is someone who thinks about the human brain and tries to create the most effective and efficient representation of that brain as a series of arrays, pointers, or other data structures that exist in a computer's memory. The computer scientist will understand computer memory as a series of storage cells with a fixed size and specific numbering scheme, but will usually not understand or care about computer memory as a structure of transistors and other physical elements. The computer engineer is the one who brings these fields together. The computer engineer must have a good understanding of electrical and electronics theory, while also understanding how physical electronic devices can be wired together to create the nebulous data containers that computer programmers use. Computer engineers are usually considerably more focused on hardware than software; a computer engineer is usually not an expert programmer, although he or she must have some significant understanding of programming practices and how computer programs make use of hardware. A computer engineer is someone who might observe a CPU instruction that uses up three CPU clock cycles and figure out how large a capacitor would be required to power a DRAM cell for that long. Truly, this is a multi-disciplinary art that very few undergraduate students strive to understand. Why has this become the case? The reasons are manifold, but one obvious reason is that there's little money in CE these days; the computing industry has, by and large, settled on the Intel 80x86 architecture as the de facto standard, and even if someone had the skills to design a better microprocessor from scratch, it would be incredibly difficult from a business perspective to make such a CPU catch on without any market base of software to support it. Besides CPUs, computer engineers also build motherboards, but motherboards are almost exclusively designed and made in Asian countries now, meaning that although motherboard design is a genuinely fascinating and incredibly deep subject, there is little opportunity for a person wise in this art to apply it in any kind of paid employment, at least in North America. Some relief has come in the form of FPGAs, those fascinating programmable chips, but FPGA programming tends to be a fairly niche field; there is not broad demand for Verilog or VHDL coders, and less still for those who can design a circuit board around an FPGA. Another reason why computer engineering is largely ignored today is because it, like electrical engineering, does not change as much as people might expect. Although computer technology has become much faster and more powerful over a period of a few decades, the underlying principles that those computers are built on has never changed. These principles can be best understood by studying simpler, more primitive architectures than what might be found in a typical PC today, and as soon as college classes start to teach anything relating to "old technology", they are derided for teaching antiquated, obsolete knowledge to students who must be prepped for the "technology of tomorrow". Of course, people who make these charges usually have no understanding of computers; if they did, they would know that although a Pentium 4 is many orders of magnitude faster than a 6502, they both use instruction decoders that work in essentially the same way. This observation sometimes leads people to conclude that "Computer Engineering", as a field, is itself obsolete. Understanding how computers worked at the level of individual transistors was important in the 1970s and 1980s, when pioneering computers were still being built at the hardware level, but today computers have stabilized somewhat in that their architectures are largely uniform, and therefore many people are led to suppose that our interests would be wasted by thinking about computers at such a level, since "nobody does that stuff with computers anymore anyway". This is quite far from the truth; there is a great need for people who understand how computers really and truly work. This is evidenced by how desperately people lack any ability to troubleshoot computers: When a computer experiences some critical error, the hardware designer is at a loss to explain what went wrong because the error stemmed from a software instruction, while the software person is also usually unable to figure out what happened, since the software instruction in question produced an error arising from some hardware condition. Only someone who can actually fathom both of these fields can divine the solution to the error. I came to the realization long ago that although many people may have worked with computers for many years, though they may have degrees (even post-graduate degrees) in some related field, though they may claim to be "computer experts/professionals/gurus", almost no one knows anything about how computers work. Unless our scientific community and schools start to understand that "Computer Engineering" is its own field and not just a mishmash of random subjects from computer science and electrical engineering, this will continue to be the case.