Forgot your password?
typodupeerror
Education

Computer Science vs. Computer Engineering? 718

Posted by Cliff
from the yet-another-fork-in-the-road dept.
Dan B asks: "Like many other students across America, I plan on attending college as a freshman next fall. I am very interested in computers (I only reload the Slashdot site every five minutes), but there is something that perplexes me: what major should I choose? It seems that many companies are looking for computer scientists, but would they be desperate enough to accept computer engineers? What is the difference anyway? Well, a college guidebook could tell you 'computer engineering deals mostly with hardware' and 'computer science deals mostly with software', but that isn't clear enough for me. I believe the Slashdot community would be best fit to offer a more in depth perspective on the two majors."
This discussion has been archived. No new comments can be posted.

Computer Science vs. Computer Engineering?

Comments Filter:
  • Well, computer engineers get to drive more trains.
  • by Yhcrana (88366) on Tuesday February 27, 2001 @09:54AM (#397478) Homepage
    Computer engineers deal with logical bits and gates: they build the I/O that computer scientists talk to, and they design things to work better and faster than before. Computer scientists (of which I am a part) deal with the same type of information, but we deal with it on a different level: we study programming language theory, algorithms, data structures and the like. How do you contain that data? How do you sort it? Etc.
  • Be a liberal arts major.

    You can become a computer programmer anytime. It's like carpentry, you learn on the job.

    An education on the other hand is something that you get in college. Why not learn something that will help you make sense of the world, like history?

  • by The-Pheon (65392) on Tuesday February 27, 2001 @09:55AM (#397481) Homepage
    Give up now! If you "only reload the Slashdot site every five minutes" you will have no time for your classes and it would be a waste of money to go to college! =D

  • The problem with Engineers is that they cheat in order to get results.
    The problem with Mathematicians is that they work on toy problems in order to get results.
    The problem with Computer Scientists is that they cheat on toy problems in order to get results.
    --
  • You didn't really mention what your career aspirations were. Hard to give advice on which to pick when we don't know where you're headed.

    IMHO, there's so much confusion in the marketplace over the differences in such terms that you should really worry more about what you want to learn and take classes appropriate to that. Some places, they're looking for sysadmins, they want you to have a comp-sci degree--other places, comp-engineering, for essentially the same role. Frankly, I think that most companies who specify their requirement so narrowly do so just because it sounds good, not because it really makes a difference in the job you'll be doing. I look for companies that are more concerned with your analytical skills and technical abilities than your credentials.
  • by FigBugDeux (257259) on Tuesday February 27, 2001 @09:58AM (#397489) Homepage
    If you are more interrested in writing Windows (Linux) Apps, Web stuff, or DB stuff, get a CSc degree.

    If you want to work on embedded systems, or on DSP stuff, get a CEng degree.

    If you aren't sure, get a CSc degree. If you aren't good at Math, get a CSc degree, a CEng degree is four years of math.

    90% of jobs can be done by either a CSc or a CEng, and 5 years after you grad it won't really matter, it'll be your exerience that counts.

    i started of in ceng and switched to csc... you need a _huge_ ego to do ceng.
  • by OlympicSponsor (236309) on Tuesday February 27, 2001 @09:59AM (#397494)
    First, unless you absolutely must, don't declare a major. Just take required classes your first semester to get them out of the way. If the school is large enough, every class will be offered nearly every semester anyway so you'll be in no danger of falling behind.

    Second, talk to your advisor. This is invaluable. They will be able to explain the your different options (or point you to someone who can).

    Third, as a quick guide. If you are interested in "computers" take an intro class that covers a wide range of topics so you'll get a feel for what's available. Also talk to fellow students who have related majors.

    If you are interested in "programming" just go ahead and start in on the Computer Science major and decide on a concentration later. I would very strongly warn you against some kind of vo-tech, "we'll teach you VB and send you out into the world" type of major. Take the full science path--it's definitely worth it.
    --
    Non-meta-modded "Overrated" mods are killing Slashdot
  • by Dancin_Santa (265275) <DancinSanta@gmail.com> on Tuesday February 27, 2001 @10:00AM (#397496) Journal
    You can become a computer programmer anytime. It's like carpentry, you learn on the job.

    You can become a physicist anytime. It's a science like Computer Science, which is like carpentry, you learn on the job.

    You don't learn CS on the job. You may learn some programming, but that is a far cry from CS theory.

    Real Computer Scientists don't use computers.

    Dancin Santa
  • Yeah, damn engineers - can't live with 'em, can't kill 'em. Just like those damn programmers - its that whole law and morality thing. If we could just get over the whole death thing, we could kill either at will, and no one would care.

    p.s. - half the programmers I know used to be engineers, but gave up on getting lousy jobs so they could do something they actually enjoy. Only one of them has an actual Comp.Sci degree, and what they do sucks ass.

    not like anyone will actually read this...

  • by dissipative_struct (312023) on Tuesday February 27, 2001 @10:00AM (#397503)
    Well, semantically, CS deals with the "science" of computers, while CE deals with the engineering aspects. If the academic computer tracks stuck the the normal definitions, the CS track would stress algorithm development, mathematical analysis, computational theory, etc., while the CE track would stress creating software and hardware systems to solve problems in the real world.

    In reality, there's very little difference between the two majors. Both will teach you basic computer programming, a little bit of hardware, and some of the supporting math. A CE degree will probably require you to take a few more engineering courses, while a CS degree might have some more math. Really, I would consider those two degrees interchangeable, with the specific education you get depending more on the school you attend than the name of the degree.

    My personal opinion? Get a physics or math degree with a CS/CE double major/minor if you want very high-level technical programming jobs (in an engineering firm, for example) or if you want to do academic work. Get a CS/CE degree (don't really think it matters which) if you want to be a software engineer/software developer. If you just want to make some quick money and have no strong love for computers, get a quick certification. Note that these are just general guidelines... I know several great technical programmers who are entirely self taught, and I know one guy with a BS in CS and and MS in Math that can barely write a "Hello World" program in C.
  • by Kwantus (34951) on Tuesday February 27, 2001 @10:01AM (#397506)
    'fraid I've no grand advice other than to suggest you take the myth of a SW labout shortage [ucdavis.edu] into account.
  • Can be found here [calpoly.edu]. Written by a professor at California PolyTech.
  • I just graduated from University of Cincinnati with a degree in Computer Engineering. One of my friends was in the UC CS department (he graduated at the same time). YMMV at other universities.

    The differences and similarities seemed to me to be.
    1. Same amount of math
    2. CE -> more HW, gate level, analog design - VLSI optional minor
    3. CS -> a lot more 'theory'

    Ex. Algorithms for CE was "Here are these algorithms, Big O notation, this is what each is good for, apply some of them, learn how to use them and research them." For CS majors is was "Prove these algorithms work, analyze them, workworkwork, don't program them or do anything practical with them".

    4. CE more learning how to program and how to learn the principles behind the language. CS seemed to involve a lot more pointless suffering.

    5. After finishing the CE course, I can design everything in the computer and it's software except the power supply and the chip masks. After the CS program my friend learned how to program in LISP and x86 assembler.

    If you're schools program is like this, it's an excellent way to learn to program / design computers. But if it's just an EE program with some programming classes, you probably don't want to take it.
  • by dmorin (25609) <dmorinNO@SPAMgmail.com> on Tuesday February 27, 2001 @10:03AM (#397514) Homepage Journal
    See what the course load is like for both majors. Then look up the courses. See which ones you think you'd like better. Go for it.

    Please for the love of God don't be asking which one will make you more money. People wonder why managers are farming out good jobs to India, it's because American kids are walking out of college and saying "Whaddya mean you're not gonna pay me $100k? What did I go to school for?"

  • I got a ComSci degree from UMD. Very heavy on theory, ie prove this algorithm runs in this time, design a better scheduling algorithm for your OS,create a language and build the compiler, etc. Very language independent. Most of my projects were implement this, we don't care what you do it in, C, C++, Lisp, etc. In fact, I was never taught a language, I was taught language theory; heaps, call by reference/value, etc. You were expected to learn the language on your own. Probably my best example was my compiler theory class. The professor said "I don't care if you can build a compiler or not when you get out of this class. In ten years you won't even remember how (asusming you don't do it for a living). What I expect is that you will know how to read the book for the rest of your life (the Dragon book). That way, you'll know how to build one if you need it down the road."

    As a computer scientist, I can be expected to pick up any new concept reasonably quickly, becuase I learned the practice, not necessarily the implementation. It was also way heavy on math.

    We didn't have a computer engineering program (although they may now), so I'm not sure what that is, but odds are it bridges the EE/CS gap.

  • If you take the engineering track, you will spend a year learning the physics of transistors, another year studying communications and signal processing mathematics, and much more time studying material which you will never use. Along the way, you will have a few interesting courses, especially if your department if flexible with the electives.

    If you go comp sci, you will spend loads of time programming in Pascal, lots of time writing compilers (without even the slightest introduction to yacc), and learning lots of stuff you will never use. Along the way, you will have a few interesting courses.

    You can tell the date that a professor receives tenure, as that is the date that they stop keeping up with general changes in IT. A truly useful degree in either field should ideally involve a professional certification, but I've never heard of any large institution doing it (which can be attributed mostly to hubris).

    If you want a narrow focus in comp sci, then go comp sci. If you want a broader exposure to the physical sciences in general, go with engineering. You will not use up to 90% of what you learn in the field. Such is a degree.

  • Or, even better, double-major--there are definite benefits to taking CS classes, especially ones that deal with theory. However, I agree wholeheartedly that there's a lot of value in having a liberal arts education. The biggest difference is that having the CS classes will probably be more valuable in an economic/job-seeking sense whereas the liberal arts classes (especially if you can focus in on areas that really interest you) will have much more value to you personally. My 2 cents, anyhow.

    (Oh, yeah, I'm considering a double-major in English and Comp Sci...aside from the threatening senior-year workload, I think it should be doable.)

  • by sl3xd (111641) on Tuesday February 27, 2001 @10:07AM (#397532) Journal
    I'm currently a Computer Engineering student, so I think I have some qualifications to describe the difference.

    A Computer Science major deals primarily with programming and algorithms. They write programs, Operating systems, high-level drivers, etc.

    An Electrical Engineer deals primarily with hardware - logic gates, and designing hardware that will perform algorithmic computations. IE. they design chips. These are the guys who work for Intel, AMD, etc. They don't worry much about programming.

    A Computer Engineer is an Electrical Engineer that specializes in programmable computer devices, and therefore programming. So a CompE is mainly an Electrical Engineer, but also does a great deal of programming. Some CompE's design hardware, others write extremely low-level software, drivers, etc. Computer Engineers quite often work in the embedded market, as they have the skills to do both the hardware and software engineering involved.

    Think of an Electrical Engineer as a geek who designs computer chips with a minor in math.

    Think of a Computer Engineer as a geek who designs computer chips with a minor in Computer Science.

    Think of a Computer Science major as a geek who programs computers, and doesn't design hardware.

    And, in my opinion, it's funner to be a CompE because you can be doing hardware on one project, then software on the next.
  • by Anoriymous Coward (257749) on Tuesday February 27, 2001 @10:07AM (#397534) Journal
    Any good course in these subjects will contain a fair bit of programming along the way, with the benefit that they won't tell you how to do it. You'll get a good grounding in critical thinking and methodological approaches to solving problems, and you get to teach yourself programming to do the course work, which is how 90% of real-world code gets written - i.e. to solve a problem.

    Disclaimer: I am a Maths graduate. I didn't take the programming options because they cut into my drinking time too much.

    --
    #include "stdio.h"
  • Computer science: much math-based theory, some programming

    Computer engineering: much hardware design, hardware theory, some programming (assembly, C, C++)

    Software engineering: tiny bit of hardware design, some theory, much programming, some software development process


  • *Please*, don't go to a school that thinks a CS degree means you can program, in any language, whetehr it's VB,C,C++,Java, etc. Computer Science is not about programming -- as has been reiterated above. It's about understanding the core principles and paradigms of algorithms, theory of computation, operating systems, and language. It's about networks and about compilers, not about code. Computer Scientists are linguists, operations researchers, mathetmaticians, and prophets. They are not primarily coders. Don't confuse computer science with computer programming!
  • As guy who switched from third year Computer Engineering to a new Software Engineering program, I can tell you that Computer Engineering IS a lot of hardware. However, at my school it consisted of a lot of signal analysis, which if you don't like *complex* math, I don't recommend.

    I mainly made the switch because Software Engineering is more generic, more open to moving around to different areas. Once you know circuit theory and advanced signal analysis (ie. DSP) you are slotted in a specific area.

    Keep in mind though, people like ASIC designers make good coin.

    rLowe
  • Computer Engineering, (at least at the college I attended), was a hardware degree with a software focus. Computer science was a software degree, with no hardware. I decided on CompE, so read the below with my bias in mind. =)

    In my experience, both comp sci and comp E majors could program. The real difference came when you crossed software with hardware, like in embedded programming.

    If your goal is to write object oriented software, on user level applications, or create the next set of tools to be used for development, go comp sci. If you want to get into embedded stuff, it sure is nice to understand the hardware you are working with a bit.

  • I agree with most of what you said. However, note that at my university [ualberta.ca], Computer Engineering is significantly easier than Computer Science. There is a huge amount of overlap between the two, of course. CompEng students take many of the same compSci courses, at least for the first two years. CompSci students take many of the same eng courses (though harder math and english courses, of course).

    --
  • CS = dotcom whore. You'll probably go into IT or be a code monkey

    Yeah. Because Cormen, Knuth, Sipser, Rivest, van Dam, etc. are such IT whores and code monkeys.

    The robustness of the degree depends not so much on the field but on the degree program at the school in question. You can go to any number of schools and get a degree that prepares you to be very good at IT, software engineering, etc. That does not completely describe the field of "computer science", however; it describes some of the applications of computer science. A scientist is a rather different creature by necessity.

  • by jason000042 (319801) on Tuesday February 27, 2001 @10:08AM (#397545)
    You can become a computer programmer anytime. It's like carpentry, you learn on the job.

    Don't listen to this. This is the reason that so much software sucks. And so many web pages. People that don't really understand programming and computers write ugly, kludgy code, and they're lucky when it works.

    Computers are complex. You need to know a lot about everything. To write efficient programs you need to know how CPU's work. To make efficient CPU's you need to know how high level programming works. That's why a lot of CS and CE degrees differ by a small number of courses.

  • I have always thought that there should be a distinction between Software Engineers, and Computer Scientists. Well... There already is a distinction, but I think schools should off them as two separate majors. Software Engineers will become code monkeys. They will be well paid, and that is good because that was probably their intent.

    Computer scientists on the otherhand are more interested in the math and theory behind the applications. Computer Scientists do less "useful" stuff, speaking for the present, and are really just software academics. Its sort of like the difference between those who use ML and those who use Java.
  • was just here [cornell.edu] a little while ago - an example of Computer Engineering. You decide.

    (PS - you can get an AT90S8515 kit for about $70 here [kanda.com] )
  • I'm a programmer. Been so every day of my life. I chose CompE over CS and IS. It wasn't easy, because CompE is a lot of electronic work. However, learning to be any type of engineer requires you to learn (more like pounded in your head) how to be a pristine designer. Learning stuff like OOP, UML, and design patterns are easier. CompE's can make design documentation in their sleep.
    When you get out in the real world, you don't sit and code every hour of your job. You have to look at your requirements every morning and make design changes based on your requirement changes. Sure you code most of the day, but the important stuff is the design you do every morning. Trust me, when it comes to coding, its better to be a good designer than a good coder. And, as you probably know, if you code all day without design, it usually results in wasting hours of coding something that isn't a requirement, where as if you spend that extra hour every day designing, you hardly have to go back on work you've already done.
    CompE is the hardest computer degree... requires a ton of math and sciences, but its better to go through 5 years of hell and be set for life than breeze through 5 years, and spend the next 10 years proving your worth.

    --
  • When I was going through this same decision process, I decided that either was a valid position. Certain schools however have an outstanding program in one of the fields and that's what you should study. For instance, Carnegie Mellon is probably THE school for Computer Science, but their CompE department isn't world class. Alternatively, UIUC probably has one of the best CompE departments but their CIS department isn't number one.

    The basic tenet that CompE = hardware, CIS = software is true. However, my experience is that CompE is a much more well-rounded degree. A true plain-vanilla CIS major is nothing but a two-bit (no pun intended) lab monkey who sits in front of a screen all day. If you can find a CIS department that doesn't teach programming, but instead teaches software ENGINEERING then you will have the opportunity to learn about programming theory, algorithm theory, mathematical representations, etc. An engineering CIS department is a thousand times better.

    On the other hand, at least at my school, our CompE department could wipe the walls with the CIS kiddies. We have to spend nearly as much time programming as they do, and are often better at it. I think that understanding the internal hardware makes you a lot more qualified to write code that best utilizes that hardware. And by the way, most CIS majors couldn't write assembly to save their grandmothers.

    The final comment is that often CIS departments are not accredited progams, where on the other hand CompE generally is. That can be of critical importance if you end up at a state school especially. Always stick with an accredited program over a non-accredited one (unless it's some special program like video game programming or something that is not universal) because you'll be on the same playing field with other graduates in your major.

    Hope it helps,
    |\|\ajorachre -- out --
  • IMHO, this is just plain wrong. It's *much* more important that you learn how to think algorithmically than to learn all the languages that are currently "hot". It's trite, but the important thing about college-level computer science curriculums is to learn how to keep learning. If you don't think so, go to DeVry.

    Were I going back to school, the one thing I would look for is breadth in the curriculum. Am I going to be learning about the many different programming langauge paradigms? Am I going to have the opportunity to take classes in a range of areas (AI, systems, databases, graphics, HCI, theory, etc)? How much depth will I be going into in the various topics?
  • The main difference between CompEng and CompSci, IMHO, is the attitudes towards abstraction and complexity. In CompEng, the emphasis is on concrete things (e.g. hardware gates, device physics etc), whereas in CompSci, the emphasis is on software, which leads to a tendency for more abstraction and virtualization.

    I had an engineering-based education, and now work in a software-based field. Usually when I read a technical paper, I can tell from the level of abstraction/virtualization whether the author comes from a CompEng or CompSci background.

  • Here goes my ability to moderate in this thread, but I just wanted to point out that this is the single best post I've seen on Slashdot in weeks.
  • Computer Engineering is about how to make the computer. Computer Science is about how to make the computer do what you want.

    Seriously though, I would get a hold of the course catalog for a school you are interested in, and see which classes in which degree/department has more interest for you. For example, most CprE programs require some EE coursework; if you're not interested in EE, go CS. Career-wise, it makes very little difference really. Figure out which department you'd be happier spending 4-5 years in, and go with that.

  • Speaking as a software engineer, I personally know a whole lot of Computer Engineers and Computer Programmers. Most of the hardware folks know how to program and most of the software folks know how to design circuits. But let me tell you... The code from most hardware designers is utter trash compared to the stuff that the real software teams puts out. To be fair, I wouldn't dare design a real circuit.

    If a computer engineer could easily go into programming, that's only because a programmer could easily go into computer engineering. Because there's such a dire need for programmers right now, even bad programmers look good. Maybe that's why it seems like computer engineers have no trouble programming. They don't look that bad by comparison to all the unqualified DotCom code monkeys. But real programming, just like real hardware design, is not something you just "pick up" but instead learn through years of experience.

    On the bright side, that does mean it doesn't matter which major you pick as long as you get lots of exposure to different fields.

    -Ted
  • by roguerez (319598) on Tuesday February 27, 2001 @10:15AM (#397588) Homepage
    I'm not sure whether this was a troll or not. Anyway..

    There is a big difference between learning programming on the job en being an educated computer scientist.

    I don't mean to downplay possible intelligence, speed, intuitiveness, adaptiveness, etc. of self-made programmers, but you just cannot replace a university degree computer science with work experience.

    A good computer science curriculum includes mathematics (calculus, linear algebra, algebra, discrete math, logic, formal languages). No matter if you directly use this math after your education or not, you will be trained in logical thinking by having followed these courses. It makes you aware of current problems in computer science and mathematics and enables you to recognize such problems on the job so that you will not try to re-invent the wheel.

    Furthermore you'll learn lots about how computers, networks, operating systems etc. actually work. Although you may know a lot about computer without having studied them in university, you'll be surprised how much new stuff you'll learn when studying computer science. I knew a lot about computers before starting my studies, but know I am able to build a 1 or more bit CPU by myself if it was necessary. I would use the book of course, but I know down to the digital logic level every detail of how a modern microprocessor works. As for computer networks: my programming assignment consist of building my own networking stack including ARP/RARP, IP (with fragmenting/assembling), UDP and a TFTP server and client on top of that. The only thing I get is the ethernet driver, I have to build the rest myself.

    Even then, programming is maybe 25% of the complete curriculum.

    There's no way you'll get this knowledge when just doing programming on the job 5 days a week, without formal studying of the subjects.
  • by Basilisk (20668) <ahung&alumni,uwaterloo,ca> on Tuesday February 27, 2001 @10:15AM (#397589)
    The fields of computer science (CS), computer engineering (CE) and electrical engineering (EE) are very inter-related.

    In a nutshell, CS is pure math/software (do NOT think CS is just programming), EE is pure hardware (from to atomic level up), and CE is basically a blend.

    CS majors have very little hardware (I think one, maybe two digital logic courses is all).

    EE major have very little software (a little assembler in a uP course, and one or two C/Java courses).

    CE people do both. For example, at the University of Waterloo CE program, hardware and software is basically equally split, with a slight emphasis on hardware.

    The problem is that, while CS and EE are basically the same everywhere, CE is _not_ the same everywhere.

    Keep in mind that while a CE (and even EE, to some extent) can easily move into most programming jobs, a CS will find it difficult, at best, to move into hardware fields. CE/EE also have the advantage of understanding how hardware works, so are often preferred for writing low-level code (such as drivers), and will be better at debugging said code on a product.

    If you like hardware and hate software, choose EE. If you don't like hardware, choose CS. If you like both, choose CE.

    FYI, I am currently in a computer engineering program, but I had considered myself destined for computer science for all but the last bit of high school. I have zero regrets about choosing CE or CS (I know quite a few CS majors).
  • Get a liberal arts degree.

    Nobody cares what your undergraduate degree is, and you'll have plenty of experience when you graduate. You'll be a better human being and much happier if you don't kill yourself with geekthink before you learn how to write in English.

    As an IT manager, my #1 criteria for hiring is, "Will this person creep everyone else out, or does he/she speak English and know how to behave in civilised society?"

  • Computer SCience really is a science. It deal with the science of computing. What dos this mean? It means that you are probably going to study about things like how a database works. The software part of a database. Computer Science also requires more programming classes, like C or C++ and probably now Java. You'd probably not be required to take any electronics courses, but you'd probably have to take lots of numerical analysis courses and logic courses.

    Computer Engineering is moreof how the hardware works. Like how to build your own CPU and such. This would actually get into the transistor level of hardware in many cases. You probably would take a few electronics courses as well.

    Computer Engineering is an off shoot of Electrical Engineering, with a focus in Computer Electronics rather than general electronics. In some schools the difference between CS and CE or CE and EE is not that big. In the school that I went to it was assumed that if you were a computer engineer that you would basically be an electrical engineer with a focus in computers. Many of my CE friends (I was EE) had al the same classes as me except for maybe 6 were different. I had to take Signals and systems which dealt with fourier transforms and complex applied math, where the CE's did not as well as an EE I had to take Microwaves where as the CE's did not. However they all had to take Elcetronics, Semiconductors, and Computer Architecture, where as the CS students did not take these classes.

    This was a few years ago so things could have changed since.

    I don't want a lot, I just want it all!
    Flame away, I have a hose!

  • The first thing you want to do when you're making this decision is ask yourself what sorts of things you want to do. What do you like? Do you prefer taking your box apart to recompiling your Linux kernel? Is it more interesting to you to read about diodes, transistors, and electricity or about linklists, loops, and theoretical math?

    It'll be pretty flexible when you get started, too. Often times, you'll find that many of the courses you take within CE or CS will be the same. You'll take a lot of Math, some Physics... the basics. At the University of Illinois (the engineering school with which I'm most familiar) you'll take CE classes if you're a CS major (Intro to Electric and Electronic Circuits) and CS classes if you're a CE major (Intro to Computer Science). So, if you aren't entirely sure going in, you can take a little bit of both.

    Rule of thumb is this: if you're interested in the nitty-gritty interworkings of computers and their hardware, you'll probably like CE. If you're interested in the nitty-gritty interworkings of software, you'll probably like CS. If you want to be a pointy-haired boss, and manage all of the above, MIS is the place to be. ;)

    Good luck!

    ~Di
  • As I student I earned degrees in "Computer Science and Engineering" and, like most, always assumed that computer engineers were more into hardware and computer scientists were into software more.

    However, that is completely wrong.

    You see, if a university wants to give someone a degree with the word "Engineering" on it, the program has to be accredited by ABET [abet.org]. The accreditation makes sure that students are learning enough programming and, yes, that they know at least something about circuits, computer architectures, and signals and systems (about one class each is enough). Therefore, only departments that have been accredited by ABET can give "computer engineering" degrees.

    If a University wants to give "Computer science" degrees then it can get accredited by CSAB [csab.org]. Their accreditation requirements are more "lenient" than ABET's since they require fewer "hardware" courses (if any).

    Usually, the only difference is that a computer engineer has to take about three more classes (circuits, computer architecture, signals and systems) than a computer scientist in order to fulfill the degree requirements, but it depends on the school.

    Note also that CSAB and ABET are integrating [csab.org] their CS and CE accreditation so in the future there probably will not be any difference.

    The U. Michigan has a good FAQ [umich.edu] on the subject.

    I know this because almost every singly student I advise asks me about it.

  • Preamble: I hold a Bachelor's degree in Computer Science, which I obtained in 1994. I'm presently the Director of System Engineering at a large wireless company in southern California.

    Know what? In the long term it won't matter which degree you get, because I think it's far more important what you do BESIDES get your degree while you're at school that'll make the difference. It became apparent to me when I went back to school (at 23) to get my degree (after a few abortive attempts in other majors) that 'Computer Science' programs were by and large designed to churn out academics - people who are supposed to remain in academia researching the most minute details and esoteric topics. They're NOT designed to turn out people who are useful in industry - building THAT skill set is up to you.

    If you want to prepare yourself for a job in the real world, get either type of degree (C.S. or C.E.). In the meantime, get a job in face-to-face customer support, work on a help desk at your school, and spend as much time as possible filling your option classes with courses OUTSIDE the CS/CE curriculum. In order to succeed in the business world you'll need to be far more rounded than the typical CS or CE degree will make you.

    Take business classes, take history of science, take geology - take SOMETHING to make you more than 'just' a geek. (I consider myself a geek still, by the way. I'm 34 now, and I started with computers with a TRS-80 Model I Level I at 12 in 1978).

    If you want to make it in the business world your computing skills will only carry you so far. Make sure you're more than the sum of your geek skills and you'll excel no matter which degree program you choose.

    -drin
  • clear as mud. thanks.
  • by Mazzella! (16436) on Tuesday February 27, 2001 @10:18AM (#397602) Homepage
    Be a liberal arts major. You can become a computer programmer anytime. It's like carpentry, you learn on the job.

    Don't listen to this!! The absolute worst people I've programmed with have been these sorts of people... who think they can slack through college and the "pick up this programming thing" on the job. They absolutely lack the discipline of programming, don't plan their programs out well enough, and lack the insight into useful algorithms and methods to make programs work. These sorts of people will become managers and lack the knowledge of true software engineering to manage effectively.

    If you want to get into programming, go into Computer Science. If you want to get into the hardware engineering for computers go into Electrical Engineering, since I feel the "Computer Engineering" degree doesn't go into great depth in either CS or EE (or so the programs I've been exposed to have been)
  • I don't believe that there is a firm line between Computer Engineering and Computer Science, but I would suggest it isn't a hardware/software issue at all.

    In Engineering School we had much more of a focus on problem solving, as opposed to the research oriented focus of your typical Scientist. For example, a CS major might study sorting algorithms in great detail, while an Eng major would simply learn the basics of sorting, and the advantages of different methods.

    This difference isn't just found in the computer field, as we can have Chemical Engineers and Chemist, Civil Engineers and Material Physicists, and so on. Generally what separates the two teams is that scientists investigate natural phenonomon, while the engineers specialize more in applying this research to real-world problems.

    Of course this is a generality, but seems to apply to the science and engineering environments I've been a part of.

  • Disclaimer: I majored in Electrical Engineering with a Computer Science minor. I went to a school where my peers generally considered the Eletrical Engineering program to be more rigorous than the Computer Science program. I confess that my opinion may be schewed by this experience. YMMV.

    The terms "Computer Science" and "Computer Engineering" are somewhat nebulous; different schools will use them to mean slightly different things. "Computer Science" is almost always far removed from hardware. "Computer Engineering" may or may not be. Some schools will also offer a Computer specializiation within their Electrical Engineering program; this will definately be hardware-oriented.

    That said, being close to the hardware you'll learn more about assembly and about how the guts of a computer works. An Electrical Engineering program is typically much more calculus-heavy than a pure-software program. Being closer to the hardware will prime you for doing low-level work such as kernel hacking, embedded systems, compiler hacking, fine-grained optimizations, dealing with network packets, etc. You'll also likely to learn a whole slew of other interesting things about electronics, signals, and how to avoid-calculus-and-use-algebra-whenever-possible (Eletrical Engineers have developed many innovative techniques for this). You can become better at programming in C than the average pure-software person since you'll understand what the machine is doing underneath it all.

    With a more purely software program, the school is more likely to expose you to things like Java, GUIs, databases, and other high level things.

    In my experience, many companies will gladly hire anyone with a CS or EE degree as long as they have the requisite skills. For example, for an embedded systems programmer, a computer-focused EE or a low-level-focused CS are both suitable. For GUI work, a CS is more likely to be hired simply because you're not going to find many entry-level EEs with GUI experience.

    (Hint: virtually everything electronic is an embedded system these days. Particularly sexy, high-paying jobs can be found in the networking industry. Somebody needs to program all those routers and figure out how to make the Internet backbone better, faster, and cheaper...)

    Eventually, for a programming job, it doesn't matter which degree you have; it's your skills that count. If you spend lots of time coding on your own time, that goes a long way, and the skills you accumulate will open countless doors for you. Employers often like to see that you have a degree, but once they see that they begin looking at what you know how to do.

    YMMV

    -- Agthorr
  • Computer Engineering is sometimes used to talk about building the physical hardware. But it's also (mistakenly) used to refer to "Software Engineering", which is a whole different kettle of fish.

    Computer Science is the study of computer programming, but usually does NOT get into the software engineering aspects, much. It's much more concerned with implementation than design.

    Software Engineering, on the other hand, fixes entirely on the design (oh, for the days of JSP, JSD, Z, reification, etc...) and leaves the implementation to others.

    This difference is NOT trivial. If you're good with abstract mathematical notation, SE is a good field to be in, or would be if anyone hired people in this field. (Well, the military probably do, but I doubt much beyond that.)

    On the other hand, if you're good with programming and logic, then CS is probably the better field. Sitting behind a desk, scrawling equations on bits of dead tree just doesn't compare with typing the actual instructions into a machine.

  • You probably can pick up the CS information handling stuff that you'd miss from a CE or EE degree on the job. CE or maybe better yet, EE with leanings towards CE, gives the background neccessary to design systems from the electron up.

    Then when you're done, you're free to take either route. Trying to go the other way, CS to CE, might not be as easy. You'll miss out on the circuits, digital systems, electromagnetics, linear and digital integrated circuits classes. Which although not uneccessary for for CS, are crucial to computer system hardware at the board and chip level.
  • CE gives you more options. At the school I went to, CE is a cross between EE and CS, so you'll take some of the junior level EE courses and cut a few CS courses. At a lot of schools, I think they have special CE courses, but the coursework is probably pretty similar to what I had in my upper level EE courses.

    Now for the important part. Here is what you can do (without a lot of trouble, anyway) with each of the degrees:

    CS: software (mostly app/GUI software)
    CE: software, hardware, embedded software (any low level software really)
    EE: software, hardware, embedded hardware

    Please no flames by CS people who do jobs I didn't list, this is from what I've seen at my school.

    Notice which ones allow you to do more. And yes, software companies will go for EE's and CE's. I had a few recruit me, in fact, although I wanted to go into hardware.

    The saying is this: EE's can be taught software. CS's cannot be taught hardware. I'd go for CE in your case. EE and CE degrees are far more "robust" than CS degrees in my opinion. Keep this in mind, however: you won't have to choose a major or lose much time if you don't decide for sure until about the end of your second year. The coursework proabbly won't vary by more than a few classes in that timeframe.

  • by toast- (72345) on Tuesday February 27, 2001 @10:23AM (#397624)
    I am a 4'th year Computer engineering major.

    I've had to deal with the same questions as you and it boils down to how passionate you are about certain aspects of the computer world. Be advised this is not the be-all end-all of advice.. but it may help you:

    a) Do you love hardware? Do you long to learn how your motherboard works? How a CPU is built? How do you create those chips on your motherboard? Do you find electronics interesting?

    b) Do you love programming? Do you strive to solve complex programming issues? Do you write tools or programs in your spare time?

    If you agree with A, choose Computer engineering.

    If you agree with B, choose computer science. Computer science, in most programs, is MOSTLY programming theory, with very little hardware.

    Choosing route A will lead you to learn basics about computer science, but as well how computers were first designed, to how complex today's chips are, and methods on how to design them. You will do far less programming than a CS major, but you should still come out with the ability to write good programs, as well as hardware design.

    There are degrees which combine the best of both software and hardware, being a Canadian I can only point out two examples. These are both Engineering examples.

    Sysyms & Computing at University of Guelph [uoguelph.ca]

    Systems Design Engineering at University of Waterloo [uwaterloo.ca]

  • Computer Engineering deals more with low-level stuff..not just hardware, but the theory behind Electrical Engineering. I would suggest taking at least two Electrical Engineering classes while taking some Computer Science classes. See where your interest and talent lies. For me After to EE classes, I asked myself, "What the hell are you thinking? You don't care about how a transistor really works at this low a level!" And I immediately switched to straight Computer Science. On the other hand, a lot of people really love that stuff. Try and see.
    ----
  • Don't just learn C and Unix. Learn how to program without an IDE. Learn how to use a non-GUI workstation. Learn HTML. Time spend on fundamentals NOW is time saved on reinventing (or relearning) the wheel later.

    Oh and to the people saying that you may be required to declare a major up front: Yes, I know. That's why I said "if you MUST".
    --
    Non-meta-modded "Overrated" mods are killing Slashdot
  • I'll state up front (no hidden agendas here) that my degree is in Geography. Before that, I had 3 years of a mechanical engineering degree finished before switching.

    Try to do college on the 5-6 year plan, if you can. Avoid the straight and narrow. Look upon the list of required classes the university will give you as a starting point, and not as a sacred document. The more you learn, the better you are in your job.

    One good example: GUI design. Part psychology (how people act), part art (it looks good), part engineer (it works good).

    Take an art class (or two). Throw in some philosophy, geography, history, classics, and a foreign language. Expose yourself to strange people, ideas you disagree with, and crowds you wouldn't normally hang with. Every thing you learn is another tool you can use later.

    Your ultimate goal should not be to complete college, but to have bettered yourself when you graduate.
  • by wmulvihillDxR (212915) on Tuesday February 27, 2001 @10:25AM (#397635) Homepage Journal
    Computer scientists (of which I am a part) deal with the same type of information, but we deal with it on a different level: we study programming language theory, algorithms, data structures and the like. How do you contain that data? How do you sort it? Etc.

    Even more than that, Computer Science has NOTHING to do with Computers!!! It is the study of what can be computed. If you want to break RSA encryption, you COULD do it on a Cray, or you COULD do it with rocks on toilet paper!!!

    I've had little exposure to CE so I can't comment on that...
  • So well stated.

    I just thought I'd throw that in, since I don't have moderator points right now ;-).
  • I learned this the hard way, so you're very lucky to find out early. CS deals mainly with software, programming, algorithms, operatings systems, languages, etc. CE deals with hardware, logic gates, transistors, processors, etc.

    My school has a major called CS&E, which I chose 5 years ago, because I was young and naive. The problem is, I learned which I wanted to do after I picked the major. Now, I find myself stuck learning about transistors (not that that's bad, I just don't like it) even though I know that I'm going to be a software developer. I regret wasting time in CE classes, but I must admit I did learn something, and that is never bad.

    You need to ask yourself what you enjoy doing, and what you can see yourself doing for the rest of your life. This is tough, especially when you havent sampled either major enough before college. I would suggest, if possible, going in undeclared, take a few lower division classes from each major (make sure to do that early, like within 2 semesters, so as not to waste a lot of time) and then pick.
    --
  • I didn't say you needed training to be a professional, I said you needed it to be good. There are plenty of non-good professionals out there. There's even the occasional untrained good programmer, those these are MUCH rarer.
    --
    Non-meta-modded "Overrated" mods are killing Slashdot
  • Computer Science: Computer Science deals with the theory of computer programming. If you have been reading Slashdot long enough, you will have seen discussions regarding algorithms, O(n) or O(1) problems, NP complete and so on. That's computer science. The coursework will generally deal a lot with writing programs in Lisp and Scheme (and other interpretive languages). There will be a good deal of mathematical proofs (number theory, set theory). You will be asked to "prove" that the algorithm you are using can solve the problem in polynomial time, for example. A computer science major learns "how" to program.

    Software Engineer: A software engineer is very different from a computer programmer. A SE will learn how to set up large software projects (normally with a team), and carry out these projects. Emphasis is on writing real programs, as opposed to proving that you *can* write the program (which a CS major would do). Software Engineers are drilled in good code structure and the correct way to set up very large programs.

    Electrical Engineer: Pure Hardware, analog and digital. This covers a huge range, from RF circuits, microwave antenna, radio, microprocessor, microcontroller and asic design. Very low-level, usually the only programming (if any) a EE will do is in Assembly or C.

    Computer Engineer: A computer engineer combines the digital aspect of an Electrical Engineer with some of the Softare work of a Software Engineer.

    The three "Engineer" majors really have very little to do with what the CS majors do. A software engineer could get by never using scheme and lisp, whereas a CS major would use those quite a bit.

    Also, for none of these should you expect to take a course in C, or C++, or something designed to teach you a specific language (except maybe an advanced C++ course for Software Engineers.)

    Moller
  • At many universities, you will find that comp.sci majors learn languages because they use them on assignments for a course whereas comp.eng majors take courses whose sole purpose is to teach a language. Also, engineering students (at least at Canadian univs.) tend to have less freedom in choosing electives. They often take more than the usual course load (6-8 vs. the 5 in other faculties - in a 4month semester). This may or may not be to your taste. In general, as a CS student, you'll have more opportunity to direct your education, since you get to choose more of the courses yourself. If you are interested in non-traditional pairings with CS such as History, Fine Art, etc you may prefer the freedom to choose your own electives. Most comp.eng's I know don't get to choose any of their non-major courses until their last couple terms. At the U of Waterloo (where I'm in CS), computer science contains a lot more math courses (it's part of the math faculty) than comp.eng.
    ---
  • I started out my education (at Virginia Tech) as a Computer Engineering student and later switched to Computer Science. I did this because I was told that CpEs (CpE == Computer Engineer) get a more rounded computer education and that "engineers" are more respected, command higher salaries and are more employable because of greater flexability. What I found was that 70% of CpE was EE. If you're going into hardware or chip design you need that EE background, but if you're going into anything else, you will have wasted 60 credit hours on material you will never use. And the cost of that (besides monitary) will be minimal programming knowledge.

    And in reality noone these days worth their salt gives a lick about your degree - only if you can be productive. And think you're getting a higher salary by being more flexable and/or working w/ hardware (many times more difficult)? forget it - you're not even close to the 60k+ starting salaries GOOD new-grad CS people get.


  • mm. I go to RIT, and I can tell you that SE is _NOT_ (and I repeat, NOT) a cross between CS and CE. Software Engineering is about engineering the software development process; it has less of a focus on CS's "algorithmic thinking" and more on churning out good, quality code in today's languages. So think about that good and hard.
  • The typical "CS is software, CE is hardware" is rather vague and almost stereotypical, but I think it's reasonably accurate.

    As far as software courses go, the core courses here include Java, data structures and algorithms, an OS course, and a software engineering course. 4th year elective courses include AI, database, distributed systems programming and more software engineering courses

    I myself graduated from CS at Waterloo a few years back. (For those who don't know, Waterloo is, deservedly or not, arguably or not, Canada's most reputable university for computer-related studies. It's a couple of hours drive from Toronto.)

    I agree that CE is a bit broader than CS, but I'd disagree that CE is simply a superset of CS (as somebody else, not you, has stated).

    At Waterloo, the difference is not just one of focus, but of administration: CS is part of the Mathematics faculty, and CE is a part of the Engineering faculty. I understand Waterloo is one of the few universities that has an entire faculty devoted to math.

    The CS curriculum there includes very math-like subjects such as computing theory and abstract machines like Turing machines and finite state machines. And obviously, there are more pure math courses.

    P.S. From one Waterloo alumnus to another (soon-to-be), get ready for lots of letters from UW begging for money...

    --

  • Edsger Dijkstra, winner of a Turing Award and a contributor to the field of Computer Science in many many crucial areas (proofs, path finding, semaphores, etc...), does his 'computing' with a pen and paper.

    Pure computer science doesn't focus on tools, methodologies, or implementation. It focuses on proofs and design.

    Hence the famous quote by Donald Knuth, "Beware of the above code; I have only proved it correct, not tried it."

    I happen to dislike much of this way of thinking. However, without pure CS the rest of the programming community would be far less enabled. Think of it as the difference between experimental and theoretical physicists.
  • Now I know that we all love to use this phrase, but I've gotten annoyed as of late by it's misuse. Go back and watch the movie [thefever.com] and you'll see quite clearly that it's:
    • "Someone set UP US the bomb."

    The fact that everyone has been getting the "up" and the "us" in the wrong order is just frustrating. You may now all go back to your trolling, but please, in the future, troll with the proper word order.

    --

  • Com Sci is the science of computation. It's a high level abstraction that searches out mathematical algorithms. You learn a programming langauge like you learn english, then you use it to discover new frontiers (such as compression, encryption, AI, etc).

    Unfortunately, once someone discovers the frontier, the can it, and it becomes a black box for everyone to use thereafter. "Programmers" are people that use these canned boxes (after hopefully learning at least a little bit about data-structures and basic algorithms). You can go to trade school or pick up a "learn X in 21 days" and be a high paid programmer.

    Software Engineers are true engineers that treat a piece of software like a bridge; they handle the whole process from concept, to prototyping, to implementation, to testing. They also program (though not necessarily).

    Electrical Engineering (which is what I took), first and foremost teaches about electricity, materials, and the physical devices (like radios, alternators, and computer-parts). You are free to take all the programming and com-sci that you like. EE's also can focus on communication theory or filtering tools (often used in audio / visual). Anything an EE does will involve some type of programming (but rarely in C; More like VHDL, Matlab, or others).

    In many Universities, Computer Science requires you to learn some Arts or applied science. Programing is only useful if you use to towards another field. So you'll have to learn "education", for example, so that you can write programs for teachers. Or learn Geology, and write software for them. Etc.

    Computer Engineering is Computer science with the focus on computers. It's probably closer to EE than Com-Sci (at least at the University of Delaware), because you learn about material science. Because it's engineering, you're closer to being a "software" Engineer; you have much of that engineering theory (you have many physical design projects throughout the course-work). Once you're CompEng, you have the option of doing literally anything... You could pick up a minor in Medical science and write software for them, or go straight into designing the next great Video Chip, or just rent your services out for web design. In CompEng, you have fewer available electives since much will already be chosen for you (math, physics, EE, com-sci).

    Com-sci gives you the most flexible course options, especially if you're not interested in physics or hard math, but Comp-Eng is a more valuable degree over-all (if you purposefully take a diverse set of courses).
  • dont forget to read up on CS vs CIS:

    http://slashdot.org/askslashdot/00/12/27/1634227.s html [slashdot.org]
  • by nosilA (8112) on Tuesday February 27, 2001 @10:34AM (#397677)
    This is probably the best advice I've seen! The programs vary vastly from school to school, what is "CS" at one is "CE" at another or "IT" at another. For the most part, any place hiring programmers will consider CS and CE the same way - it's only really hardware or really theoretical jobs where they care either way.

    For example, at my university, there is Computer Science, Electrical and Computer Engineering, and Information and Decision Science.

    CS is focused on algorithms, data structures, compilers, although there are some system options.

    ECE has a lot more flexibility, you can essentially get a CS degree with only a few hardware classes, or you can get essentially a physics degree, or the more traditional EE curriculum...

    IDS is where you go if you want to be an IT/web whore, you have to take a few "real" programming/algorithms type classes, but it's mostly web applications and such.

    But, YMMV at any school, so get the catalog, talk to students, etc. Be warned, most students will answer that theirs is best - listen carefully to why they think so.

    -Alison
  • Imagine your university only teaching you things like writing COM objects and SQL queries. Then you would not have learned how a protocol actually fundamentally works, but only specific implementations of protocols. That is not science. When you've had to code one yourself, you'll actually learn how it works. It doesn't matter if it's TCP/IP or another protocol. You had to build one, therefore you are able to create another one, perhaps one you design yourself. As for SQL, in my databases class we had three types of query languages: relational algebra, tuple calculus and domain calculus. The SQL chapter was only an informative read because it's just an implementation of a formal query language. When you know about formal languages, you could pick up any real life language in a very short period. That's the whole point of a university degree. Learning 'real life' things is what you do on the job, but many time faster and better than someone without a formal education.
  • As a student that goes to a campus with an ICS major, as well as a student that is INTERESTED in going into that particular field as a major or minor, or double major, I can vouch that some schools do belive that CS turns into part Web Design and programming. At my school, there are such classes as Sysadmining through a particular OS, and, yes, the obligatory "web" class. But that does not mean there aren't other classes out there for students like myself to choose. There are the inquisitive, math heavy, "theoretical" classes, such as algorithm design, network topology design, etc. A truly good school will teach you Java, C, C++, but only as tools to help you understand the ideas that go behind making those languages work, and work effectively.

    Also, a school that has a good CE as well as a good CS major, should "cross breed" the programs. So that CE Majors get a taste for the people that they're designing for, and the CS majors get a taste on the physical limits of hardware. Makes for strange bed fellows, and also helps technology increase

    FYI, I am a student at University of California at Irvine. =/
  • In the EE curriculum which I pursued, there was a course called "EE Materials and Devices." All this class addressed were diodes, BJTs, and FETs from an extremely theoretical standpoint. When someone says "and devices" to me, I am thinking of more than 3 devices in total. Ditto goes for "Principles of Electronic Instrumentation" which basically covered the same material in an introductory capacity. Man, was I sick of transistors by the time that was over. It was a waste of time.

    Or how about "Linear systems and signals" which was a continuation of continuous Laplace and Fourier analysis from differential equations, or "Signals and Systems" which opened the discussion of discrete applications of Laplace and Fourier? Did the course catalog rightly discuss how these studies grew out of differential equations? Of course not.

    Sorry, but a freshman will have absolutely NO idea what these courses address by looking at the title or a one-paragraph discussion in a course catalog. Were they to know, they would be somewhat disappointed.

  • Isn't that sort of like saying, "Real Chemical Scientists don't use chemicals?"

    My experience from my days as a student slave in the chemistry stockrook taught me that most real chemists shouldn't be allowed anywhere near chemicals, especially the organic chemists. Damnit, all they ever do is make really dangerous things that smell bad.
    _____________

  • Think of it as the difference between experimental and theoretical physicists.

    That difference is a relatively recent creation. In its early days, physics was an experimental and theoretical pursuit for the scientist. The increased complexity has "forked" physics.

    In any case, experimental physicists aren't any less physicists for validating theory. They're the "experiment" part in the scientific method. Theory that can't be demonstrated is hot air (see early philosophy) and experiment with no aim is generally regarded as psychosis.

    In short, my point is that experiment is vital to "sciences." If thought-experiments are all that make up "Computer Science" then it would be best classified as a branch of mathematics. The theories in CS (stemming from Turing's and John Von Neuman's in automa) are the scientific part. "Theorems" belong to pure mathematics.

    ____________________
  • Actually you proved my point. Just looking at the titles of the four courses you mentioned I know that I'd have no interest in any of them. And nothing close to those was in the CS curriculum I had back in my college days. I didn't expect the kid to learn every detail about every class, man, geez. But you can tell alot about whether you prefer CE or CS by whether a class like "Linear Systems and Signals" even sparks your interest.
  • I would suggest that you double major in both and drop one after two years. At that point you should know what you like. The course load overlaps. Lots of math. Skills used at either discipline are applicable to both. If you don't wish to double major then major in one and minor in the other. Either way there is much overlap in courses. However in any event you are not very likely to take easy, mellow courses with which to explore the liberal arts side of your mind. There just won't be much time left with a double major or a major with a minor.
  • As a electrical/computer engineer and a soon to be CS graduate student, I will try to expain this as best I can.

    Computer engineering has its roots in electrical engineering. Electrical engineers do not only learn about circuit analysis they learn about microwave transmission, waveguides, transmission lines, optics, analog/digital communications, neural networks, etc.

    Since computer technology has its extreme set of complications such as VLSI design, embedded system design, digital networks, microprocessor design, etc, the computer engineering field was created to face these specialized challenges.

    Computer Scientists on the other hand tend to learn software engineering principles, theory, programming languages, and there math coures tend to be less intensive than an electrical engineers by default. This by no means implies that computer scientists do not or cannot take hardcore math classes.

    Computer engineers do take computer science classes such as computer architecture, assembly, object oriented programming.

    To sum it up:

    Electrical Engineers: Physics, computer architecture, math, minimal programming.
    Computer Engineers: Computer architecture, firmware design, math, low-level programming.
    Computer Scientists: Software engineering, programming languages, theory, math.

    If you equally love hardware and software pick computer engineering. Although I believe there is more long term security in the traditonal fields of CS and EE.

    If this still does not help, you can do what I did, which is take them all :>

  • Although I don't agree with PD's approach, I agree that both should be avoided as primary majors, minor or get an equivalent minor in them.

    From my experience CS and ECE majors learn "cookbook" ways of dealing with problems. Now, there isn't anything wrong with that, but it isn't the best approach. I have found that the physics and math majors do much better in the ECE and CS courses then the ECEs and CS majors do. The reason why is because physics and math are the basis for all of engineering, so not only do you have all of the knowledge gained through the ECE and CS courses that the pure majors get but you have a fundamental understanding of what is happening. The most important difference, though, between physics/math vs ECE/CS is that physics/math teaches you to use what you have to approach problems that you have NEVER seen before, whereas the ECE/CS teaches how to approach problems that look similar to ones that you have seen before. A good analogy is learning phonics vs whole language, both technically "work" but phonics teaches how to deal with new words whereas whole language requires some outside source to teach you.

    Take the courses that you are interested in, but my advice is to learn the fundamentals.
  • See here [umich.edu], or refer to my other post.

    Myth - "Those with more interest in the hardware or architecture design aspects of computers should be CE majors." This is a common misconception, since both CE and CS degrees require a balance of software and hardware courses. In fact, CE is for those wishing an engineering degree, and CS is for those preferring a more science-oriented degree, or those preferring a computing degree within the context of a liberal education. from here [umich.edu].

  • Really, almost any degree is what you make of it. I myself was a Computer Science major, and I had a lot of friends who were EE majors. We had a huge degree of overlap, I took a lot of engineering course (like digital logic design and computer architecture) just because I was interested in them, and a lot of my EE friends took things like OS design and algorithms for the same reason.

    What I'd suggest is to look at the minimum number of courses needed for each major and decide what you like the look of best - after all, after you finish the base classes you can take just about anything you want including classes for the other major! Try and make the whole thing as interesting as possible for yourself.

    I'll now offer one glib obvservation - CS majors spend all thier time time in a computer lab, EE majors spend all thier time in physical labs wiring stuff or doing experiments.

    And to address your question about companies being "desperate" enough to hire EE's for programming - EE's are just about as desireable in my mind as CS majors. I don't think you'd have any problem either way, so don't let that be an issue in your decision.
  • Ok.. i kinda take offense to this as a third year Computer Science Major. My education has been based on theory, algoriths, and fundamental theorems of computer programming and software design/implementation.

    Your comparision of Computer Science to dotcom whore is about as accurate as calling a music education student an industrialist.

    Especially with the advent of IST majors, and colleges which specialize in the internet and information marketing the students for careers, people have to keep in mind that in general, a CS degree supercedes an IST degree.

    Now back to the comparison of CS and CE.. To say one is better than the other is just horseradish. Neither can properly exist without the other. Yes a computer engineer is taught some programming, but they are typically nowhere near as skilled with programming theory and optimization. Yes CS students have a basic understanding of logic and circuit design, along with a core in assembly, but they can't just jump into creating embedded systems..

  • As an employer one of my first questions was: "How much math have you taken?". Anyone who hadn't had 2 semesters of calc would never be considered. The more math, usually the more logical the thinking of the candidate. The smartest person I ever hired had a MS in math. Discrete math and data structures are also important, but they are really math classes. I consider programming primarily applied math.
  • I suppose it really depends on your school, but the primary difference I've seen between CS and CompE is the focus of the math. At my university, where I've switched back and forth between CompE and CS several times, the distinction seems pretty clear.

    In CompE, you will probably never be asked to prove that a problem is np-complete, or need to determine the order of a sorting algorithm. These are high-level analytical techniques that relate to programming concepts in general that you really only learn in CS.

    On the flip-side, a CS student is never going to be asked how to solve a field equation, apply Gauss' laws, or prove that the transient response of a steady-state circuit can be effectively ignored.

    Really, both of these things come down to the types of advanced mathematics you end up learning. Most of what made CompE different at my school was Electrical Engineering coursework; and most of that is deep into the land of differential equations, complex number planes, and all sorts of high level calculus. On the other hand, the CS coursework that really matters is the study of algorithms and of the theory of computing in general; doing proofs, using deductive logic techniques, and other types of analytical math.

    As for programming and hardware, there is no difference generally in what you learn. Even the most simple of electronics typically requires at least some code to do anything useful. And even the most abstract programming techniques ultimately will run on a real machine with real, physical considerations. Chances are you will learn everything you wanted to know about architecture and programming in either course. It's really about whether you want to understand more fundamentally the properties of electrons or the properties of numbers.
  • . I need to find the guy, who does never ever use bogo-sort [tuxedo.org] but learned programming on the fly. I don't know him yet.

    You go to a liberal arts school and learn computer science so that you know that Joseph Leibnitz defined God in terms of the many worlds theory described in the second paragraph of the bogo-sort [tuxedo.org] definition. While you're there you take classes in logic, physics, math, chemistry and computer science so that you know better than to use the bogo-sort [tuxedo.org]. There's a lot more to going to college than getting job training. If all you want is some job training go to a community college for a couple of years and learn to program or repair electronics or whatever.
    _____________

  • by PureFiction (10256) on Tuesday February 27, 2001 @10:57AM (#397753)
    This is a typical manager/employer viewpoint.

    Programming is much more like artistic composition within contraints (which happen to be mathematically related).

    Way back when IBM needed to find the first programmers to code for their new computer systems, they searched for a professional field that matched the requirements for writing software.

    Do you know who they actively sought? It was not mathematicians, it was musicians.

    Music has a very structured/math like feel to it at the lowest level, but the true expression of music is not number crunching, but artistic expression within contraints.

    As for your assertion that math grads make the best programmers, I think you have a far to narrow and biased view of the skills and talents required to produce good software.
  • by color of static (16129) <smasters&ieee,org> on Tuesday February 27, 2001 @10:59AM (#397759) Homepage Journal
    I've watched a CS and EE department fight over how a computer engineering degree is defined, and what I really got out of it is that it depends on the professors that are in the department.

    In general, a CE (computer engineering) degree is a digital design degree version of EE with a stronger emphasis on software and systems. Many schools though concentrate mostly on systems and software, while others are truly about architecture and hardware issues such as interfaces and integration. If there is a professors that teachs a lot of course on OS design, and none on the use of microcontrollers then it would be a very different degree from others, but a very valid degree.

    I have a EE background with a strong emphasis in computer design and software due to a few professors with similiar interest. If CE was offered when I got my BS I probably would have been a fairly good fit for it. As a EE though I feel I got more of a background in the way things work than a CE, but no idea about higher level things like compiler design, OS (although I did work with real time executives), or computer graphics. So given that I'd say the following:

    CS: If you are interested in programming languages, compilers, OS, graphics, and studies of general algorithms.

    CE: If you like computer control, design, interfacing. In general a healthy mix of hardware and software leaning towards the later.

    EE: If you want to know how all of the underlying technology works, but aren't interested in things like programming language design or databases. Up until a few years ago you could graduate from almost any EE program with very little programming, but this is changing quickly.

    Most important though is to look at who teaches what courses and what their teaching and research interest are. If they are in stuff you don't like then you probably won't like the degree you'd get from them.
  • To repeat what everyone else is saying, Math cannot be avoided if you're interested in computers ^^

    Algorithms, optimizations, sorting, searching, patterns, etc, are all mathematical in nature. Even if you can't grok the math, you have to have some intuition involved, or you're just not going to be able to do the CS work.

    You're correct that 90% of jobs can be doen by either a CSc or CEng. But those 90% of jobs can also be done by math majors who programmed on the side, or people who were EEs, or whatever. If you can do some real analytical thinking, and can handle structured work, you can program ^^

    Geek dating! [bunnyhop.com]
  • by DarkBanshee (149518) on Tuesday February 27, 2001 @11:00AM (#397761)
    The most important thing is to pick the major that appeals to you most personally. Contact people at the school (I realize that an actual visit may be hard, depending on location) and talk to the professors and some students in these departments. Don't rely on the catalog (you probably already know that). Don't rely on Princeton Review (their selection system is so generic as to be nearly useless for such a specific query).

    As far as the suggestion about the liberal arts degree. If you pick up a degree in English or Philosophy or some other liberal arts area, I think you better prepare yourself for the future. A lot of the work that is done by people in IT doesn't require you to have a CS degree. You can learn on the job, employers will send you to MCSE or Linux training, etc. and you can pick up certificates. When the computer market takes a downturn (as it is at the moment, at least in the dot-com sector, cross your fingers Slashdot :) ), the ability to move into completely different fields may outweigh the advantages of being an "expert" in the field you were working in (and yes, I was just laid off from a dot-com where I had been working for 4 years, so I know a little about this).

    Don't worry about what looks good to HR, whatever you do. People in HR are idiots when it comes to hiring. They take a laundry list that is sometimes given to them by the person you'd actually work for, but oftentimes they just steal stuff from other companies job postings. The HR types can't tell the difference between CS, CE, and the hole in their ass. If all you're worried about is impressing HR, save your money, spend a couple thousand on getting a few of those certificates with the fancy letters (MCSE, DBA, A+, etc.) and you'll get a job.

    As far as what you do in school, pick the major that you enjoy the most and that you'll actually finish. If you go into CS because it will look good for clueless HR types and you hate programming, you won't be a very good programmer and you may not even get your degree (it's easy to get burned out). A degree in a "non-profitable" major is better than no degree because you can then go back to school for your Master's, when you really start to learn about the subject at hand.

    And besides, even in the technological future, the world will always need people who know how to write...

  • Computing Science deals pretty much exclusively with software. You go into a lot of detail concerning algorithms, computing theory, and other things that are very academically interesting. Usually, Computer Engineering deals with hardware and software. It's like a mix of Electrical Engineering and Computing Science.

    The hardware you cover is enough for you to be able to interface real-world devices with software. You don't go into much power electronics (thankfully...)

    The software aspect teaches you enough to go out and write basically anything, but leaves out the more theoretical stuff.

    I've got a Computer Engineering degree, and now I write embedded software. Still, I know a lot of CompE's who go into software jobs exclusively. Some companies look for Computer Engineers specifically if they need someone who can handle hardware / software interfacing well, or even just for straight software if they appreciate the Engineering approach to design. Others (usually founded by CS graduates) will not even consider Computer Engineers over Computing Scientists.

    I don't know how many other places are doing this, but the University of Alberta (where I graduated from) is now offering a stream of Computer Engineering called Software Engineering, which is basically Computing Science with an Engineering approach. Plus you then have an Engineering degree.

    Blah blah blah. Hope that was interesting for someone.

  • by Nohea (142708) on Tuesday February 27, 2001 @11:02AM (#397766)
    OK, i think there is a major assuption many people here are making: you can only learn software design theory and/or discipline in an accredited CS program.

    Yes, programming can like compared to a skill.

    Yes, self-trained programmers can pick up really bad habits.

    Yes, good design and problem-solving techniques are often taught in a CS curriculums.

    However, there is no reason these skills cannot be learned by intelligent and motivated individuals outside of the ivory tower.

    Moreover, going through a CS program is not a guarantee that you will be a good software programmer or designer.

    I'm a successful programmer and software architect that has created well-designed and reliable systems for businesses. And i got a B.A. in Anthropology. Programming used to be a hobby to me. I became more interested in it at the end of my college education. After that, i learned "on my own" and took a few more classes, and got into professional programming. I found that even for "professionals", you have to be continually learning new techniques and studying new ways to design things. My liberal arts education served me well in this. I think learning on your own really means learning from others through books and the internet, and doing your own self-created experiments.

    I think if i were a CS major, i would have got a programming job sooner, but i would have to learn on my own to be as good as i am now anyway.

    There are many ways you can reach the goal you want to acheive.

  • Indeed. I'm in the second year of the CSE program (actually goofing off at lab and not paying attention to Norton and Thevenin's theorems.) I picked the CSE degree because a) "engineering" sounded cool, b) we took more core courses, and c) CS is halfway to being an MIS weenie (boy, am I gonna get it for that one), which is like CS, but without the coding.

    Even with all the disdain for coding that goes around this discussion, there's no substitute for long hours spent playing with the system. An hour of programming can explain better than five of poor lecture notes.

    -grendel drago
  • I don't agree with you. Have you seen any CS students taking digital/analog electronics, signals & systems, VLSI design, etc. courses?

    CS students take digital logic design courses, but those alone could hardly be called "hardware courses".

    ----------
  • It's not the ridiculous.

    A computer scientist is not defined by the existence or use of computers. As a macho ego statement, "Real Computer Scientists don't use computers" is silly, but not ridiculous.

    Just like the analogy that physicists don't play with physical objects. Some do, but quite a few don't. They border on the realm of math, of course.

    You're right that it is elitism, but computer science is much more about the science of computation than the science of computers. In that sense, CS can live perfectly fine without computers. Just a pen and paper will do.

    On the other hand, programmers are much more intimately tied to computers, and as such can't trivially exist without them. Programming is an implementation and a justification of the science of computation in the same way that carpentry and architecture are implementations and justifications of the science of physics.

    Geek dating! [bunnyhop.com]
  • As a ECE graduate, I have some experience in different areas.

    My univ. happened to combine both Electrical and Computer Engineering in one degree, although there were "concentrations" in 5 different areas (ranging from pure physics to pure EE to CE to almost pure CS/programming)

    By far, it differs according to your school. Each defines their degrees slightly differently. The best thing you can do is avoid concentrating until you absolutely know what you want to do. I was fairly fortunate that my school required me to take different classes in different concentrations to earn my degree. I ended up with a lot of broad knowledge because I was interested in a little bit of everything!

    From my experience, a "pure" CE student will focus on: state machines, instruction set architecture (assembly and lower), and processor/chip design. My CS friends tended to take more mathematics (algorithims, set theory, etc.) and deal with issues such as how to write drivers, graphics, OS, etc.

    From an employment standpoint, it makes extremely little difference. I graduated having realized that while I could program, it wasn't my favorite activity in the world. Unless you're applying for a very specific role (chip design at Intel, c++ developer, etc.), your major will play very little role. Employers are looking for your experience. What classes did you take? What projects did you do? What employment opportunties did you take? What do you do for fun that fits their field/profession? As long as you have the basic skills required, your degree signifies that you have the knowledge needed, and the ability to work in an environment to accomplish goals. They'll teach you the rest. If you don't find yourself learning in your new job, then it's time to move somewhere else, you're not being utilized.

    Hope this helps. :)

  • You really can be a physicist anytime? Really? I don't have a physics degree. Do you suppose they will let me run my experiments on the cyclotron at the university? Do you suppose that someone will pay me to learn field equations?

    If you read what the guy wrote, you'll see that he is 1) just entering college and 2) asking about careers in industry. I wrote my answer specifically for him. If he were to follow your advice, he'd waste 10 years of his life getting a PhD in Comp. Sci. then he'd find that his specialization hindered his ability to get a job as easily as someone with a Bachelor's or Master's degree.

    If the person was asking what courses to take to get into the right graduate schools in order to land a job as a professor of Computer Science, then your criticism might have merits.

  • Second, talk to your advisor. This is invaluable. They will be able to explain the your different options (or point you to someone who can).

    This is good advice. There's no substitute for talking to someone who knows the territory. However, make sure you do everything you can to get to know the system yourself. I have been led astray several times by incompetant advisors; on one occasion, only intervention from the Dean of Students kept my graduation date from being threatened. Had I taken the time to truly understand University policy, I could have saved myself the headache.

    Also, recognise that your classmates (especially upper-classmen) are absolutely invaluable in helping you make good decisions. From things as simple as which classes/professors to avoid/seek out to the more subtile, like helping explain the convoluted academic policies you're likely to encounter. Talk to your fellow students, and listen to what they say. This information is ususally better than any you will get from your advisor.

    If you are interested in "programming" just go ahead and start in on the Computer Science major and decide on a concentration later. I would very strongly warn you against some kind of vo-tech, "we'll teach you VB and send you out into the world" type of major. Take the full science path--it's definitely worth it.

    Couldn't agree more. Anything not directly associated with the CS dept. is likely to be a serious mistake if you want a career as a techie. (ie, programming, not just managing programmers.) What you get from a Computer Science degree are the fundamental concepts that help you learn new languages/techniques/etc. I always thought that Scheme might just be a waste of time, but over and over again I've found the concepts I used in writing good Scheme code (high-level stuff like abstraction & simplicity, as well as techniques like continuation/closure passing) useful in my every-day programming.

    In short, if you want a technical job, I urge you to go the Science route.

  • An Electrical Engineer deals primarily with hardware - logic gates, and designing hardware that will perform algorithmic computations. IE. they design chips. These are the guys who work for Intel, AMD, etc. They don't worry much about programming.

    As a working computer engineer, I'd like to point that that the above description fits computer engineers better than EEs. It's CEs that design hardware on the gate/algorithm level, while EEs generally work on "back end" -- they do custom cell implementations, place & route, I/O design, etc.

    Of course, since CE is a very versatile program, many CEs specialize in software engineering, and just end up as programmers. That's the advantage of CE over CS -- you can do both CE and CS jobs with one degree.


    ----------

  • ... it would be a waste of money to go to college!

    Excuse me? Aren't you forgetting a little something called "bandwidth?" Everybody knows that the only reason for living in the dorms (and going to school in the first place) is for Ethernet.
  • by fmaxwell (249001) on Tuesday February 27, 2001 @03:27PM (#398004) Homepage Journal
    you just cannot replace a university degree computer science with work experience.

    And you just cannot replace work experience with a university degree in computer science. If given the opportunity to hire someone with four years of professional programming experience or someone with a four year CS degree, I will take the person with the experience. I don't need someone who knows language theory, calculus, and how to how to reinvent network stacks. I need someone with practical experience related to the work they will be assigned. I have seen degreed engineers completely blow projects because they lacked the professional experience to be successful. They did not understand schedules, budgets, or office politics. One spent days reinventing something rather than just purchasing a commercial library. He thought it would save us money!

    There's no way you'll get this knowledge when just doing programming on the job 5 days a week, without formal studying of the subjects.

    What makes you think that universities are able to attract skilled computer science professionals to teach there? Most professors make a pittance compared to what a talented software engineer can make in the private sector.

    I dropped out of college to take a software engineering job. I learned far more in that job than I would have ever learned in college. The professors and instructors that I had in college knew less about software/firmware engineering than I did and some of them were downright incompetent. The inefficient, brute-force programming demonstrated by some of them is probably to blame for the code bloat that has caused common business applications to require 650MB CD-ROMS as distribution media.

    While it would be absurd to condemn all degreed engineers or college professors, assuming that people with college degrees in computer science will be better software engineers is equally ludicrous.

  • by pforce (127543) on Tuesday February 27, 2001 @03:41PM (#398016) Homepage
    Actually, the curriculum for a computer engineer or computer scientist can vary greatly from one university to another. At the University of Illinois, for example, the computer science department is in the college of engineering. This means that we CS guys go through the same physics and math as all the other engineers in our college. This translates to five plus semesters of math, all the physics you can stand (and then some), chemistry... well, you get the idea. There is also a great deal of theory in general ideas of computer science as opposed to just straight coding. Computer architecture courses are also a big part of the curriculum. Computer science and computer engineering are different, though related, paths. I think it would be a mistake to say one or the other was inherently more difficult than the other.
  • by CrayDrygu (56003) on Tuesday February 27, 2001 @05:42PM (#398065)

    Ask Slashdot: Computer Science vs. Sex?

    Dan B [bulwinkle.com] asks: "Like many other students across America, I plan on attending college as a freshman next fall. I am very interested in computers (I only reload the Slashdot site every five minutes), but there is something that perplexes me: why can't I get any? It seems that many companies are looking for computer scientists, but would any girls be desperate enough to accept one? What is the difference anyway? Well, a college guidebook could tell you 'computer engineering deals mostly with hardware' and 'girls deal mostly with shopping and makeup', but that isn't clear enough for me. I believe the Slashdot community would be best fit to offer a more in depth perspective on the two options."

    --

Programmers do it bit by bit.

Working...