How to Become a Computer Engineer
Steven Butner has been a professor in the Computer Engineering department at the University of California, Santa Barbara for 30 years. He earned a Bachelor of Science in electrical engineering from the University of Kansas, a Master of Science in electrical engineering from the University of Pennsylvania, and a PhD in electrical engineering from Stanford University. Prior to entering academia, Steven worked on the technical team for General Electric, GTE/Sylvania, and Bell Northern Research. He has also worked as a private consultant to such companies as Applied Magnetics, Culler Scientific Systems, InTouch Health Inc., Micron Technology, and Siemens AG, to name a few. In 1990, Steven co-authored the book “Gallium Arsenide Digital Integrated Circuit Design.”
What is computer engineering?
The field of computer engineering is distinct from (and roughly centered between) the fields of electrical engineering and computer science. Across the United States, there are many programs in computer engineering. Each has its own emphasis and interpretation of the essence of computer engineering. The program here at UC-Santa Barbara is focused on computer systems, including the low-level hardware and software structure and implementation aspects of computer systems.
It is perhaps easiest to understand a computer engineering program by comparing it with the two programs from which it has evolved. As compared with a traditional electrical engineering program, students in computer engineering programs study less circuit analysis/synthesis, using the freed-up units to acquire more programming and software skills than their electrical engineering counterparts. When viewed from a computer science perspective, computer engineering students take more hardware, digital design, peripheral interfacing, than most computer science students, trading the units spent on those subjects against more advanced computing theory topics that traditional computer science programs require.
What do you find most interesting about computer engineering?
Computer systems, particularly embedded systems, are ubiquitous. As such, one can find application of computer systems design skills in almost any area of interest. Naturally, in working on an application area, there is inevitably exposure to the methods and techniques of that application area. Thus, by practicing computer systems design, not only do you get to use your computer design skills, but you also get an opportunity to learn about the application area. In my own career, initially because my PhD research focus was in highly reliable and dependable systems, I've had the opportunity to work extensively in process automation and medical robotics, as well as in some supporting areas such as high-performance imaging, dependable distributed systems, and distributed host synchronization.
What do you find least interesting about computer engineering?
Actually, I enjoy almost every aspect of computer engineering. My favorite activity is the solving of complex problems during system debug/verification, i.e. the unraveling of details based on observed vs. intended system behaviors to get down to a level where the given problem is understood sufficiently well that it can be resolved. My least favorite activity is creating thorough documentation that is complete and understandable to the outsider. I actually enjoy describing computer hardware and software solutions I've come up with. What is less enjoyable is the chore of explaining everything completely in prose and drawing form so that the solution being described can be understood in proper context with the rest of the system. I tend to add comments and annotations throughout the design and implementation process in an attempt to make it easier for those who might encounter some of my work later to understand. Often I find these comments and annotations helpful to me in creating the documentation.
Are there subfields of computer engineering that students might not be aware of?
It's difficult to say. There can always be specialty subfields, but most of the core of computer engineering is a rather straightforward application of basic computer architecture concepts, digital logic methods, and software design techniques combined with solid engineering and common sense. Wider diversity is encountered within the application areas that a given system might support as discussed in some of the previous questions.
What careers do students commonly pursue with a degree in computer engineering?
A wide array of careers is possible with a degree in computer engineering. The most obvious ones are software designers, hardware designers, field application support, test and validation engineering. Most careers have a specialization around a technology or product family that is associated with an employer. As an example, an ASIC design company would hire computer engineers to aid customers in specifying and analyzing their application-specific integrated circuits. Such a career would leverage skills in hardware description languages and simulation.
In addition to careers in fields that are obviously related to computer engineering such as networking, communications, signal processing, and control systems, there is a diverse set of employers who hire our computer engineers because of their analysis and problem-solving skills. Examples include financial institutions, insurance companies, and venture capital firms. One common theme in these more diverse career enterprises is that they often require simulation, modeling, and analysis of complex systems and phenomena.
Is a graduate degree preferable for a career in computer engineering, or can someone enter the field with a bachelor's degree?
An advanced degree is definitely desirable. While you can still get a job with a fresh bachelor's degree in computer engineering, it will be at an entry level, and you should expect that the company will be putting you through their own company-specific training program. In order to advance to higher levels and thereby gain a bit more freedom of job/project choice, higher salary, and additional responsibility in a career, a graduate degree is required.
What personality traits do you think a student should have in order to be successful in a computer engineering program?
Successful computer engineers are detail-oriented individuals who can understand and analyze a project from a high-level system view down through its lowest levels, including various hardware and software interfaces that are involved. Traits that are most helpful are perseverance, completeness, responsibility, and organization.
What electives would you recommend that a student in a computer engineering program take?
Depending on the student's interests, my advice would be to pick one or two specialties and spend your electives so that you get some depth in those specialties. In my opinion, depth is better than breadth; i.e., it is better to know more about a slightly smaller set of subjects than to know only a little bit about a larger set of subjects. I would encourage students to embrace and learn both hardware and software so that they can move fluidly back and forth across the hardware/software boundary as needed. Knowledge and skill bridging both hardware and low-level software is key to success in systems design. A computer engineering program that is strongly focused on the design and analysis of digital systems should produce graduates who have the opportunity to excel in their chosen career.
What study tips would you give to a student to help him or her succeed in a computer engineering program?
Always work through the labs or homework with the objective of trying to maximize your understanding of what is going on and how it fits within the bigger picture. Do not attempt short cuts such as finding code snippets online and using them in your programs. It's fine to study and attempt to understand how others have approached or solved a problem. But as far as learning goes, it is always preferable to develop your own set of techniques and algorithms -- ones that you understand thoroughly --- so that when things go wrong you can efficiently identify and structure a solution. Learn how to observe details of a system's input and output in order to reason about what is or is not going on inside. Avoid cut-and-dry techniques since, without an understanding or a theory about what is going on, making changes to code or wiring will mostly just be a waste of time.
Do you think computer engineering is a subject that can be studied online, or is a traditional class environment ideal?
Certainly it is possible to study computer engineering in this manner though such a scenario offers no possibility of anything equivalent to hands-on experimental work. I feel that an online computer engineering course should either include some sort of hands-on laboratory experience or be augmented by adding one.
What subjects should a prospective student of computer engineering study before entering a computer engineering program?
Algebra, trigonometry, geometry, calculus, discrete math, physics. Any sort of introductory circuits, logic design, or beginning programming would also be beneficial though the program itself should teach these subjects.
What pieces of advice, or caution, would you offer to a prospective student of computer engineering?
Like any engineering major, the possibilities for a long and fulfilling career are there for those who pursue computer engineering. Invest yourself fully to learn all that you can. Work hard and maintain the attitude that you want to try new things and experience all there is along to road to your degree.