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.

    Source: geocities.com/siliconvalley/2072

               ( geocities.com/siliconvalley)