Someone: So, what degree program are you two in?
Me: I'm in Computer Science, and he is in Computer Engineering.
Someone: Oh, what's the difference?
I guess I shouldn't be surprised, since most people have little knowledge of computers. What I, most of my friends, and my boyfriend T will be doing for a living can, for the majority of folks, be summed up as "doing computer." People assume that because I'm in computer science, or because T is in computer engineering, we can fix their iTunes and email and printers. “It's all computer!” they seem to think. The thing is, it's not "all computer." There are many different aspects of a computer that involve an entire field of researchers, quirks, experience, journals, professors and... well, and learning. There is a fair amount of overlap, sure, but not nearly as much as people assume. So, while I can explain to you some of the finer points of how your operating system manages memory, I probably can't explain why your printer is making that noise. Sorry.
|A handy guide to the computer spectrum|
Computer scientists are theorists – they examine theoretical properties of computers. They seek to create new and innovative things. They seek to find new algorithms that are faster, or smaller, than existing algorithms. They seek to explore interesting new hardware architectures, and the applications of them. They seek to understand and improve upon our computer networks. All of computing is built upon computer science – at some point along the line, everything about a computer was naught but an idea in a scientist's brain. (As you can see by some of my previous posts, computer scientists can be romantic idealists about technology.)
For a student, computer science offers a buffet of interests: one can, and likely would, sample from a variety of subjects such as discreet mathematics, cryptography, artificial intelligence, digital logic and circuitry, 3D graphics, database management, operating system and compiler theory, and – of course – programming. The purpose of the degree seems to be to give a student a very solid foundation of both computing theory and the application of such, rather than an in-depth knowledge of one subject. One does not go into computer science to learn how to program; one goes into computer science to learn about computers as a whole. Many people make this mistake. The size of the classes shrink by a significant amount as the year advances – many people I talk to have been in computer science and changed degrees because it wasn't what they expected. (Most of them change to business, for some reason I cannot fathom. -haughty brow furrow-)
Computer Engineering is a different beast – it is a true engineering field, not a fancy title like "sanitation engineering." (T has particular trouble with this – at career fairs, people hear "computer engineer" and think "IT monkey.") In the curriculum offered by my university, there is a lot of overlap between computer engineering and some other programs: the computer engineering faculty has only a handful of courses to its name, and the rest of the degree is built from computer science and electrical engineering classes. [As well as a number of math classes] Any guesses what computer engineers do? I'll give you three and the first two... well, you know the expression.
Computer engineers design and build computer hardware. Electrical engineering, as T says, is working with analogue electrical signals. Computer engineering works almost exclusively with digital signals, and thus digital logic. A computer or electrical engineer gets down and dirty with the mathematics of electrical signals. It's a field filled with complex numbers, multivariable calculus, differentials and Maxwell's wave equations. You have to have a very solid grasp of math and mathematical logic to do well in computer or electrical engineering.
Every piece of hardware in your computer - every circuit in your phone, or calculator or microwave – was designed by a computer engineer. If you want some hardware designed for a specific – or general – function, a computer engineer is who you go to. Computer engineers generally work for engineering firms, mostly on contracts. A business wouldn't keep an in-house computer engineering team, unless it's something like ATI which develops and sells hardware exclusively. Computer engineers are somewhat of an invisible engineering field... to be honest, most engineers - except mechanical and civil - are invisible to the public consciousness.
Software engies are yet another unique group. They share a lot of things with computer scientists, but barely see their fellow engineers. Software engineering is on the "other side" of computer science.
Since it's in the engineering faculty, it's focused on processes, methods and structure. In software engineering, one would learn how to methodically build solid, large-scale software systems. One learns how to deal with clients, how to produce design and requirements documents to create accurate and correct products. The actual degree requires a large, full-year final project, while computer science does not. One learns how to manage large systems, communicate to superiors, and generally over-engineer the shit out of a software project. In short: all the most boring parts of the computer-related field are concentrated in software engineering.
Sorry, I'm letting my romantic scientist side get the better of me.
If you want to learn to become a better programmer, how to design and execute the large-scale systems that are so valuable to businesses today, you want software engineering. If you want to learn to program and couldn't care less about the theory behind the machine you program on, you want software engineering. (Very few people I have met care about the theory behind computers – they just want to know how to make them go.) If you want a well-paying, stable job as a great programmer, you want software engineering. Most people who go into computer science should actually be software engineers.
Lastly, there is a new degree being offered by my university: the Bachelor of Information Systems. It focuses on managing business information and the software driven by business needs. Some of the classes that used to be in computer science have been re-branded under InfoSys; the two most notable ones are the database management and information security [IE cryptography] courses. There is a fair amount of overlap between InfoSys and the Business faculty. This degree program seems to be designed for people who want to become IT specialists in large companies – a job that requires a peculiar blend of technical expertise and business skills. To me, it sounds like a living hell, but to people who want to become a valuable corporate asset, it's a ticket to moneyville.
So, there's your overview of the "computer spectrum" in an average university. Hopefully this will help folks understand the difference between all of us geeks... and maybe you'll think twice about asking a computer engineer to fix your wireless...
...unless you envision a soldering iron and wire strippers in your router's future...