Computer Science vs. Computer Engineering?
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."
Become a Sys Admin.
Well, computer engineers get to drive more trains.
Protege Posterioram Tuam
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.
The voices in my head don't like you
Beyond which title to choose, just make sure you don't go to a school that thinks a CS degree means you know Visual Basic. Make sure that you are taught C/C++/Java, and preferably some UNIX courses on scripting, perl, etc. Get as much experience on as many platforms as you can.
Good luck!
er
"Jesus saves, but everyone else in a 10 foot radius takes full damage from the fireball."
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?
If tits were wings it'd be flying around.
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
I'm a third year computer engineering student at georgia tech.
This is what it looks like to me:
CS = dotcom whore. You'll probably go into IT or be a code monkey
CmpE = Digital Design, things like pipelining, cache, etc etc etc. The intro Cmp E classes are digital design (intro to digital logic etc)
I think a computer engineering degree is more robust (esp. if you get a P.E.). A Computer engineer could easily go into programming if so inclined.
--buddy
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.
--
Je t'aime Stéphanie
Around here we've got mostly CS folks. However, there are a few CEs and EEs around that have only a little less knowledge about CS as any of the CS people do.
In beginning your career, it is not necessary to know *everything* about CS. I have a feeling that's why the CEs and EEs are able to fit right in with their comparatively lower CS knowledge. Everything else you can pick up along the way.
CE might actually open more doors down the line than you realize.
Dancin Santa
Personally, I would choose computer science, just because it sounds better to the untrained (read: HR) ear.
Carefree highway, let me slip away on you.
Here at Georgia Tech the CMPE program is part of the school of Electrical Engineering, and deals more with the hardware side of computing, where the CS dapartment is it's own school which focuses more on the software side.
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.
No relation to Happy Monkey
CS does deal more with algorithms, OS design, compiler design and with a few classes in hardware. CE is generally harder then CS and is a mesh of CS classes with EE classes. So you get an idea of how a computer works and a better idea how to build complex circuits. Generally a company wants a CS major OR they want a CE major, they aren't mixed and matched unless the hirer is an idiot. So basically just do what you like more, coding or screwing around with circuits.
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.
I find it interesting that the prospective student's gauge of how much he/she is interested in computers is that he/she reloads Slashdot every 5 minutes. That's great and all, but I don't think of that as much of an indicator. Slashdot is about much more than just computers... and especially about much more than just engineering and science specifics.
Computer Science covers the research and application of computers to solve and study problems in the real world.
Computer Engineering covers the research and design of computers.
A computer scientist is more likely to spend time programming. A computer engineer is going to spend time building computers. A wise company looking to fill a programming position would accept a CS, CE or EE major.
Education is a better safeguard of liberty than a standing army.
Edward Everett (1794 - 1865)
I think that it depends on whether you're an "applied" person or a "theory" person. Computer Engineering as I learned it focused more on taking core principles and applying them to known problems. Computer SCIENCE (I stress the word science) took core principles and used them to create more complex ones. For example, a Computer Engineer would take their knowledge of C and C++ and use it to create an embedded system. A Computer Scientist would take the C and C++ and figure out either how to make it better or to apply it to some highly theoretical problem. I think the key thing to understand is that computer scientists ARE NOT programmers. They are theoreticians. If you like the math, go computer science. If you like taking basic knowledge and extending it to a real world problem, go the computer engineering route.
I'm a CS major at Northeastern. My roommate is a CE major at Northeastern. CS classes tend to be more programming oriented, algorithms, software design, etc. CE classes are more hardware oriented, computer architechture, gate arrays, the physical junk. So, the real question is what would you rather do: poke some code to make it work better on the hardware (CS), or make the neat new hardware to make software writing easier (CE).
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
Non-meta-modded "Overrated" mods are killing Slashdot
(Hey Ryan! Here's your proof!)
Why not wait to decide until you get to school, take a class or two in each of the departments, talk to the profs, undergrads, and (possibly) gradstudents, and find out which one tickles your fancy the most when you have a much better idea of what it would be like? The first year or two of college is notorious for change-and-growth. Very often people graduate with a degree in a field they were barely considering as pre-frosh. If you haven't decided yet what college you will be attending, pick a school that has both departments. Often a well-rounded CS major will need an Engin class or two, anyway, and the same goes for CE. You'll be better off giving yourself a chance at both departments. That generalizes to "pick a school with PLENTY of good departments, in case you want to go even farther afield." HTH :)
Curran
(originally Biochem, now CS, thanks to the chemistry dept's intro-CS-course requirement :)
I was a computer science and engineering major at the University of Connecicut around the time that they decieded to create two separate degree programs as well (and have CS, CE, and CSE degrees all in the same department). The way that the difference between the two degrees was described to us was that CS deals more in theory, and CE more in design principles. This is primarily why CE tends to deal more with hardware, and CS with software. At least thats the way it was explained to us.
They are much like the distorted titles given to people in the computer industry.
i.e. Systems Analyst(old term) = Software Engineer/Network Engineer(new terms)
__________________ Hey Moderators!! Fuck Off! Thanks.
Take electrical engineering. Definitely a difficult route to take, and I am no where near dilligent enough to do it, but those guys make boatloads of moola! If you can finish an EE degree, you can basically have your pick of jobs.
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...
eat shit and die, Bambi!
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.
The differences between these majors are clear when you consider that one is from an engineering school and the other is from (usually) letters and science or other. I think in the end, you will be well served with either. As a graduate student, if you are interested in an academic career I would think about CS. As an undergraduate I would consider either. I have heard of C.E. programs focusing more on hardware and CS focus more on software, but in practice I don't think that is true.
These days, I would also consider branching into other fields, such as bioinformatics, theoretical chemistry or medical informatics. I think there is a lot of exciting work going on outside of CS or CE that is right in line with traditional CS/CE research.
-Moondog
When choosing a college or school to enter, look very closely at the curriculum that you are required to take in order to graduate. Most CS and Comp. Eng. curriculums do require programming, but the languages that they teach is up to the administrators of the degree program. If you are choosing CS, select a program that mixes theory and application of those theories (such as Automata and Theory of Computation with a course in compiler design). Also network with various computer clubs located on the college campus, or in your community, as they can provide leads into getting jobs, or business opportunities with new products or services or existing products and services in new markets.
'fraid I've no grand advice other than to suggest you take the myth of a SW labout shortage into account.
Can be found here. Written by a professor at California PolyTech.
my boss says that all the comp sci classes were wastes of time, but i was planning on majoring in cs. he much prefers ce, as do some of the other high-up guys in this (small) company. however, i never went and am doing just fine.
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.
I just graduated with a computer engineering degree and I struggled with this decision for four years. Basically, my advice is this: Do whatever you think is going to make you the happiest. Computer engineers seem to get paid a bit more out of the gate, but most computer engineering places aren't as fun. The arugement that my professors used was to go into comptuer engineering and you can do computer science or computer engineering when you are done. I don't think that is the best arguement though. If you aren't going to be a computer engineer, you really don't need to know all that stuff. Also, you do learn a lot of computer science on the way to a computer engineering degree, but in my opinion, its not enough. Go with what you love.
--------------------------------------
--------------------------------------
in a world without bounderies or fences, who needs Gates anyway?
I would recommend that you get a degree in something like electrical engineering and minor in computer science. The EE degree is just a broader version of the computer engineering degree and will allow you more leway in a job after school, and companies will want you evven more if you have a double major or minor in CompSci because then they will think that you know how to use computers. Good luck to you in whatever you choose. But for me I will be happy with my Chemical Engineering degree and MBA
What good is a used up world, and how could it be worth having? --Sting
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?"
www.HearMySoulSpeak.com
Some could say Comp. Eng. is more market driven and Comp. Sci. is more research driven, but at undergraduate level they're really the same. It's almost impossible for an undergrad to participate in research -- they just get taught how to build software and understand methodologies.
I take an Atrificial Intelligence degree, which is definitely science... but software engineering and derivatives could definitel be classed as engineering.
Sounds like ag reat way to end up at school for 5 years...
well, you probably will be in school for five years if you get a CS or CE degree. Unless you want to take summer school... bump that!
hilltop
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.
there are no stupid questions, but there are a lot of inquisitive idiots
I started out in Computer Engineering, but I didn't like the material covered: it seemed to have just a little too much low-level stuff for my taste. The Computer Science classes seem to have much more programming-oriented stuff like syntax and methodology, but the Computer Engineering classes seemed more problem-solving and design-analysis based. There's also Computer Information Systems which has a lot of the general computer concepts covered, plus several business classes.
When I changed majors I asked my employer what they thought about the difference in majors, and they said there wasn't enough difference between the curriculums for them to decide on a single one: they would accept either CS or CpE majors for any position. According to them, CpE majors seemed to be better at problem-solving tasks, but CS seemed better at implementing stuff. At any rate, it's a matter of preference.
Overall, I say start out with either a double-major or a minor in one, and work from there. Each has a lot of overlap with the other. If you decide to change majors later you'll know enough about the curriculum to know you made the right choice. If there's a demand in either field, there will probably be nearly the same demand in the other, so try both out and end up with whichever you like more.
I picked computer engineering. Pretty much, the main difference between computer engineering and computer science is this. Computer engineering is both computer science AND electrical engineering. The main reason I chose computer engineering over computer science is this, I'm in the College of Engineering which means I have access to all the fun engineering machines. I still learn a ton of programming, but I get a good amount of electronics and engineering on top of that. You get a more clear understanding of how the entire computer runs. In my mind, that makes the major a little more rounded out.
Of course, I'm happy with that. This is completely my opinion. Some people absolutely hate electronics though, so YMMV.
-Kef
I started out as a CE major, thinking I would like the EE part of it. As it turned out, I liked the first semester of EE and hated the rest of it. So, I switched to CS and have done well. The EE stuff probably wouldn't have been to bad, but it was both a) hard and b) uninteresting to me. Had it been only one of those (hard but interesting or easy but boring) I wouldn't have minded, but both at the same time was terrible. So, I would say that, if you really like deep math and such, CE is good, but if not, I would avoid it. I'm getting by perfectly fine with my CS knowledge thus far...
Posted from the wireless couch.
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.
I got my major in "Computer Science and Engineering". It is a single major at the University of California, Davis, at least. Not sure how many other universities offer this major, but I couldn't decide on which I wanted to do, so I did both. I chose it mostly because it didn't require as much high-level math as the Computer Science degree and didn't require as much high level EE stuff as the Computer Engineering degree. It was more well rounded.
But with that talent and a serious programmer's education, the same person can be a great programmer.... some things you just can't learn on your own.
IMHO, the choice depends on how much programming means to you. Do you want to spend the majority of your life programming - or is it just a hobby among others? If so, history may be a better choice...
I wish that my brain could do SMP...
Programming is, at worst, a "skilled labor" job. That means it requires training to be good. (Your carpentry comment just reveals you've never done any). History, on the other hand, is simple memorization or, at the most, some thought as well. You don't need a teacher to learn history, you just need a book.
By all means, you should go to a liberal arts college--knowing history is very very very important. But for gosh sakes don't MAJOR in it.
--
Non-meta-modded "Overrated" mods are killing Slashdot
Non-meta-modded "Overrated" mods are killing Slashdot
(Hey Ryan! Here's your proof!)
I am a computer eng guy doing software development, and the main differece is that when you take comp eng major, we had to take a lot of engineering base courese. Such as advnaced eng cal, and math, plus a lot of electrocal eng classes. But we also do a lot of programming, and software development. On the other hand, computer sci peopel do a lot more software development, such as graphics, AI, and DB.
But overall, I think I got more out of Computer Eng. due to all the other enginnering classes we had to take. Its really helping my current work with wireless, and network applications. Even at the higher level.
However, I belive that this is only a part of learning, most of real experice is from hacking around Linux, and from work. So, as long as you are willing to hack and learn, there is no differce...
weink dot net
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.
-- Sometimes you have to turn the lights off in order to see.
Choose based on your interests. Ask yourself this: do I want to build the cutting edge technology or do I want to use the cutting edge technology. If you are reloading slashdot every five minutes, I am thinking you would be happier with Computer Science. However, you have other options. I myself am a student in Management Information Systems. The programming methodologies we use in my MIS coursework are far superior to the methodologies I used in my CS coursework. In my experiences, the computer science classes tend to be almost all programming related and the ones that are not tend to be really abstract; whereas, my MIS classes have focused more on real situations (in other words programming for a concept versus programming for a reason).
...see you auntie
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
* And remember, it's spelled N-e-t-s-c-a-p-e, but it's pronounced "Mozilla."
First the Degree: CSE is much harder than CS. You end up taking a lot of math and physics. As a result your study of purely computer based things is less than CS. You generally take the same basic class's (algorithms/datastructures) but CS takes more in depth programming class's. CSE will teach you how a computer works, from the electrons up. CS will teach you all the funky cool things you can do with those computers.
The program diffrences vary from school to school. ASU for example had a CS department that was not clearly led, with no real sense of direction. Each student chose the electives they wanted and went with no real thought from the administration about how the program should be set up. CSE had several excellent teachers (Dr. Pheanis being in the forefront, if you are at ASU take CSE421 it will make you a programmer), and a well laid out plan that brought you through with a comprehensive set of knowledge. You should talk to students and professors and get an idea of how their program works.
I personally am glad I took CSE, the extra math and physics helped shaped my thinking. Plus I learned computers from the silicon up. At the time though I was jealous of my friends who were doing AI and Encryption codeing while I solved Differential Equations.
If you can force yourself to code take CSE, you'll learn a lot. If you don't code much take CS it will force you to learn to code.
Hope that helps.
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
----- rL
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.
Now for the killer. Based on all the exposure I've had to the industry, ~80% of software developers fit into none of the above categories. The vast majority of developers, however much they may shout and yell otherwise, are artisans, not engineers. They are to engineers as the cabinet-maker or blacksmith is to the guy who designs and supervises the construction of a bridge. They use rule-of-thumb, eschew systematic standards, and refuse to apply "real" engineering principles. This, btw, is one of the reasons why professional (certified) engineering groups really dislike the term "software engineer" - it ain't true, and it cheapens the certifications they have to spend years earning and testing for.
BTW-- Don't believe me? Go check out the design process requirements for, say, structural engineering, and then see if any "modern" software development group would be willing to apply that level of rigor.
I'm a Junior now at Northern Arizona University, where they offer a CSE degree. Recently they added a CE degree also, but I think I still prefer the CSE.
This CSE degree is doubly accredited by abet and the other accredidation board (can't remember the name). I am learning both hardware and software concepts and aspects through this degree program.
The only thing I wish was different is that our school offered a wider variety of upper level CS courses for us to choose from. If you ask me, a person who just loves to learn new things, CSE is the way to go. It gives you a great background to both fields, and you can always pursue further education in any field that you wish to refine.
Don't wait to declare unless you want to spend more than 4 years! They have it all planned out...
was just here a little while ago - an example of Computer Engineering. You decide.
(PS - you can get an AT90S8515 kit for about $70 here )
try { do() || do_not(); } catch (JediException err) { yoda(err); }
I just finished my BS in Electrical Engineering at Texas A&M. From talking with my friends and recruiters, CEs that focus on hardware have a wider variety of jobs to choose from. If you don't want to code 24/7 then look at going into CE and emphasizing on hardware. You will still end up coding in some form or another, but you will have the oportunity for more variety in your life. CEs and EEs are expected to know how to code and many companies hire them for that as well. My personal bias is twards hardware. You also will have a better base if you decide to change majors to another engineering discipline. You will already have the basic engineering classes and won't loose as many hours.
I find this a little funny because no one in my class is worried about getting a job, so I guess companies are desperate enough.
If you are really interested in just doing software I would suggest going into Computer Science. If you are interested at all in hardware, Computer Engineering might be good for you. At Waterloo we take both hardware and software courses, but most of the emphasis is on hardware unless you are taking the Software Engineering option (which I am not).
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've probably forgotten some).
On the hardware side, our core courses include circuit analysis, control systems, microelectronic devices, digital design, communications systems and microprocessor structure. 4th year electives are more advanced/detailed versions of the above includeing wireless, VLSI systems, computer architecture, wireless communication and more.
I guess it kind of boils down to decideing if you want to focus on software only or do you want a bit broader education that includes some hardware/circuit stuff. I like doing software, but hardware also interests me a lot and that is why I chose Computer Engineering over Computer Science.
-- themenace
It is easy to switch from computer engineering to computer science. It is not always as easy to go the other way around. Try computer engineering, and if you don't like it, you can switch to computer science.
-- Thrakkerzog
It depends on whether the school you go to is more practical application or more theory. Most good schools don't even have computer engineering.. its often cs or ee or eecs.
I had the same choice in front of me several years ago, and opted for the Computer Engineering Track. The reasons being more than just to work with hardware, the truth is that most engineering programs will require you to learn alot about the various aspect of Electrical Engineering (which CE is apart of). This is a good thing for a wide and veried tachnical footing has alowed me to jump from project to project looking for what I really want to do. Example being I have done cell phone design, computer programing, 10 Giga Bit asic design, Turbo Codes, and now I am designing an asic chip set to run 4 G4+ boards in a clustering enviroment including modifying the LinuxPPC to run on these boards. What Im trying to say it's easy for a Computer Engineer to jump into fields suh as programing, and designing algorithims, but a Computer Scientist cant just jump into the Computer Enginnering Fileds.
Well, what buzz word do you preffer? Science or Engineering? I find both the titles amusing in the context of computers:
:)
One is called Engineering, although you can not become a Professional Engineer in "Computer Engineering" AFAIK
The other is called Science, although I've never seen the scientific method outlined in any computer book.
I hope you get my point. Not like anything can be changed now.
I wish they would be called more appropriate names. I am not trying to knock them in any way - the education received is challenging and I respect anyone with such a degree. But it seems the fields are trying to get garnish some reputation by "piggy-backing" on established fields of education. Try Computer Programming or Computer Design. Those fit better to me
I highly recommend investing your time and effort into whoring yourself out, much the way that I do. You don't have to deal with the lonelyness of cold technology, or the bitter landfalls of power outages. Instead, I like to put out for whomever walks by: man, woman, or animal. I've even settled for mineral lifeforms, when they arrive on comets from Mars.
Long live the sluts and whores, for we shall inherit the earth, as well as many, many lovely diseases.
I'm a motherfucking whore! Watch me suck you off for FREE!
Computer Engineering is much more than hardware. I'm a Comp Eng who took the Software Engineering option (as opposed to the non-accredited CS software "engineering" option). I find that I'm able to assimiliate and use information much quicker than any comp sci I've ever run into. Given, out of school, CS students tend to have a broader programming background, and could whip me in Java or VB programming for the first couple months. But if I sit down and learn and use the languages, I'm running circles around them because I can evaluate what can be done instead of relying on procedures I've had driven into my head.
Simply put, Computer Engineering teaches you how to learn from practical experience in the real world. On top of that, there is a solid hardware background so that where a comp sci understands the programming, and possibly the programming theory, the comp eng understands just as much and then some. I find I walk into a group that is predominately comp scis and programmers and realize that they tend to have limitations that I don't perceive in myself and other engineers.
Wow, was that ever an arrogant ERTW rant... sorry. Comp Sci is a perfectly legitimate field, if you want to deal solely in software (not necessarily programming, but you don't go much deeper than the code level of any application). If you want a richer foundation, I'd suggest Comp Eng. The higher pay is nice too :).
- In hell, treason is the work of angels.
From what I've been able to discern, what I learned in school covered the same ground as most of CS, perhaps with less theory. We did cover Turing machines, FSMs, advanced data structures, AI, operating systems, architecture, etc. But we also covered the physics of semiconductors and lots of electrical, mechanical and electronic engineering and physics which isn't directly relevant to CS. As it turns out, I work in 3D graphics and games where all that physics did come in useful, but that's something of a fluke.
I did graduate ten years ago, so some of this has undoubtedly changed.
There are the differences which have already been mentioned, so I'll give you my $.02 worth of advice.
Check out the school and the classes required for both programs. There's a good chance there will be overlap, and after taking some intro programming and hardware classes you can probably make a more informed decision based on which you like more and what you're good at doing.
Don't forget to check out other departments as well. Having gone to a school with an CE in engineering and what they considered usual CS degree in business (NT and Novell stuff), I checked out the Math deptarment and found they had a degree with a conecntration in CS - logic, language formation, angorithm analisys, and a great UNIX lab.
Good luck with school whatever you decide to pick.
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.
--
Good quote, too many chars. Seriously, the slashdot 120 char limit sucks!
The two majors complimented each other very well - I left knowing alot more about the innards of a computer than most CS people do from their school courses. (it also can be more lucrative =) I could have just as easily gotten EE/CoE degrees and taken a more hardware approach and been a EE with some programming knowledge.
While your major doesn't have to do anything with what you end up doing after you graduate, the CS degree makes you more suited for a programming job while a CoE degree may give you more freedom to choose from hardware and software jobs even though you aren't as well specialized as a CS or EE...
"Corrupting our youth one mind at a time"
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 --
I am a Senior at CWRU, where Computer Engineering is, basically, a superset of Computer Science. As a CE, you take every software class a CS person does; but then you take the Engineering core instead of the Arts and Sciences core. The Engineering core is infinitely harder than the A&S core, and that fact leads to some elitism around campus b/w CE's and CS's (i.e. CE's think they are more 31337 than CS's).
One good thing about CE is the fact that you do take a lot of EE classes and the more advanced electromagnetic physics classes. And, while you may think that those have nothing to do with Software Dev., they actually do... a lot. Understanding what a computer does from top to bottom, from every 0 to every 1, for every 5 volt difference, and understanding what voltage is... well, you are a better programmer because of it. Note: I did not say you would be better than a CS programmer, but you personnally would be a better programmer than not having taken those classes. Oh yea, you also take the more advanced maths, which helps a great deal. There is a lot of math involved in programming. Well, not in VB programming; but in any real language while creating a real application. Any analysis or algorithm or testing or verifying is done via mathematics. So, math helps.
Just my $.02,
Jeremy
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.
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.
"This message is composed of 100% recycled electrons."
The link is Electrical Engineering at Texas A&M
First off let me state that if you decide to take computer engineering, be prepared to do engineering. Expect to be doing more physics, Chem, Math and whatnot than you can shake an AP course at. After that my understanding is that most colleges are simalar to drexel, where i go. ECE or computer engineering, is pretty much Electrical Engineering, with a focus on ICs, and computer systems. if you like to understand & owuld like to design the hardware that means ECE, where as OSs could be more a CS thing. However there is a whole lot of ever lap.
distrust any enterprise that requires new clothes!!!
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
. . .Learn the C Programming Language. Learn UNIX. NT/2000 is a somewhat useful skill, but Unix is more important. . .
Computer Engineering is more about the how's and why's of the guts and external interfaces of a computer system. How do architectural decisions effect performance and scaling for instance? How do different cache sizes and mechanisms effect performance for given applications? You'll spend time writing software and you'll spend time designing hardware and often you'll be doing both at the same time.
You can avoid university and still do well, some notable people have taken this route. Most become code monkeys however, they implement others work rather than architect the systems (software and/or hardware) that they work on.
I'm an electrical engineer with a lot of computer science courses, so I'm a bit of an outsider. I've seen the curriculum of my more (and less) succesful friends though, and the above is my take on the succesful programs.
Chris Kuivenhoven is a thief, beware
As a general rule of thumb, Computer Engineering (which I am a student of), deals mainly with hardware as you say. But another important aspect of engineering as a whole is problem solving.
An engineering degree teaches you how to think more than anything else. Now, it's true that as a comp-eng graduate, you can go do most things that a comp-sci major can, because you take many of the same classes. But it does not work the other way.
The engineering provides you the ability to 1) determine if a problem exists and 2) find the quickest, fastest, easiest, most efficient way to the solution.
Here's a classic example:
A computer science student is given the problem to write a sorting routine for 100 items. The comp-sci major will analyze each method to determine the optimum solution for ALL potential data sets, and therefore chose the solution that fits best in the long run.
A computer engineer just sees that they need to sort some short list, opens a book, and copies down the code for X sorting routine. They necessairly care that it's the most optimal thing, but it's one more step towards their goal of building a machine that will dominate the world.
... double major in Electrical Engineering/Computer Science. At my lowly tech school, the CompEng program was put together as a combination of the former two degrees.
In general, CompEng is viewed as hardware design, CompSci as software-related (programming, db management, etc.)
I went to Harvery Mudd College as a Physicist with Econ and CS concentrations. That I did not have a CS degree hurt me a bit in getting my entry level jobs, but the exposure to lots of computational physics, computational engineering, and just plain solid thought really helped. I learned how to break down problems into core difficulties and crank work, and to remember the important bits, without cluttering the mind with trivia. (My definition - trivia is what can be looked up without breaking workflow. Important knowledge changes how I approach a problem.) I ended up with an MS in applied mathematics and an MS in Industrial Engineering in later years, which did help, but which were the same kind of toolbox expansion that I got in CS classes. I would reccomend against being a liberal arts major, but I would take a fair number of liberal arts classes. They do broaden the mind, but it helps to have gotten practical salable skills as well. A good way to do the above is to get a solid programming class or two at a junior college before heading off to college, then trying to get programming jobs either at the school or elsewhere during your summers. Then, if you find you like computers, you will have solid job skills. If you discover that you hate it, then you will find out in time to pick another life direction while still in college. Scott
--- scott_ellsworth@alumni.hmc.edu Java, Databases, and Software Magic
I went through the same process about 10 years ago. I chose computer engineering. I feel that it is a better degree. Overall, however, you won't see any difference when finding a job: the degrees are pretty much the same.
Computer engineering has more of EE (electrical e) and more hard-core engineering (like statics and dynamics). Any you have a few less electives than you would with computer science (at least at my university).
Overall, I feel that CEs have a better foundation of how the software meshes with the hardware, which I think is important. That difference alone has helped me differenciate myself from the pack. I think that CE is harder than CS.
Keep in mind that YMMV (your mileage may vary), espacally depending on what school you go to.
HTH
room101 -- how much can you stand before they break you?
(they always break you eventually)
I'm a junior CS major. I chose CS rather than CE becuase I'd rather be doing software design rather than developing the next line of processors. Now don't get me wrong, you'll take courses in architecture with the logic gates and all that, just like I have, but the CS curriculum focuses mainly on programming and coding. Basically, just think about what you want to do carrer wise: Wanna write code or create the SoundBlaster Plutonium?
"... true power is taken." - J.R. Ewing
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?"
I was facing this very dilemma about a year ago, as I enrolled in the University of Michigan. Here are a few things to keep in mind:
First, most schools don't make you declare a major until your Junior year (this can come quickly, however, if you enter school with a lot of AP credit). This will give you some time to take a sample engineering course and a sample CS course.
Second: At my school, the CS program is located in the Liberal Arts College, while the CE program is in the Engineering College. This may not be true at your university, but it illustrates an important difference: here at UMich, 75% of the classes a CS major takes are in other fields: math, physical sciences, and humanities and english. On the other hand, 75% of the classes a CE major takes are Engineering courses: both electrical and computer engineering, and general engin. courses. A much smaller fraction of CE classes are outside the field.
This leads to a third point: it's not that CS is more software and CE is more hardware, but CS is more theory and CE is more practice. While you will take both theory and applied classes with either major, once in the workforce a CE major is more likely to be involved with building products for the real world, while CS majors focus on research. You need to think about which of these career paths is more appealing to you.
With the criteria above, I personally chose to go CS, as I wanted a broader education and wanted the opportunity to take a lot of non-CS classes. However, a lot of the info I have provided is specific to my university; your best bet is to check with the advisors at whatever school you enter. As I said before, they probably won't make you declare a major the day you enroll, so you'll have some time to meet with advisors, professors, and fellow students.
One final note: consider your school's prestiege in each field. For example, if your university seperates the two fields into two different colleges (as here at UMich), it is likely that the different schools will give different degrees (i.e. Bachelor of Engin. vs. Bachelor of Science). Look at college and career guides to see which of these schools is more highly ranked. Here at UMich (unfortunately for me) the Engineering School is a little more prestigious than the Liberal Arts School. This may also be a factor in your decision.
Hope I could help you out.
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!
Only 'flamers' flame!
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
"O frabjous day! Callooh! Callay!" She chortled in her joy.
Become an Electrical Engineer My experience with Computer Engineering was that it was exactly Electrical Engineering, with several Computer Science classes added. A Computer Engineering degree will also allow you to get your PE (Professional Engineering) License. You can learn computer programming anywhere, and employers look at experience a lot more than what your college degree was in for most computer positions. This is why I am saying become an Electrical Engineer, it will give you more options than a computer degree, with the same starting salary range. ThePoorYak - of course, what do I know, I'm just a poor yak
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. 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. 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 their CS and CE accreditation so in the future there probably will not be any difference.
The U. Michigan has a good FAQ 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
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.
Just keep it simple.
I am a Sophmore (First year student with credits of a Soph) at the Colorado School of Mines, which it happens does not have a Computer Engineering major. So, I decided to go with an Electrical Eng. and Computer Science Dual Major. My goal has always been a Computer Engineering degree, which I plan to persue as a grad student. So I'll walk out of college with 2 B.S.'s (EE and CS) and a Masters in CE..... It'll just be impossible to find a job : p
But anywho, I think you really need to look at what you want to do... Many colleges look at Com Sci as programming only, and if you want to do that, there's your major. However if you want to actually build and design Com Eng (which is much akin to Elec Eng) is your best bet. If you don't know I would really say go for a CE, you'll be much more marketable, as you can do more than just program, and you will pick up programming on the way. But hey that's just me.
"Madness and Genius are separated solely by Degrees of Success." -Unknown
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
-- AgthorrThe way I see it, it all depends on personal preference. I started school as a computer engineering major, mainly because it had the engineering instead of science on the end of it, and besides, the first year of CS and CPE were virtually the same.
The deciding factor occurred when I had to take a class on digital devices and logic design. I enjoyed a good deal of this course, but I hated working on a breadboard. I kind of figured that this was a signe that I was not too keen on the electronic aspect of everything, but I enjoyed the algortighm analysis, algorithm design, etc. of CS.
For me, it turned into which I liked working with most, breadboards or keyboards. Granted with CPE you can do just about everything a CS can do, but call me a wimp, I don't like NAND gates.
Tired of sitting at that karma cap? Start a flame war today! See just how low you can go!
It doesn't matter what your undergrad degree is in. Pick something that you're interested in. If you can code or admin, you'll get a job out of college, no problem. In fact, I probably would pick something OTHER than computers so A. You don't get burned out and B. so that you can be a better rounded person that can speak in something other than computer geek speak.
I went through the same dilema. I am currently a CS major in a school of engineering. Which means that I will take all the core engineering courses and have an engineering background in computer science. To a company, this looks better than a "arts and science" CS degree. My school also offers computer engineering. They have a chart of courses that overlap between Comp Eng, Electrical Eng, and Comp Sci. as far as courses go, Comp Eng is basically a cross between CS and EE. The professor in a Comp Eng course I took described what a Comp Eng does: "He constructs and communicates with intelligent machines".
You will find CS to be a lot more programming theory and high level language stuff. Analyze yourself, what do you like to do? One of the best things you can do is find someone in the field! Ask them what they do. Find an EE, a Comp Eng, and a Comp scientist, compare/contrast what they do. Try and get a job doing something in the field. My first job was just entering junk into a database. While there, I learned how to design them and now I get paid more than all my friends.
There were three options at my school... Computer Science (through the liberal arts school), Computer Science (through the engineering school) and Computer Engineering. The difference between the options is pretty clear; The liberal arts school offered more background in the arts as well as socal issues, and it had fewer science and math requirements. Computer science through the engineering school allows for one to gain a broad understanding of the other engineering disciplines, and does not require you to take a foreign language (Not language as in lisp, language as in Ancient Greek). The computer science curriculum through the liberal arts school tends to be easy; the most difficult classes will be in your major. The engineering route puts you in engineering classes that sometimes require knowledge of advanced math and sciences. Interesting stuff for most people also interested in computer science.
And then there is the computer engineering curriculum. Sign up for this one if you want to design chips.
Do what I did. Get a Masters Degree in Molecular Biology and then go get a Masters in Comp Sci. You'll have your head packed with k3wl stuff to ponder while your a sys admin and then when Bioinformation FINALLY goes market it might pay off.
CE = 2 years of fundamental engineering background + 2 years of more specialized stuff
CS = liberal arts education + CS classes in between
at least in my school...
If you really want to know what the difference between the majors are,read IEEE journals vs. ACM journals. You'll see the difference. As far as getting a real job, that's a different story (don't CE people get paid more (on average, of course)?)
A software enginneer is what you know as a programmer- not just convering coding, coding, coding but covering algorithm design and general system design issues.
These are just two branches of Computer Science, which is in itself IMO a branch of Mathematics. Other branches are AI, Cybernetics, Human-Computer Interaction, Industrial Simulation.
If you're only just going into college, let's face it you probably don't know what you want to do when you've finished (if you do, I guarantee you will have changed your mind by the end ;-)
There are very few employers who will be looking for a specialist in a small field at college graduate level- most want someone with a good all round education that they can turn into a specialist in THEM, this is how so many phyicists, mathematicians, etc get into the industry. You don't stop learning after college, college just proves you can learn to a certain standard.
Obviously a comp.sci. background is useful for any area of comp.sci. whereas if you study a smaller subject you may find yourself at a disadvantage if you go for jobs outside of that smaller subject, my advice to you is to take comp.sci., and do minors in something cool and arts or humanities based, that interests you, but is not computer related (try to find something ;-) employers like to see more than one dimension to a prospect and it will pay big style both in your own prospects- but for yourself to
J-aims
--
Yo, whatever happened to peas? Join T( H)GS
I was a CompE major, and I'm writing software. As a CompE at my school (University of Illinois at Urbana-Champaign) I took courses that spanned from very EE to very CS - Circuits, E&M, Analog Circuits, DSP, Data Structures, and OS - as well as CompE courses like architecture and digital design. Granted I didn't get ALL the theory behind the CS topics, I came out with a broad base of knowledge. In short, I think taking the CompE route will help you gain a deeper knowledge of what your software is doing with the transistors below it. This hopefully makes you a better programmer.
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.
It's a small world and it smells funny; I'd buy another if it wasn't for the money; Take back what I paid (SoM)
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.
Try this: Information Sciences and Technology at Penn State University. It is what I am enrolled in and have found it to be very fulfilling.
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
Systems Design Engineering at University of Waterloo
As for networking or becoming a sysadmin, that's an entirely different major group altogether.
"Ancillary does not mean you get to rule the world." --U.S. Circuit Judge Harry Edwards, speaking to the FCC's lawyer
Essentially, you have more options open to you than what you think..
.edu and use all its bandwidth for my servers, how to do a kegstand without puking) and then quit school to run an ISP with my friend. After the ISP lost its funding, I moved to Silicon Valley and became a developer for Netscape... all with no college degree. Instead of *spending* money on a less-than-useful college education, I'm *making* money that I can use to gain more certifications and knowledge that pertain directly to my job. Additionally, I'm learning new things every day (as anyone in the IT field will tell you, they *all* learn new things every day).
First off, no matter what people tell you, a degree is essentially useless in the IT industry. The only thing that matters is your experience, knowledge of the position you are applying for, and ability to live on the cutting edge (bleeding edge is preferred) of the technology of the day.
Companies who are searching to hire individuals to fill their positions are searching for EXPERIENCE. If you have no experience, you will not get the job, regardless of the fact that you have a BA, MA, PhD, or are a BMF besides (thank you, Cheech & Chong).
What I did was to attend enough college to learn the skills I need in the real world (basic software engineering, how to screw the
The choice is yours.
He who walks on burning coals is sure to get burned. -- Sinbad
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.
----
Celebrate the finer things in life
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
Non-meta-modded "Overrated" mods are killing Slashdot
(Hey Ryan! Here's your proof!)
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.
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.
--
python -c "x='python -c %sx=%s; print x%%(chr(34),repr(x),chr(34))%s'; print x%(chr(34),repr(x),chr(34))"
OKay, first of all, if you dont like playing with wires, hardware, tweaking stuff (hardware), and configuring your own stuff etc etc Then you should NOT be a CPE major. If you like to write software or configure your OS then you should be a CS major. Being a CPE major, i hope that someday i would be programming the next generation chips someday.. And my friend, being a CS major will be writing programs for my chips!
As a computer engineer you'll be required to understand basic engineering/science principles including design, econimics, physics, chemistry, and mathematics. The college of LAS is more relaxed. The only real requirement is to understand how to program and have sufficient credits.
That being said, I wouldn't say that a CE is necessarily better than a CS just because more fundamentals are required. A CS could take all the mathematics and design courses taught to CE's, but there is no requirement to do so. It's more of a matter that hiring a CE you're assuming a minimum level of ability which is greater than the minimum level required for CS.
Of course a good hiring manager would look beyond the title on the degree and hire based upon the individual's experiance and abilities...
If your gonna be a geek, pick literature or history as your major, then you can be a well-read geek. Geek-dom comes from within, not the classroom. Wanna learn C/C++/Java/Perl?? buy a book, and spend your classroom time learning how to think.
'Sometimes I think about killing myself, no, wait, that's you.' -- Jack Handy
Take your core classes first, especially math. You can take classes that fall into both majors. You can always switch.
I know a lot of Computer Engineers that took a lot of Software classes & that took a lot of Hardware classes. Depends on what you like. Computer Engineers usually focus more on embedded systems and hardware/software. Computer Engineers can do software, I'm an Electrical Engineer and do software development for a living.
If you want to do software go for CS.
Now the twist to all of this, I know more people that WERE engineering students, and graduated with a NONtechnical degress. The drop out rate is huge.
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
I did my undergraduate degree in comp eng, my master's in comp sci, and now I'm doing a PhD in comp sci.
The differences? At most schools, the admissions requirements are much higher for comp eng. There is a much stronger focus on applied math, digital design and signal processing in comp eng, whereas comp sci focuses on software engineering and theoretical comp sci (ie, Turing machines,etc). In either degree you'll learn how to program. Again, the kinds of programming skills you pick up are different-- I'm a great systems and OS programmer but ask me to implement quicksort and I'll say "It's already in libc!"
So why did I switch programs? The short answer is that the supervisor I wanted to work with is in CS. I'd be doing the same research (robotics and computer vision), irregardless of what grad program I'm registered in. It probably means I'll have to be a CS prof rather than and Eng prof, if and when I graduate..
If you've got the marks, go for the comp eng program-- it's more rigorous and demanding and you'll learn more useful stuff.
So long, and thanks for all the Phish
My school created a Computer Engineering program using money from a Defense Department grant. The DOD funded and oversaw cirriculum development in the early 80s out of concern at the rising costs of personnel to do the grunt Ada programming and basic digital logic design. The classwork ended up being a watered-down combination of EE and CS -- enough circut design to do digial logic and sufficient programming to get by at a DOD contractor shop, but nothing in depth on either side of the hardware/software divide.
I graduated 10 years ago so things may have changed a bit.
You'd be surprised how many people in the workforce today got all the way through college as a microbiologist, or philosophy major, and only turned to computers later in life. Some of the best consultants I've worked with had no computer courses whatsoever during college. And yes, many of the people I've worked with didn't even graduate.
So think long; think hard; and then choose whatever major you like. You'll change in two semesters anyway.
Well, the truth is the distinction is not very clear. CS is supposed to look at a more theoretical part of the field (theory, graphics, algorithms, AI, etc) while CEng is supposed to look at more practical topics (compilers, databases, operating systems, cpu designs). The bottom line is that whichever you do, there is a significant cross over.
If you are a CEng student and an employer is only looking for CS students, then they either have a very good reason (unlikely, unless you're going to a 'think tank' environment) or they don't really know what they want. Most employers will look at both CS and CEng students.
At my undergrad institution, there were many professors who were in one deparament and affiliated with the other (CS and CEng). In my new school, we don't even have a real CEng departament. There is a Systems group in CS departament (which is where I am).
Good luck with your applications.
m
Computer scientists, world holding capacity, thousands at most.
Computer engineers, world holding capacity, nearly unlimited.
A scientist does research, no production... no immediate profit.
An engineer does work for the scientist (probably a ratio of 10 Eng. to support 1 Sci.
Plus the engineer gets the glory of making the Fuped product work in the the field, and adapting it to a changing world. Ratio probably 3000 Eng. to 1 Sci.
The first rule of life is survival (making a living). Cars are repaired every day, they are only designed from scratch when the world can't make them the old way any longer.
I don't know how you get your conception of Sci. = Software and Eng. = Hardware....
There are both Sci. and Eng. in both, there has to be because Scientists can't produce anything without Engineers.
CS = logic/computing theory CE = applied cs
If you want to eventually get a job as a programmer, IMHO it really doesn't matter which of those two paths you take. I'm a computer engineer by degree (well, at least in a year I will be), but I'm working as a software developer right now right alongside all the CS majors. You should consider which of the two you would rather study. If you like hardware, then CE is rather nice since the cirriculum (in my experience anyway) is split about 50/50.
And while traditionally CE's, as Yhcrana put it "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", as a CE you get all the programming skills you need to hack through code along with everyone else.
So, just look at the curriculums and try to figure out which you would enjoy more. It's not like you can't switch later anyway.
Computer science is offered at most of the elite "liberal arts" colleges. The liberal arts should teach you to love learning and problem-solving, which are essential to what you'll be doing in this industry. In ten years of working I've encountered plenty of self-taught folks with such educational backgrounds. But don't hamstring yourself by not taking the core CS stuff -- at least take data structures and algorithms, and see how it goes from there. I wish I had taken more of those classes, and sooner than I did.
--
Oh, yeah, it's not easy to pad these out to 120 characters.
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 hope you're not pretending to be evil while secretly being good. That would be dishonest.
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.
http://kered.org
.... do both. Either at the same time over or alternate semesters or do one after completing the first.
Not that I should speak because I was a college dropout.....
--
Wicked Logic
'if it ain't wicked I didn't make it.'
First of, I graduated with a BS in CS 2 years ago. I'm adding my opinion because my thoughts are different since I applied all the knowledge I learned. Plus, YMMV.
The main difference, that I could tell, was that CS was software. Lots of it. Functional programming(LISP), Procedural Programming (C,PASCAL), Object Oriental Programming(C++,SmallTalk), and Logical Programming (Prolog).
So what does that mean, you might ask. IF you paid attention, you should be able to pick up ANY language, and its subtleties very quickly. You've learned all the fundamentals, with languages in mind.
You also learn lots of theory. I didn't know a single person who didn't complain about the theory. Boring !@#%. But, after having working in the real world, its VERY useful. Too many people program don't have a clue, and there code works on test cases, but dogs in real environments.
You also might learn about design. Depends on the school I think. Design is KEY to a maintainable and scalable system. I've coded more than I would like, where C code is slapped together to make a program. If you weren't the original author, you better be wary of any big changes.
I also had only 2 hardware classes. Just enough to understand the implications of my programming for the chips, etc. If I had to make devices, I would be MUCH less qualified than a CompE.
As far as Math, it varies. At GaTech, CS was almost a discrete math minor. 3 years of Math, or more, I think. But CompE's had more calculus, FFT's, etc.
The average CompE isdefinately more qualified for Hardware then a CS. But there are specialties.
I'd like to say that CS majors are more qualified to code, but that's ridiculous. First of all, I've known a lot of extremely bright and qualified CompE's. Anyone can code. Ok not anyone. But there is a huge difference between coding and designing and authoring maintainable code. There is definately and art to it.
If you want the best of both worlds. Double major in CS and CompE, or even CS and EE.
As someone who started out in computer engineering and switched to computer science, I would have to say they're pretty evenly matched when it comes to curriculum (this, of course, is relative by school). I switched because I found I enjoyed the programming aspect much more than the hardware.
Placed in the same situation, I would still go to engineering first. With all of the required core engineering classes that I took my freshman year, I know it was much easier to switch the way I did, but I've seen people add years to their education trying to do it vice-versa.
what's the use of college when you've got /.? :-)
Humorless sig goes here.
Odds say that no matter what you plan, you will probably change majors six or seven times. Declaring a major in your freshman year is usually a waste of your time. Use your first year for General Education credits, hang out with CS & CE guys, and see where it leads. The MCT I know with all the development experience, the one that makes the most money, he was a history major who like to program for fun. Good Luck!
"If I were important, I would have a sig file..."
I'm currently a college freshman, majoring in CS, but I'm pretty sure that I'm going to tack on a CE minor, just to know some of the underlying things that I can use so much as a programmer. At my college (WPI[.edu]), anyway, CS seems to focus on a lot of theoretical background to programming; things like algorithm design, backed by LOTS! of math, and quite a bit of focus on interface design. CE, on the other hand, seems to be focused on underlying hardware, from designing hardware (logic gates and up) to writing low-level machine language to run on embedded systems. I have a friend who's a CE major, who gave me a good description a year ago: CS majors write the software, CE majors design the hardware, and EE majors build the hardware. There's crossover, of course, but that's actually a pretty good summation. --Yostinso
--Yostinso--
When I started college five years ago, I had the same question and my solution was: why not do both? (perhaps that means I'm better suited for management ). I recently graduation with a BS in CS and a BS in CE and looking back I almost regret getting the CE major. Perhaps that's just because I was a programmer at heart before I started and I found all the CE-core classes painful and almost to the point where I considered dropping the CE major my junior year, but at that point I figured I had gone this far, might as well finish. In the end, all it (the CE major) did was lower my GPA.
:).
I believe that any CS student could do the work of a Computer Engineer with maybe minor training in the specific industry. In fact, my CE capstone project was really just an applied CS project but using a different processor (whop-de-doo).
Things I learned from my CE cirriculum:
- Circuit Analysis and Design (boring and trivial, IMHO)
- Computer Architecture (common sense)
- Embedded Systems (applied CS)
- Digital Logic (repeat from the CS course Discrete Math)
Things I learned from my CS cirriculum:
- Algorithms and Data structures (useful when doing any sort of programming)
- Algorithm Analysis
- Advanced Problem Solving (useful for anything)
- System Level programming and OS Design
In my opinion, a CS background will give you more fundamental skills and knowledge that can take you farther than a CE background and can be used in more places than just programming or theoretical studies.
But like everyone else has said, if you like doing the list of thing listed under the CE stuff, then go CE, if you like the CS stuff, go CS, and if you're not sure, stay undeclared until you take a course or two in both of them to see what you like more and if you like both, do a dual major. If you do a dual major it's possible that you can get a job doing both CS work and CE work. Right now I'm programming for a company that writes software that computer engineers use to design systems so it helps that I know what a transistor and a FETT and digital modulation sources and stuff like that are.
Good luck to you, I hope this helps you figure out what you want
Things you think are in the Constitution, but are not.
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.
--
--
RumorsDaily
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).
-Michael
dont forget to read up on CS vs CIS:
s html
http://slashdot.org/askslashdot/00/12/27/1634227.
I personally dont want to be a programmer for life, which ruled out CS (in my mind). Also, I love hardware in addition to software.
I considered EE but felt there was not enough computer information in the major.
That left me with CE, which is harder here at UB than either CS or EE; I take nearly every CS course and nearly every EE course and have a much busier schedule than CS and a slightly busier schedule than that of an EE major.
Check out their offerings at http//www.cis.ohio-state.edu
I chose the CSE track with a specialization in Information Systems which means that I have the science, engineering, and business backgrounds on my resume, and although this is a LOT of work to accomplish, the applications of that path are very rewarding.
Most of all, do whatever you want to do. At some point, you'll probably change your mind on what you like doing, so also try to make sure that your studies are broad-based enough to give you options to pursue if/when that day comes.
Rule #1 -- Politics always trumps technology.
Computer related employment is the industry with the fastest wage and employment growth and it's projected to stay that way until at least 2006.[1] In that industry, the fastest growing occupations include computer support specialists, systems analysts/administrators, database administrators, and desktop publishing specialists.[2] All of these occupations' entry- to mid-level positions typically require only an Associates degree, possibly with a couple years experience.
Benefits of two year degrees include more topical and relevent information that can be directly applied to the job, a quicker entry into the workforce, lower student loans, and an almost 100% guarantee of good paying, relevent employment after you graduate.
[1]http://stats.bls.gov/news.release/ecopro.t03
[2]http://stats.bls.gov/news.release/ecopro.t06
==========foo fighter==========
Do not mistake understanding for realization,
obviously no deficiencies vs. no obvious deficiencies
I actually had to make the same decision myself when I went off to college. The major difference is that computer science is strictly programming, usually in higher-level languages like Java, C, and C++. Computer engineering is a combination of computer science with electrical engineering, so you deal with the hardware as well. If knowing this isn't enough to make up your mind, then consider they type of work you would like to be doing when you graduate. With a degree in computer science, you will most likely end up programming applications, administering databases, or other similar jobs. With a computer engineering degree, the focus is more on the integration of lower-level software and the hardware it runs on. This includes anything from designing circuits, VLSI design (designing chips), microcode for firmware, and device drivers. Personally, I couldn't decide between hardware and software so I chose computer engineering - it really leaves your options open if you decide to pick one or the other later on. Now I manage servers and networks and develop web and database applications, so you can see I still haven't made up my mind! Good luck to you...
Computer engineering deals mostly with hardware and computer science deals mostly with software. If that isn't clear enough for you then maybe you should consider another major.
being a senior in CS and a COOP with a mostly EE/CE company, the job you get doesn't really hinge as much on what your degree is in as much as who you know and what you can do. i am interested in algorithm analysis and applied discrete math and such, but the EE's at my company couldn't care less about such things!
at my company, we build embedded networking appliances, which entails designing the hardware and writing the embedded software to drive it. they used to have 5 EE/CE's to about 1 CS person. the EE/CE's would build prototypes and play with low-level bit flipping and they'd have the CS guy write all of the software. nowadays, however, those CS people have gotten better jobs elsewhere and have not been replaced, and we have a lot of EE's writing ugly code for their own devices!
the divide between CE/CS is especially evident in my situation, because some areas/projects here suffer for lack of good CS people. both are quite obviously needed for my company to turn out a quality product line. it all depends on what you like to do!
Computer engineering is like Electrical Engineering with a few Computer science classes mixed in.
I've been asked this question a lot by prospective and new students at the University of Alberta. Over the course of a few years, I've refined the answer down to roughly this: "It's the same thing as the difference between Scientists and Engineers." Science is about discovery while engineering is about application. However, in Canada there is a lot more to it as well. Engineering is a profession and is governed differently than the associated science. In fact, a CompE Engineer in Training does not receive experience towards his/her Professional Engineering status by just coding. Experience comes from the design of systems rather than the implemenation.
If you are looking for advice on to what to go into, pick up a bunch of calendars from a bunch of schools. Find a program that interests you, and don't be afraid to change your mind along the way. Try not to let yourself get pushed into a program with few or no optional courses. One of the best things I did during my university degree was take a few arts electives.
After completing a CE and having worked in the industry for about 2 years..
My CE involved a lot more math than CS. I had a friend go through CS and he had a lot more programming courses, and general science. I had more engineering classes, less general science. I had more math (calculus flavor) than he did. Expect almost every engineering class to include lots of math. CS courses are likely to be more programming.
My friend been working as a programmer/analyst for the last year and a half. I've had a bit more variety - I've been in IT, worked on the control and automation side of engineering (PLCs, HMI and the like) and now for the last year been doing software development (code monkey).
It seems like CE opened more doors for me (on both the engineering side of the industry and the software side of the industry). I'm also able to go out and solve problems that involve control systems, software and hardware - I have a little bit of everything. If you like dabling in different things CE is a good choice.
On the down side, I feel I am not as effective a computer programmer or software engineer compared to a CS. This can be fixed with self-teaching, or practical courses from technical institutions.
Money? About the same at the start for a CS or CE.
I've found after 2 years that I enjoy software far more than hardware integration / implementation. Its far more rewarding and satisfying to solve problems in software and write programs that DO something. I'm considering taking some practical courses to pad the experience side in software.
mike
At the school I went to (U of MN), there was both CompSci and CompE. But under each were different empasises. My degree was in CompE with an empasis in microprocessor design, yet lo and behold I'm doing software architecture. If you're interested in programming, I'd go into CompSci with an empasis in Software Engineering-- I find that what most programmers lack most is structure design (UML, ERD, etc). Almost anyone can code. Putting structure behind it and making it maintainable is what is important. However, if you are interested in embedded programming (cell phones, PDAs, game consoles, ATMs, etc), you'd want CompE, since you're more likely to have to deal with the native hardware and lower-level tasks such as I/O and interrupt handling. Most importantly, make sure you get an internship. I worked for Intel Customer Support for 6 months and I think I learned more there than in a year of class. I also worked 6 months in an IC design shop and learned that I didn't want to do hardware design! Especially analog :)
That sig should be "posteriorem tuum", not "posterioram tuam". Better still would be "pratum tuum", but I digress...
:wq
It may seem that companies want computer science majors more, but if you take the actual definitions for each major, a company usually desires a computer engineer.
A computer science major is supposed to have emphasised studies in theory. The general curiculum for a Computer Scientist is supposed to prepare them for continued education and research into the science of computers.
A computer engineering major is supposed to emphasis practical application of well tested theories and proofs. The general curiculum for a Computer Engineer is supposed to prepare them for the working world, by focusing on applying theory to real-world situations.
Both majors tend to be pretty much the same. And most universities don't really stick to the definitions I've mentioned above. Typically the two majors are almost the same, where CS has more advanced programming classes, and CE has more engineering courses.
I think that companies probably say they want computer science majors because that's what the people in HR who write up the requisition knows about. But if you're worried about what a company wants... either degree will do. When a recruiter sees a resume that sees "computer" in the name of the degree, they pretty much qualify it in the same category. The real test is whether or not you can answer the questions that are given to you in an interview, and how well you show an ability to understand the problem provided.
So, don't worry about it.
If you want to know which major to take, look at the classes offered and required in each. Decide which one you'll enjoy more. You should enjoy college a little, and not look at it solely as something to get you a job. Although that is a reward of having gone through it, there's a lot more to be got from going through college.
Cheers,
-Alex
Those people have *no* idea what's going on! :)
-- Give me ambiguity or give me something else!
Computer Scientist:Computer Engineer :: Biologist : Chemist
I'm not sure what you meant by this analogy, and I think I understand it backwards from you: CE focuses on constructing one specific, silicon-based architecture for computers, whereas CS focuses on the abstract rules that govern all possible physical architectures.
I remember a guy telling me that the CS hardware class I was taking in college was a waste of time because I was learning theories which "change from day to day as the rate of technology advances."
Of course, he's got it backwards: the specific implementations are what change from day to day. The theoretical rules that govern those implementations, the stuff I learned in that class, has not changed since the dawn of time.
I changed my major before starting my first day of class. I graduated from Rensselaer Polytechnic Institute in May 1998 with a BS in Computer and Systems Engineering and again in May 1999, but with a Masters of Engineering in the same major. At RPI, Elecrtical Engineering is basically analog electronics. Transistors, resistors, capacitors and inductors. Computer Science is programming-- C, C++, Java, it continues. Computer and Systems Engineering boils down to Electrical Engineering with a digital skew to it and a concentration in Computer Science (primarily transistors, boolean logic and a little C/C++ and assembler). I applied as Computer Science because I didn't know any better. Before school started, I had talked to actual students and knew I wanted to transfer from the School of Science to the School of Engineering, and CSYS I became. Check with the current students at your school-- your TAs or fraternity brothers/sorority sisters and ask for their opinions. Incidentally, I am now happily employed at a large company doing embedded SRAM design.
While going to school, I had the same question. This is my take in a nutshell: Figure out what it is you really like about computers, let that decide for you.
I started out as a Computer Engineer but changed to Computer Science after a semester because I found I had the most fun when programming. The electrical engineering portion of computer engineering was boring to me because I found that it was more fun to "tinker" with software immediately and see the effects. I got the same thrill of creating something whether it was software or hardware but I got to do it immediately with software -- I didn't have to wait until I was a junior or senior before I got to create something for real.
You should just figure out what is fun for you and chose it. There is a huge difference between creating software and creating hardware. Although either major gives you the chance to land the same job after school, it is getting through the long hours of homework and four (five? six?) years of undergrad that is the more challenging...
One last issue as well -- it depends on some of the other classes as well. If you have no problems taking some boring engineering sciences classes (Thermo, Dynamics, E+M) or any of the prereq. math classes (Differential Equations) then go for computer engineering, it is a tough major in both schools since it combines electrical engineering and computer science. I certainly notice the difference in the two majors when I hire young employees...
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.
Prehaps I'm a clueless, but what part of hardware vs software are you not clear on?
Perhaps if you don't know the difference, you should just pick one and not worry about it. You can allways change your major later, when you have learned what the majors are all about, and the difference between hardware and software.
If someone is passing you on the right, you are an asshole for driving in the wrong lane.
... in today's IT job market, nobody cares. Take this time to study whatever you really want to learn. Check out the curriculum and see which path looks more interesting, and don't worry about:
"It seems that many companies are looking for computer scientists, but would they be desperate enough to accept computer engineers?"
That's a perplexing statement, cuz frankly, they're desperate for anything (even MCSE's!)
* Please do not read my signature.
I'm still not exactly sure what Computer Engineering is. It's getting to the point that it's synonymous with Electrical Engineering.
:) Either way you are set.
At my school Computer Science and Computer Engineering are both controlled majors, meaning you need to take certain classes by a certain time and maintain a certain GPA to be accepted into them. A lot of people don't make that cut. They end up in Electrical Engineering. It seems to be very close to Computer Engineering, and there are a lot of classes they can take like C++ for Electrical Engineers.
So anybody who gets out of this University with any of those 3 degrees basically can all go after the same job. Which seems kind of crazy to me, but that's how they do it here.
Aside from all that, what everyone else has been saying about Engineering being more hardware, and Science being more theory and programming is about right. Although I'm sure you'll take classes that overlap. I've had several Digital design courses, and worked with VHDL and I am a Computer Science Major.
So the easiest way to answer this is, do you want to build IC's and expension cards, or do you want to hack on the Linux kernel
With Computer Engineering, you will probably wind up taking a lot of the core Comp Sci classes. At my school, Computer Engineering exposes you to the basics of hardware and circuits, as well as software and programming, but offers lots of electives in either software or hardware. I'm a Computer Engineering major who's focusing on software. So I'll probably wind up getting a software job. But I didn't know I wanted to focus on software until I had taken the hardware classes.
If you are sure you're not interested in hardware, go with Comp Sci. If you think you might be interested in hardware, or a mix of the two, do Computer Engineering.
See if you will get a chance to do field related coop's during the year and summer. Will really help when start thinking about what you will do after school. See what the offer in the way graduate programs. Hardware or software are large fields. A masters will help you pursue the fields that interest you.
By definition, a government has no conscience. Sometimes it has a policy, but nothing more. - Albert Camus
Don't do either. Both CS and Ceng are about implimentation, ie you turn other people's ideas into programs. If you're just starting out, go for the EE program, with a minor in CS. That way you get the signal processing and hardware background to make yourself move valuable. Look for real-time or embedded projects. Computer Vision, image segamantation, speech ...
:).
The processors these days are getting to the point that some pretty cool applications can be moved into the mass market. You'll need the math/science background to be able to design/architect the implimentation of these apps.
Also, FWIW, fill all your free electives with math courses. Say no to art 101
Chris
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.
Computer science degrees (compared to computer engineering degrees) are great for * entry level jobs * easy (if you can already program and can absorb bits of theoretical esoterica, it's a cakewalk) Computer engineering is good for * being a "professional engineer" (www.nspe.org) (although they are finally allowing different ways to get this title) * being an engineer (learning how to get the bridge built right THE FIRST TIME) I say all this as a comp. sci. guy. If I had to do it over again, I would have done electrical engineering or civil engineering. Remember, a degree is just a label that gives you a few perks for getting hired in more circumstances than currently available. The real question is, what circumstances would you most want to work in?
I don't know what your core interests are, but I chose Aerospace Engineering. The reason I mention this is people get into CompSci and CompEng just because they like computers and playing with them. If that your overriding interest then CompSci/Eng is fine for you. But if you are at all interested in playing with wider technology in general then you may want to look into one of the more traditional engineering disciplines -- making sure throughout your education that you get more than the required computer/electronics skills.
Although not for everyone, for me, Aerospace was great. It's very cross disciplinary major. I learned structures, electronics, aerodynamics, mechanics, thermodynamics, materials, computer programming, and I'm sure a few more areas that I'm forgetting right now.
After graduation, I got into aerospace systems simulations with several Aerospace defense companies and then a computer games programming company using its games for defense simulation.
I've worked everything from software simulations, hardware-in-the-loop simulations all in very computer intensive environments. But I've also gotten to go and see missile launches at flight test ranges, and play with Big-Robot-Arms (tm) with aerospace hardware mounted on them. It's been a lot of fun.
Lots of people have already pointed out the main differences. Another thing to be aware of is that what a various degree is, even in just Computer Science, varies a lot from school to school.
:-)
In my school (Oregon State), it was part of the College of Engineering. There wasn't a separate Computer Engineering degree. As a result, we had to take several hardware courses, with more as possible electives. The emphasis was definitely on software, however. There were a lot of computer-types in Electrical Engineering, which was very hardware heavy. There were classes required for both CS and EE in both hardware and software - it actually did work out that the EE teachers assumed a lot of background that the CS students didn't have, and we struggled to get a C - and the CS professors did the same thing right back at the EE students later, with the same results.
However, in many schools (particularly Liberal Arts schools), Computer Science is in the college of Arts and Sciences, NOT Engineering. You take a lot more math, and a lot more non-science courses, if you end up at one of these. You might not have to do any hardware at these schools.
And there are definitely different schools of thought for both of these. A big one is: Do they teach you theory and general principles, or do they teach you useful real skills? The former can be noticed by courses in Algorithms, Data Structures, and teachers that don't care what language you submit your assignments in. The latter has courses on System Administration, particular languages, and pays a lot of attention to current technology and trends. I attended a theoretical school - there are advantages to both! It is true that having a solid background in the science of programming makes it much easier to pick up new skills, but they also graduate a lot of smart people who don't know how to actually do anything on their first job.
Also, I'll reiterate what others have said - be true to yourself. Take a minor in a non-technical field, if you want to. Learn a foreign language - it'll never be this convenient again! Or, if you are the kind of person that likes to completely be immersed in one thing (like programming), do it! Get a part-time job on campus, and come out with some actual experience, which you won't regret.
Another thing I wish I'd considered when choosing schools - networking is a Real Thing. Most of my college friends ended up in a different geographical area than I did, which is too bad. Nearly every job I've been at has a couple of Universities that have a lot of alumni that have sucked each other in - particularly tech-heavy schools. Yes, the competition will be tougher, but if you can handle it, you will have very valuable people who will vouch for you to get you interviews, and as someone who is involved in hiring decisions, that counts for a lot. Get to know the other people in your major. Don't be the kid who sits in the last row and never sees any of those people outside of lectures. It's worth it.
-- Kate
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.
____________________
___
The ends are ape-chosen, only the means are man's. -- Aldous Huxley
In my experience as a chemical engineer, I find that engineers focus more on applications problems and scientists focus more on theoretical problems. There is a very close interplay between the two. It is said that engineers prefer to look things up (equations, solutions, etc) while scientists would rather derive things from the basics. This application to computer science would make me think that CSs would focus on new algorithms, programming languages, limits and design of new architectures for computers, whereas CEs will use these use current methods to solve some sort of application problem. I believe that in an engineer's work you will most likely be focused on some sort of product whether it is a hardware application or software. Whereas for scientists you may be more focused on software or theoretical work. Most of the CSs I know are doing programming or sysadmin type work. But that is at the BS level. Beyond the BSCS level, I know of people with PhDs from UW that are working on design of new chip technologies designing the architecture, compilers, and software support that make the chip work. I think in general that as a BS in any engineering field you can expect to be at the bottom of the barrel as far as design goes. You will more likely be doing the grunt work than doing the high level design. It is at the PhD level where companies are interested in your talents in designing their products. Not true in every case...just a generalization. Hope this helps.
Most courses have web sites (at most schools). It will often have homework, tests, notes, etc.
This may be a bit off topic, but it's an irresistable question: Who are the smartest individuals in the computer technology field as a whole?
I'm one of those mile-wide, foot-deep computer people. Like many, I have no choice but to learn a bit of every discipline to be effective at what I do. I'm a hybrid between a network engineer, administrator and programmer. Again, while I do a bit of everything, I'm only *really* good at a few things.
It seems to me that the common perception is that programmers are the smartest group in the computer technology field. In my experience with programming, I've learned that much of it is simple logic merged with absolutely grueling repetition. This is not to say there aren't brilliant, very creative programmers, because there are. But from my experience, I would say that programming has more to do with a personality type than it does with raw intelligence.
A good programmer needs to be methodical and precise, but s/he does not need to be a genius, or even of far above average intelligence. Anyone can learn to speak a language, but not everyone can be poets. I believe the same holds true for programmers. I've written perfectly stable, functional code, and hated every second of writing it. I could be a full-time programmer if I wanted too, but I simply dislike the activity.
A reason for this perception may be because people deal directly with software. People that play Quake will intimately experience the programming of Carmack. But for Quake to run as well as it does, it also takes chipset programmers, CPU designers, hardware engineers, etc. etc. etc. on down the line. Carmack gets (much deserved) credit for his creations, but no one ever gives a thought to the other people that are instrumental in the delivery of quality software. Programmers are like quarterbacks. They get too much credit for victories, and conversely, too much blame for failures.
Does anyone else sense the subtle, and sometimes not-so-subtle smugness of the average programer? Perhaps I simply am perceiving things incorrectly.
Why do users with IDs under 100,000 or over 700,000 usually have the most worthwhile comments?
Computer Science is not just programming, as some people are having us believe. Computer Scientists do some amazing things with hardware. I am a CS freshman right now, and I'm taking a class on logic design... gates/flip-flops/etc... at the end of the class, we will have built a real computer capable of doing such exciting tasks as adding and subtracting.
Anyway, the whole point of Computer Science is to give you an idea of how computers work. Sure, you learn how to program, but the purpose of it is to teach you how computers work. This is from the basic hardware of it, down to complex programming theory.
Computer engineering is more oriented towards using computers. It takes the approach, "look what all these computer scientists have done for us to make these wonderful machines. Now lets do things with them. Of course, a knowledge of what the computer does is necessary, but I think it is not the focus as it is with CS.
I couldn't make up my mind, so I decided to go with the double major. I was pushed in that direction somewhat by my university, who considered computer engineering to be engineering and computer science to be ... well... something not engineering.
I actually enjoyed some of the core engineering courses, because I like physics. But the hardcore EE stuff made my head hurt. Having that background does help. But the most important thing was that I learned that I like software. I stuck out the rest of the engineering program, and it's on my resume, but that was the end of it.
To tell you the truth, I learned more about programming on the job then I ever did in school. However, school does give you an important general understanding of the field, and pads your resume. To get a good programming job I'd say choose the major that has the best reputation at your school, or the one that interests you the most. I'd shy away from the pseudo-CompSci majors offered by some business schools. You'll get the most out of an Engineering, Math, CompSci or other hard science degree.
In defense of my major, I think CompE gave me a broader practical understanding of the inner workings of a computer than I would've had with a CompSci or Math degree. You play with UARTs, microprocessors, etc., on a chip level and use them to build devices. From a programming perspective, this can be helpful in understanding and debugging some performance problems and in dealing with low-level code such as device drivers.
Also, I've found that my degree's focus on hardware, really helps me understand the latest hardware specs from NVidia and Intel...
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
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.
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.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
It really depends on the school here at the University of Nebraska at Lincoln the CE department deals with the hardware side of the code, with a little brush with software. The CS deals with programing, theory, and the normal rigamarol (ie Spaish, Politics in the third worlds, etc.). And MIS makes you into a Microsoft junky where the "internet programming" is using a WYSIWYG editor to create a page and then ask the lab desk staff how to upload your web page using "some ftp program." But seriously it all depends on what your looking for, if you want to build things be CE if you want to make them do something be a CS and if you want to be a manager be a MIS. Of course thats just one school of MANY.
You're interested in computers. Then the first thing is to investigate that interest. Find out what "computers" means. Find out the breadth of what "computers" is and what is done with them; from designing chips and fabrication facilities to writing applications and developing specs to running systems and user support to teaching and everything in between. Then decide what "computers" means to you.
Spend your time in college investigating the areas that interest you and getting an education in how to solve problems well.
Learn "how to learn" rather then just what you are taught then any of the areas you are interested in are open to you. You'll know how to educate yourself in a completely different area.
If your interested in both areas, at least initally take a general class in both. Then maybe major in both, find a combined major or minor in both and major in something completely different.
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.
When VPNs are outlawed, only outlaws have VPNs.
The problem with majoring in computer science is that the field changes too quickly. CS classes often revolve around a language or two and then get into a lot of theory that is fairly inapplicable to the real world. Then when you have finished, the only thing you have learned is "computers". If on the other hand you major in something else you enjoy (music, foreign language, business, electrical engineering, etc. ) and use your CS knowledge to help you in that major, you will learn a great deal about how the normal business world uses computers for reason and purpose.
Rarely do good businesses do programming for programming's sake. There is always a reason and a purpose for doing it, and in the end it saves money as unbelievable as that may seem. If you want to do development without purpose, you may want to go into a research field or work at an e-commerce startup.
In the end, it comes down to what you want to do. Just remember that the computer is a tool used to accomplish a goal. Would you rather take a class on "construction" or a class on "hammers". If every last detail of the hammer interests you, go with CS, otherwise pick something else.
A choice of masters is not freedom
I am currently a CE major at Brown university. The way I can best describe it, at least here, is that I am basically doing the regular electrical engineering major, but also supplementing it with basic, as well as a few higher level cs courses.
This actually turns out to be quite a bit of coursework, and doesn't leave much time for many other classes. I would definately say it is worth it though, because I have interests in both areas. Also, if your thinking about CE...definately start with it. Its much easier to switch from CE to CS then the other way around, at least at Brown.
For the first year, its nice doing CE, because I get a taste of both hardcore engineering and hardcore cs. I can basically decide to go either way, depending on which I do better in and which I enjoy more. I would definately disagree with the common misperception that CS is software and CE is hardware...I think that while CS is mostly software, CE deals with both.
The main difference, however, is that CE is an engineering degree at Brown, and CS is obviously not. The engineering degree has a lot of general requirements which CS does not have. I imagine that is true for quite a few schools. Anyway, I suggest if your thinking about Computer Engineering, you should probably start in that department, get all the gen. ed. requirements out of the way, then decide whether you like the engineering part.
For reading /. every five minutes I find it strange that this ask slashdotter didn't know that this question is asked (and posted) at least twice a month.
But if you ask me, a college degree isn't worth too much in the computer/tech fields unless you're [1] working for a faceless omnicorp (i.e. Microsoft) or [2] you're going into R&D under a University license/grant. Of course if you don't know anything about computers then college or tech school is probably the way to go; if you know what you're doing then its really an unnecessary step.
"After three days without programming, life becomes meaningless." - Tao of Programming
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.
http://bbspot.com/News/2000/7/ellison_grad.html
Good Advice!
"Oh, Senator, you're so gullible!" - Buckaroo Banzaii
I had a lot of fun building microprocessor based systems - you get to do hardware AND software (usually firmware) I'll never forget designing floppy interfaces for a PDP-11 from scratch (the PDP-11 uses a 'unique' bus signalling setup), controlling robotic arms with 68Ks to write words with a pen, hacking togetehr stuff with 68HC11 demo boards from Motorola in our dorm, developing a tiny multi-tasking OS in assembler, working with Xilinx FPGAs, etc.
Another nice thing is at the time it was a 'new' major and not many folks selected it. IN an engineering class of close to a thousand, there were 42 CSYS majors so you developed a close group of peers and friends. Pretty cool.
So I have to say college would probably have been more boring FOR ME if I was stuck in front of a terminal for 4 years learning C, etc. But in teh end, the Comp Eng market isn't as broad as that for COmp Sci types. But if you play your cards right and build a good software background in your 'free' time, you have a great marketability as long as the recruiter understands what Comp Eng of Comp Sys means.
Only drawback - the acronym for our major (Computer Systems Engineering) was CSYS - so everyone called use sissies!
But I got the last laugh (well at first) - I took my CSYS B.S. and was making 6 figures by the time I was 30 workin gfor a telecom company - then I quit my job to start my own business and now I'm broke :) Live and learn!
--
Top Most Bizarre/Disturbing Error Messages
The CS major required math like statistics and number theory. The CE major required generic engineering courses like physics, chemistry, etc. The CE major, like other engineering majors, seemed to have more requirements, and therefore less chance to take off-track courses.
The upper division courses for CE contained more electrical theory, and more math (Fourier transforms, etc.). The upper division CS courses contained more CS theory and practice; compilers, graphics, AI, Turing Machines, etc. I really enjoyed some of the middle ground used by both majors, such as micro-code design, Shannon-Switching theory, Karnaugh diagrams, etc.
I think it really comes down to finding areas that you like, and taking courses in them. As someone who is in a hiring position now, I don't see much difference between the majors after a couple of years. The one exception is doing something tricky like real-time embedded systems. I tend to think that certain aspects of these projects benefit from the CE/EE background, which is harder to pick-up on the job. Of course, one my first jobs was working with real-time embedded systems, and there were a few CE courses that I wished I had taken.
Don't worry about it for now. Take both intro CS and CE along with a lot of math. With the math background you will be able to handle which ever you end up choosing.
bash-2.04$
bash-2.04$yes "Don't you hate dialup connections?"| write USERNAME
I tried doing this I don't know how many times. The course catalog was useless. The only accurate information was when it was held, everything else--topic, professor, location, applicable major--was variable.
However, your plan suggests an improvement. Find out the course load for both majors and then find students who've taken those classes and ask them what they actually did.
Better yet, just take those classes that are overlapped between the majors and decide later.
--
Non-meta-modded "Overrated" mods are killing Slashdot
Non-meta-modded "Overrated" mods are killing Slashdot
(Hey Ryan! Here's your proof!)
Another quick tip:
Go to spring preview sessions at the colleges you're interested in. Many schools hold these, and they're very helfpul. You can usually meet with some instructors and department heads in your preferred majors and discuss what you're actually going to learn, what the classes are like, etc. I found it very helpful for me.
-Gabe
Software Engineer: A person who talks about programming, but seem to never actually do any. A person who knows what the "Booch Method" is. Often hired by non-software companies to create impediments to software creation.
Programmer: An individual who knows how to make operating systems do stuff with arcase "programming languages". May or may not have a degree. Often "fell into" the profession from another field.
Web Developer: A person who knows HTML and some Javascript. May or may not know a wee bit of Perl or how to make an applet. Possibly knows VBscript. Almost never knows what an associative array/hash is or what it is good for.
Developer: A web developer who has been fired several times. Now knows what linked lists are. Can possibly do Java Servelet, COM objects, or use mod_perl or PHP.
Project Manager: That man/woman who keeps telling you what to work on next. Most likely has experience as a Developer or Programmer.
Senior Developer/Programmer: As above, but gets to go out to lunch with clients every now and then.
Systems Administrator/Network Eng.: Person who takes care of the network. May or may not have technical degree. Almost never around when really needed. Adept at explaining why firewalls are a good thing. Will either refuse to allow Linux/BSD systems on the network or will be trying to replace all systems with *NIXes.
Web Designer: Pains in the *ss. Often don't even know HTML. Really know his/her way around Photoshop/Gimp.
DBA: Makes "schemas". Often creates stored procedures. Knows what "Third Normal Form" is.
The only thing that we learn from history is that nobody learns anything from history.
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!
GPL Deconstructed
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...
I double-majored in Philosophy and CSc and am getting my MS in CSc in May. Definitely the liberal arts courses have shed light on the technical courses, and vice versa. It's also going to be very good for your upward-mobility in your professional career that you actually have the ability to write a clear paper or memo: many CS/CE people can't.
You might want to consider an EE degree over a CS. I have one and it served me well. I'm a Dir for a large telco. Its great if you like hardware. My specialty is networking:ATM, FR,WAN, LAN, VPN, IP-SEC, VoIP,etc. Employers are constantly in great demand for EEs, thats why there are two EEs in the word GEEK. Its a great profession, and you can still do the software programming route.
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.
Karma: Chameleon (Mostly affected by the 1980s)
I warn, that from my experience, this is a very erroneous opnion. First of all, I am currently studying Computer Engineering at the University of Waterloo - and there are many differences. The biggest is the amount of choice you have and how well you can tailor your studies to your desired direction. Because CE is a professional course, there are more stringent rules on the courses you can take. Not only do you have fewer slots where you are even allowed to make a choice, but they really restrict those choices to a few courses. In CS, students are allowed more freedom, and can graduate with an education that is more specifically tailored.
There are pros and cons to each - the CE degree gives you an engineering background, giving you many options careerwise - but if a job is looking for a very specific skill set, the CS grad might have been able to fit themselves into that niche better.
If you are unsure as to what you'd like to do, and if you don't mid giving up the choices, I'd chose CE because it will give you a wider knowledge base, and you will be given most of your schedule (which is much easier than trying to find a schedule that fits). If, however, you have a clear view of what kind of career you want, CS might be the better choice for you.
In terms of curiculum, CE has a wider base of courses - you have to take more physics, chem and technical breadth courses. This does, however, mean CE has fewer interest courses like cryptography and our programming courses are nowhere near as indepth. I know at least one student who switched from CE to CS because CE would not allow him to take the courses in which he was interested.
These two studies are very different - but this is just the opnion of 1 student. If anyone wants to ask any other CE students their opinion, you can post a message on my class's bulletin board - http://www.ComESutra.ORg/web/YaBB/YaBB.pl
"Lest you should question my sanity, I should add that I don't value sanity very highly." -- Jim Harrison
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".
----------
Never underestimate the bandwidth of a 747 filled with CD-ROMs.
My advice to you, find the school with the best curriculum, one that actually sparks your interest, and a campus that has liberal drinking rules (you'll know why after you try to wrap your mind around IEEE floating point binary numbers the first time)
Good Luck
Once upon a time, in a kingdom not far from here, a king summoned two of his advisors for a test. He showed them both a shiny metal box with two slots in the top, a control knob, and a lever. "What do you think this is?"
One advisor, an engineer, answered first. "It is a toaster, " he said. The king asked, "How would you design an embedded computer for it?"
The engineer replied, "Using a four-bit microcontroller, I would write a simple program that reads the darkness knob and quantizes its position to one of 16 shades of darkness, from snow white to coal black. The program would use that darkness level as an index to a 16-element table of initial timer values. Then it would turn on the heating elements and start the timer with the initial value selected from the table. At the end of the time delay, it would turn off the heat and pop up the toast. Come back next week, and I'll show you a working prototype."
The second advisor, a computer scientist, immediately recognized the danger of such short-sighted thinking. He said, "Toasters don't just turn bread into toast, they are also used to warm waffles. What you see before you is really a breakfast food cooker. As the subjects of you kingdom become more sophisticated, they will demand more capabilities. The will need a breakfast cooker that can also cook sausage, fry bacon, and make scrambled eggs. A toaster that only makes toast will soon be obsolete. If we don't look to the future, we will have to completely redesign the toaster in just a few years.
"With this in mind, we can formulate a more intelligent solution to the problem. First, create a class of breakfast foods. Specialize this class into subclasses: grains, pork, and poultry. The specialization process should be repeated with grains divided into toast, muffins, pancakes, and waffles; pork into sausage, links, and bacon; and poultry divided into scrambled eggs, hard-boiled eggs, poached eggs, fried eggs, and various omelet classes.
"The ham and cheese omelet class is worth special attention because it must inherit characteristics from the pork, dairy, and poultry classes. Thus, we see that the problem cannot be properly solved without multiple inheritance. At run time, the program must create the proper object and send a message to the object that says, 'Cook yourself.' The semantics of this message depend, of course, on the kind of object, so they have a different meaning to a piece of toast than to scrambled eggs.
"Reviewing the process so far, we see that the analysis phase has revealed that the primary requirement is to cook any kind of breakfast food. In the design phase, we have discovered some derived requirements. Specifically, we need an object-oriented language with multiple inheritance. Of course, users don't want the eggs to get cold while the bacon is frying, so concurrent processing is required, too.
"We must not forget the user interface. The lever that lowers the food lacks versatility, and the darkness knob is confusing. Users won't buy the product unless it has a user-friendly, graphical interface. When the breakfast cooker is plugged in, users should see a cowboy boot on the screen. Users click on it, and the message 'Booting UNIX v. 8.3' appears on the screen. (UNIX 8.3 should be out by the time the product gets to the market.) Users can pull down a menu and click on the foods they want to cook.
"Having made the wise decision of specifying the software first in the design phase, all that remains is to pick an adequate hardware platform for the implementation phase. An Intel 80386 with 8MB of memory, a 30MB hard disk, and a VGA monitor should be sufficient. If you select a multitasking, object oriented language that supports multiple inheritance and has a built-in GUI, writing the program will be a snap. (Imagine the difficulty we would have had if we had foolishly allowed a hardware-first design strategy to lock us into a four-bit microcontroller!). We should have a working prototype within the next 9 months to a year."
The king wisely had the computer scientist beheaded, and they all lived happily ever after.
It may not apply to the difference between CS and CE question, but the difference between a decent CS degree and someone who just programs (a topic that many others have raised) is that the CS person has learned enough to build tools, not just use them. You may use someone else's parser-generator, but you know enough to build a simple one if you want to. You may use someone else's thread coordination package, but you understand what semaphors are for in that context. You may use someone else's FIFO class, but you could write a passable one yourself.
Some people will be able to learn this stuff with just a textbook; many will do better if they have a structured curriculum that puts you through classes in a reasonable order and access to an instructor that can explain concepts in more than one way.
I am a senior this year at the Oregon Institute of Technology. I'm getting a B.S. in computer hardware and a. A.A in computer software (yes, software is an art here).
The difference I see is that the hardware side deals with programmable hardware. You write the code that controls an extremely fast dedicated piece of hardware that is special purpose.
In software you're dealing with general-purpose computers, operating systems, etc.
So, if you want to work with OS's then go software, if you want to work with closed, custom chips then go hardware. If you want to deal with capacitors and that sort go electronics engineer.
Kallahar
Now, I haven't mentioned Computer Engineering. Why? There is nothing wrong with Copmputer Engineering. There are two schools of thought in Computer Engineering. One school of thought is that you create a generic system (such as the Intel platform) and force the computer science and software engineers to create the compilers for the chipset. The other school of thought is a little old school but has applications today. The school maintains that the computer itself should have the application/program hardcoded into the chipset. This is great for embedded applications like robotic controllers or automotive applications. In this school of thought there is a lot of overlap between the colleges of Eletrical Engineering and Computer Engineering.
I imagine by now I have you totally wondering which one you will want to go into. Well, in the REAL WORLD it is safe to say you need Electrical Engineering, Computer Engineering, Computer Science, Software Engineering, and Computer Information Systems/Management Information Systems people in order to make a complete system. You also need analysts, configuration managers, system architects, software architects, business architects, system administrators, network engineers, and network administrators because the modern computer system in a business is inter-connected with so many different systems. In order to you to make an educated decision, I suggest an intership between your Freshman and Sophomore years in school. Keep in mind that each position is a part of a complete system, and you have to decide what part you like and focus on that.
Another way to look at it, is that each position can be described in terms of the of thier relationship to the User and the User Interface. Starting with the User and moving through the system all the way to the actual logic gates on the chips you have the following positions and thier best suited majors:
This is just what I have witnessed and I imagine there are other takes on it.
Devin.
When I went to school at the University of Michigan 15 years ago, the difference was this: computer science was purely software and theory, with upper-level courses being compiler construction, operating systems design, and computation theory. Computer engineering on the other hand emphasized hardware, in particular digital design, small computer design, and interfacing to external devices. As for your main question, make the choice based on what you like. I was already a pretty decent programmer when I applied to college, and I wanted to learn about how computers worked, so I went the engineering route. If you just like programming and don't ever want to build or design computers, then go the pure CS route. BTW, companies in the U.S. are currently hiring people regardless of degree if they have suitable experience/abilities in web programming.
Currently I am a Computer Engineering major at University of Minnesota - Twin Cities. What computer Engineering is here, is a mixture of Electrical Engineering and Computer Science. The basic coursework (meaning math, physics, gen eds.) are all the same. Computer Engineering's coursework is about 40% Computer Science and about 60% Electrical Engineering. So you still take programming classes and such, but have the "hardware" aspect with it.
Anyhow, anybody not wanting to sit in a desk all day and program, I would recomend getting a Computer Engineering Degree. Also, if you were thinking of EE at all, but want to do something with computers, go Computer Engineering. You still have a lot of the programming background, but also a lot of design/hardware background.
-----
GeekWares - Buy and Download Today!
Most students seem to follow a more business-oriented IS path. Through electives you could pursue a more computer science-y path.
The IS department had, IMHO, some better AI classes than the computer science department. The CS department AI course was basically just LISP programming, and which I was disappointed by.
The IS department had an AI survey class which covered A* search, neural nets, and other approaches. The IS department also had a Prolog-based natural language course.
The IS department also dealt with things like usability, UI, databases, telecom, etc. More application-oriented and more user-oriented, generally.
I got a Physics MS. Worked for me just fine.
Computer Engeneer
If you like to brake stuff:
Computer Science(braking what CE's build.
And that is the simple answer
I'm planning on doing comp. eng. at University of Kansas and a co-major in Japanese. will japanese even help much in computer engineering? will that give me a raise??
bye,
-jimbo
I am currently studying at the Department of Information Processing Science(TOL) in the Faculty of Science at University of Oulu for the 1st year, and i switched from the Department of Electrical Engineering(EE) in the Faculty of Technology from the degree program of information engineering. I had exactly the same problem within these two options, and i believe these are quite close of what you are facing. Anyway, I've studied in both of these departments for some time, and here's what i've come up with: The main difference between the above mentioned departments is that EE focuses on what is the theoretical basis for computers and other electronical devices. It also teaches how to code for DSP's for example. there's also some sw engineering courses. TOL, on the other hand, focuses on the high level software engineering(UML etc.) and the processes that are required to handle large projects. We also research hypermedia and it's applications. There's virtually no math, not a single course of physics. Because of the wide area of teaching in EE, there's a lot of math and physics, so the student has sufficient theoretical background information. The bottom line: EE is hardware-centric, ie. 'how can we do it?' and 'how does it work?', and TOL is more user-centric, like 'what can we do to make this actually useful?' and 'what could we do with this new stuff we just got?' and most important 'how can we make a good piece of software?'. Those who graduate from EE are most likely to end up working for the Evil Empire (Nokia R&D's a couple of hundred meters from the uni), but the actual field of work may vary from HW designer to SW engineer coding Windows software. TOL gratuate's field of work may vary from SW Engineer to different kind of Analysts to Project Managers and even Webmasters. I chose TOL, because as a coder i find it useful to be familiar with the whole software process. This is my 2 cents, and i live in Finland. The situation is probably very different in the US, but I hope this helps.
This is the place where you write something that will make you seem like a complete idiot.
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!
GPL Deconstructed
Anyway, My dream has been to design some sort of DSP within my life time, so I chose CE over EE for a few reasons:
CE was my choice, because not only do I want to design chips, but I also want to do some low-level coding. It's all a matter of preference
HTH,
~Marshall
-------------------
arcane for life
just a note. I went to college for one year. it was a liberal arts school with no computers except for a few macs for word processing. I dropped out. now I'm a web developer in the bay area doing java, perl, weblogic, etc.
:-)
if yr wondering what companies are looking for, they're looking for work experience. beyond that they won't give a flying fsck. you could get a major in bestiality if you wanted, all that actually matters is that once you do get a job, you do good work and learn useful skills.
I'd say don't sweat it at all. study whatever you feel like studying. don't waste time wondering what potential employers are looking for, bkz the fact of the matter is that, with the exception of the first job you get, yr education is not really gonna mean anything to anyone. unless you have a PhD in cryptography or something equally interesting and unusual.
which you'd basically only get by studying what interested you to begin with.
I asked myself the same question as I entered college. Should my major be Computer Science, Computer Engineering or Electrical Engineering? I was especially confused because at my particular University (Ohio University), there was a Bachelor of Computer Science in Engineering, and a Bachelor of Computer Science in Art & Science degrees with different college requirements for each. This further complicating the already overwhelming situation. Since I really was interested in hardware and software, I just wanted to be "in the know" about everything so to speak. So, I chose computer engineering because the degree was certified by ABET, and because I could take basically any EE or CS class I wanted too. This approach isn't for everyone though. I ended up with about 256 credit hours (OU is on the quarter system) when I was finished. Over 60 hours more than what was necessary. But, after I was done, the depth of my understanding about hardware and software and how they interact and work was much more developed than someone who *ONLY* studied hardware or someone else who *ONLY* studied software. My advice to an undergraduate is, learn and experience all that you can academically while your getting your Bachelor's Degree. Specifically, about Computer Engineering vs Computer Science my advice would be the following. If you like to design hardware, software, and enjoy science Computer Engineering is a degree that will help greatly enhance those skills as it has done for me. If you enjoy more of the mathematical nature of computing, Computer Science is a great way to develop that. hoyhoy
I personally found the engineering major much more interesting and valuable. My reason is this - as a comp. engineer, you learn about the low-level operations of a computer. This allows you to understand WHAT is going on, not just how to tell the computer how to do it. As a comp. science major, you learn theory and code, and this is great if you want to be a coder, but remember that languages constantly change. With rare exception, the basic operations vary little. I think it is more useful to be a comp. engineer. If anything, it will improve your hirability. That's hardly an issue for any computer-related major. A comp. engineer also gets a background in engineering, which can be useful in real-life. Good luck at whatever you choose!
The course I took was 3 years (vs 2 years in CS) and much harder. It better prepares you for the work force. To be honest Queens University here in Kingston hires Computer Engineering students from our local College instead of Computer Scientists from their own course when it comes to summer software programming work they need. And no its not because their students are all busy in other jobs. Its a fact and im sticking to it :)
And to be honest I remember helping someone in second year of CS and i couldnt believe just how little they knew. When I make hiring decisions today I'd choose a Computer Engineerer over a Computer Scientist of the same level any day (I wouldnt touch an Electronic Engineerer mind you).
In my school, CS was one dept, and CE was taught out of the EE dept. It was basically an EE course, without Laplace and DiffEq courses, and logic courses, instead. If you like software, that's good, because there are going to be many more software jobs than hardware development jobs (IMHO). Features nowadays are enabled by the hardware but created in software. And we hire three to five software developers for every hardware developer where I work (networking hardware company). If you like hardware, be prepared to like it on the atomic scale, because you can't make any money building discrete systems. Integration is the key, and design is more and more like software engineering with Verilog and VHDL. But don't forget about those pesky real world issues, like heat and noise :-)
Since CompE and CompSci are so closely related,
course-wise, you might consider going CompE, and
loading up on CompSci courses for your electives.
there is more to the world then reloading Slashdot every five minutes. As many others have said, choose what interests you, what makes you happy. But also remember that life exists beyond the confines of the x-tube lab.
I recently graduated with a CprE degree, and while interviewing one of the interviewers told me that for the same skill set as a bachelors in CprE, they would look for a Masters in ComSci. Of course that was just my school. There a CprE degree was a basically just EE degree with a ComSci minor. So we got our hands in just about everything depending on what electives you took.
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.
----------
Never underestimate the bandwidth of a 747 filled with CD-ROMs.
My opinion is that a computer engineering degree is more flexible and valuable than one computer science. It is also "harder" to earn (at the institutions I have attended, anyway). As previous posters have stated, it is indeed more heavy on the math. Do not run from this, though, because if you make it through then you are that much more qualified to work on problems that require the math. In four (maybe five 8-)) years you may find yourself wanted to tackle harder problems in graduate school, and the more math you know the better off you are. Besides, understanding mathematics is a blast and enhances your confidence (and competence) in any professional situation.
In most cases, it is quite easy and reasonable to switch from a computer engineering to computer science. Going the other way, however, is harder. Why is that? Because you don't have the math background. Actually, this is true with far more than just CE/CS. A student can hop from a physics or engineering major to just about anything else related to science, math, or engineering at the university. It is also good preparation for an advanced techical degree. Computer science is also good preparation for graduate school, but not as good as engineering. Either way, your undergrad experience is full of useful tools for your advanced work. The computer engineer, however, will know a lot more math, and quite a bit more about hardware, in addition to computer programming.
Simply put, my opinion is that the more rigorous your academic program, the more valuable you are going to be to employers, and more satisfied with your career and intellectual development in the long run. Most people choose the easier path.
(I should mention here that both ECE and CS are hard, relatively speaking. You can't really lose choosing either one.)
By the way, I have a BS in computer engineering, a MS in electrical engineering (minor in CS) and all but dissertation in EE (minor in music). I am still working on this last one. I consider myself to be a computer programmer at least as good as those who studied pure computer science. So, studying computer engineering does not preclude becoming a good programmer, or even doing programming full time after graduation.
John
Just to add something more "interesting" to this thread. Does anyone has any references to North America universities rankings based on computer science programs?? Or any comments on any North America university that has a good computer science program??
was take both. The University I'm at (University of Western Ontario) lets me take Computer Engineering and Computer Science concurrently, and graduate with both degrees in only 5 years. And a nice benefit of going into engineering is that you can then become a fully licensed Professional Engineer (which actually MEANS something up here in Canada). A major difference between the engineering vs. the science program, is that science tends to focus more on the theoretical knowledge, and engineering on the practical applications of the knowledge. Basically, look into exactly what each program offers, and how that would fit into what you want to do.
I think you're mixing up computer science, software engineering, and programming.
Computer science, to stress the science, is real. It touches complexity and information theory, entropy, transmission and coding theory, algorithmic analysis, and statistics.
CS is an artificial construct only as much as math is our approximation of the way information is conveyed, or physics an approximation of the way the universe works.
CS is separated by math by only a thin boundary, at parts.
Languages, kernels, etc, are software implementations of CS theory and thought. It is a step lower than CS, and on the job experience is not enough to qualify for CS status. I'm not very good at CS, myself, but have some of the training from college.
Everything you're talking about concerning CS is more related to programming and work. "How many times have you had to learn something for a specific project and never had to use it again." Deals with programming and instances, not with algorithms, complexity, computability, efficiency, or optimization. All of the above is closer to CS, and as such are irreduciably common to all problems.
Being good at CS doesn't translate to being good at programming. Compare CS to being good at critical analysis and diagnosis, where programming is being good at surgery.
One is a thought game, the other an implementation one.
Geek dating!
GPL Deconstructed
CompE here is more or less a blend of EE and CS. It's actually not much different than a double major in the two (which I once considered, but realized that I couldn't finish in four years and keep my sanity). Oh, before I forget, ECE = Electrical and Computer Engineering (the department name). Here's a brief rundown of the main points of the three programs here:
Really, the best thing you can do is just jump in, take a few classes in any of these that you're interested in, and then make a descision. Even if you end up in a career you don't like, any of these three degrees have a reasonable amount of lateral mobility (especially CompE) between any field in electronics or software.
Computer Science (CS) requires no real engineering, but Computer Engineering (CE, although the actual designation was EEC, since CE was Civil) requires a CS courseload just about sufficient for a CS minor. CE is really Electrical Engineering with a concentration in Computers, while CS can have concentrations in many different areas, with or without any hardware or engineering. Changes in major almost always went from EE/CE to CS and not the other way around - it was much easier to get a CS degree than an EE degree, although clueless people still managed to get through with an EE degree (maybe not a CE though).
Confused yet? There's an easy way to start things off - don't make your final decision yet. Plan to take introductory courses in both CS and EE (or CE if those are separate). By the end of your first year you should have a good idea of where your interests are. If you like playing with code and algorithms, CS is probably your best bet. If you have an interest in logic and processors, as well as basic electronics, stick with CE. If you want a good background that can lead into many different kinds of jobs, go with EE and just take whatever classes interest you (if your school's EE program is flexible enough).
In the end it really doesn't matter what your degree says, what matters is what you can do. I only had a basic background in programming and digital logic, but Compaq and The Mathworks both had an interest in me (Compaq gave me a big offer, Mathworks was too slow) because I demonstrated that I was capable of doing whatever they wanted me to do. I ended up picking the job that seemed the best for me, which was in the area of communications, which I had a bit more of a background in. Having a Master's degree really helped here - it only took me another year and a half, it didn't cost anything (except for books), and I still got a decent paycheck each month. The advanced degree made me look a lot better to prospective employers because it gave me a lot of good real-world engineering experience (in other words I got to sit in on endless meetings and also work on a successful project). Now if they would just stop trying to give me jobs...
In short:
-Just start taking classes, pick the exact major once you know more about your school's programs.
-Do what you want, not just what you need to do to get the degree.
-Don't worry about what companies will want, if you have the ability they will be interested.
-If possible, get your Master's degree right away.
At many schools, if you absolutely declare no major, you're put into a very general program and you'll almost likely fall behind.
Many colleges each have their own set of requirements of classes you have to take. The problem at many schools is that Computer Science and Computer Engineering are in separate colleges. CS is often considered a pure science, where CE is usually in the Engineering Department (and often under the Electrical Engineering major).
Unless the required classes first semester are the same in CS and CE, you should probably decide which you want before you go.
Of all the CS students I've known, none of them have had any clue at all. The two CE students I've known, had their sh*t together. I'd personally go and talk to people who have graduated from both programs, see who you think has got more out of their respective program. In the end, it's really up to you - just make sure you're well informed. If an add says that a "BSc CompSci" is required, all they really mean is they want someone who has had some formal trainning.
When I was a CS major in the early to mid 80s the CS program was impacted. Because of this I was forced to become a pre-computer science major. I had to take quite of bit of math and and some lower level CS classes: The lower-division classes were pretty much programming languange oriented. The major required us to learn Pascal, and IBM 360 assembly language at a minimum. From there the required upper division classes were much more involved and included:
1) Data Structures
2) File Structures
3)Systems Programming: I wrote an assembler and CPU similator in this class.
4)Programming Languages: I got exposure to more exotic programming languges: like Lisp, Ada, and SNOBOL
5) Hardware: This was an intoduction to hardwere and we also did some assembler in the class. We had a choice of Z80 under CP/M or x86 under DOS.
6)Operating System Priciples
After the required classes we then had more choices depending on what speciality we choice. I liked compilers and operating systems and so I did System software. I wrote a compiler in Modula-2 that generated code for a Pascal-like language. I also took a Operating System Pragmatics class where we wrote an working OS using a Modula-2 cross compiler that ran on a DEC Vax. The compiler generated 68000 code that we downloaded via a serial connection from the Vax to AT+T 3B1 systems. The OS class was probably the hardest class I ever took as all of my free time was spent in the systems lab the semester I took that class.
What is taught to CSE and CE students can vary and is so broad that I don't think it matters a whole lot. I have friends takeing CE and I'm in CS and we can both program but he knows a little more about hardware/electronic but I know a little more theory. Nothing you couldn't learn from picking up a book.... Since computers are too new and evolve too fast in the world, unlike cars say, it's hard to say but down a curriculum in a school and say "This is what's best to learn." Have a look at what you like doing more, hardware or software, but know that both a CS and CE will probably get you to about the same place. Where you go after that will have the most effect on your career.
Most companies i have visited or spoken to at opendays dont seem to mind much as long as i am a suitable candidate for a job. ie if you want to go into networking Comp eng might be better but if they wanted a programmer i could still do that job having taking the required modules at uni.
Another take on your decision: bear in mind that your choice of major operates in some respects like a job title... there are people in the world who will read volumes out of the words in your degree, without regard for what's actually behind the degree itself.
What I'm referring to specifically, is the fact that a CE graduate has the word "engineering" in their degree.
If one day the entire computer industry collapsed (or alternately, you got completely sick of it), the fact that you have an engineering degree would be a saving grace... many employers (semi-rightfully) regard an engineering degree as a very flexible and useful background.
As far as software is concerned, there isn't THAT much difference between a CS and a CE major... it's almost as slim as the difference between an Applied Mathematics and an Abstract Mathematics degree. But don't underestimate the added value of that single word: engineering. Both on paper and in practice, it means that you're getting a little extra something with your education in the way of problem solving and practical knowledge. And smart employers realize this.
As many have pointed out, CS and CE people are quite capable of performing many of the same tasks and jobs (at least as far as software is concerned). Also as many have pointed out, depending on the jobs you take and the experience you get, CE vs CS will have little-to-no meaning a few years after you graduate.
So unless you're planning to pursue a highly theoretical and academic computer science career, I would personally suggest going for computer engineering instead. If there's anything from the CS curriculum that you'd feel like you were missing, then by all means just take those classes too, for credit or not! Or get a masters.
DiscDividers tabbed plastic CD dividers: divider cards f
Signals and Systems, Digital Signal Processing,
digital Control Systems, Analog Control Systems,
Linear Circuit Analysis, and Electrical Science
are all courses that...
1) CompSci and Math students rarely take
2) CompEng students will take
3) Are basicly math courses, as anyone who has taken them will tell you.
That said, at least at Clarkson (where I went),
Both CompSci and CompE students took basicly the
same math courses (math in the strict sense), but
it was the courses like Compiler Construction (for CS) and Digital Signal Processing (for CompE)
that seperated the two.
CS is more "discrete and combinatorial" math, while CE is is more "nasty page-long calculus problem" math.
Just my $0.02
1. computer engineers deal with bits 2. computer scientists deal with bytes 3. rock and roll starts deal with chicks (or dudes), money, fame, glory and fun. study music and choose 3.
"just another ugly toad waiting for a kiss from a princess"
have you considered Computer Technology itself.. it (nin the case of Purdue university anyways) contains a good mix of what you would learn from either major.. an associates in it is marketable... and it can help you get a good idea as to which direction you whish to turn.. if any.
Hash Bang Slash Bin Slash Bash
I'm currently a Computer Science major. Although our curriculum is a little old, it has a lot of both the CE and CS.
Such as, our third class we take is Assembly language. There, besides the language of course, we learn a little bit about architecture from a high level aspect. Then, the following semester, we take Computer Organization. It is a mix between the mathematical theory behind machines and the logical construction of circuits (i.e. we implement gates on paper instead of in real life).
Right now it is not required, but there is another course called Computer Architecture which goes in even more detail about hardware design.
Moral of the story is: Don't think that there is an extremely large difference between the degrees. It depends really on the school you go to and the curriculum they offer. Although I'm not physically building any circuits, I'm getting a chance to learn about how to do them (as well as the knowledge behind how they work aka Boolean Algebra).
Just some food for thought. What ever you do, don't pick the major based on money. Pick the major that you will feel the most satisfied with. And don't go into school thinking you are going to learn everything, because you will not. The best way to learn the maxiumum amount you can in 4-6 years is to research and/or work. Doing this will help you become more acquainted with the technology/ideas (and a lot more knowledgable).
MunITioN
MunITioN
"A mind is a terrible thing to lose"
Besides, when you study the low level hardware along with coding, you learn to write better code because you understand how it will be executed. You then e.g., understand why word alignment wastes space but speeds up your code, or why disk access is best done in blocks of 512 bytes or 1024 blocks, etc.
You'll also then be able to build simple peripherals like hooking a thermistor to a dac and then to your parallel port to monitor room termperature, etc.
No one should leard to code without learning what their hardware will do with that code.
If you can, figure out roughly what you want to do when you are done with school and find out what you need to get that job. I work on embedded systems and we'll only talk to Computer Engineering students because they have hardware knowledge and that is key in embedded systems. Also remember that as a Computer Engineering student you'll get exposure to formal design practices which you may or may not get in a CompSci program.
From what I've seen, what one school calls computer engineering varies dramatically from the others. I go to an ABET accredited engineering school. Our computer engineering program is ABET accredited and handled by our Electrical Engineering deptartment in the College of Engineering. They have to take a crapload of Computer Science classes, but they also have to take almost exactly the same classes as an Electrical Engineer.
At my school, thats the way I would go since our Comp Sci. department sucks a big one. The ABET accreditation may be overrated, but at least you'll learn something(our EE classes are not for the weak minded. Lots of math too.)
When it gets that specific your major means nothing. At all. Zip. Zilch. Don't cry just try and cope. Somewhere around 3/4's of your education will be mindless drivel like government, philosophy, calculus, and fencing. In the end you will have taken somewhere around 20 out of a 150 hours for your major that you will use in the job field. Recruiters understand that and this is why your major, whatever it is, will serve as little more than a passport to get threugh the "Must have a college degree in the computer field" checkpoints of the world.
You will not be pigeonholed because you have a certain type of degree unless that degree is extremely specific.
For my own part I'm studying CE as opposed to CS for one reason.
What comes to mind when you say Computer Scientist?
Lab coats, research, pure science, text books, dork.
Now what comes to mind when you say Computer Engineer?
Money.
I would recomend not declaring a major until you really need to. Focus at first on the core courses and if you attend a large school like I do (UGA) then your not going to fall behind at all.
I took the time to experiment with a wide array of classes like sociology, art, math, accounting etc.. and only after I saw what was available to me did I really have a firm grasp of what I wanted to do...eventually MIS....
If you focus your energy trying to answer the question "How do I get rich?" then when you do become rich all you'll want to know is "Now what?"
If you focus your energy trying to have a meaningfull college education, you may or may not get rich, but then again you will have gained something far valuable, "Peace of Mind".
ps. go DAWGS
Not in US, but I did my bachelors in Melbourne University Australia. I hated EE stuff, b/c of memorize this formulae junk! I was a CE major. our CE is about 30 % hardware & 70% software. The balance exactly I liked! So I do know how a timer circuit works and also know how red-black trees work (well, for the later one, I need to dust up my sedgwick book :-).
But I found straight EE very boring. May be it is me. I am so into programming / admin stuff, I loved my CE. Also made some great geek friends in the CS dept
In my program (University of Washington) the only difference in requirements is that CE students have to take chemistry and CS students have to take Foriegn Language. CE students have to take all the hardware courses while CS can take them but only as electives. Our advisors have told us that career-wise there is no difference in what jobs out graduates get. I hate chem so I'm CS.
In some ways this question kinda shows you who truly personifies the conventional understanding of the hacker ethic. The people who are saying "Follow the money" don't get it. The people who are saying "Follow the education that will make you elite" don't get it. The people who are saying "Study what interests you" get it.
This is quoted from the following site:
t ml
http://www.MacKiDo.com/General/prog_vs_engineer.h
This is more of a description of which type (programmer or engineer) is good for types of tasks but could easily be used to compare CSC vs CPE (at my school)
Some people call themselves "Programmers" and others call themselves "Software Engineers". "Engineer" seems to have more prestige in our society, so more people try to call themselves Engineers (even if they aren't). Of course anybody can call themselves whatever they want -- so what people call themselves makes little difference; however, there is a distinct difference between the two.
There are needs for both (engineers and programmers) -- and different tasks require more of one or the other. Most tasks require only a few engineers and quite a few programmers. The problem is that many managers don't understand the difference, or hire the wrong ones for a job.
Programming is not hard -- it is tedious. You need to be able to break complex things down, into a long series of simple steps. That is it. How you approach that problem will define whether you are a programmer or an engineer. So the biggest difference between the two is philosophical -- and like most philosophical differences, it can lead to tension. Arrogant types (on either side) can get into these little ego-driven superiority complexes that drive the other side nuts, and some pretend that the "others" are idiots. They aren't idiots -- they just have different goals, different motivations, and different philosophies.
to email me: take my
I am student a Purdue University and we have a major called Computer Technology (CPT). Computer technology focuses on things differently than computer science (CS) or computer engineering (CE). With CPT you have the option of focusing on telecommunication and networking or information systems.
Our CPT program gives you a very wide range of computer skills to begin with. Such as computer programming, oracle and sql, web design, basic digital logic, and a few other computer related topics. Once you have taken those classes you receive your associated degree in CPT and then you start focusing on the networking or IS for your BS.
I have found it to be a very good program for people who want to focus on things such as networking, which is what I plan on studying. You can't get as much in depth training in CS or CE on networking as you can at or CPT program.
Just thought I would share yet another option for you to look at!!!
---- Don't worry about signing me up... I'm already on all the spam lists.
What they don't actually distinguish between is Engineering and Science, which are subdisciplines of anything: electrical work, computer work, physics, nuclear work, etc.
Engineers use known facts to build new systems. A lot of the work of an engineer is figuring out the most efficient way of doing x, solving the system issues, trying to make it affordable, robust, etc. Sometimes it is an issue of trying to make it bigger or smaller than ever before.
Scientists research new "facts." They know techniques for exploring new areas of mathematics and can whip up prototypes, but generally are idea generators, not idea refiners.
Most people with CS and EE degrees write software. Being a programmer is being an engineer (arguably, a software engineer). Most companies don't actually want to hire "computer scientists." Universities and research centers want scientists. Most companies want programmers.
Too many people come out of school with a CS degree and are lousy programmers. A PhD in CS may be a brilliant person, but likely as not they can't write good enough code to land a basic programming job on that alone. Likewise, a lot of people assume that because they can program they have the skills to develop complex new algorithms. A small set of people have both skill sets. They usually end up at companies developing far range concepts.
So, regardless of what your degree says, make sure the experience you gain in college actually leads towards the career you want. If you want to program, don't take the theoretical math classes recommended by your computer science curriculum-- you need to learn systems engineering, algorithms, and lots of languages. Some business classes wouldn't hurt, either. If you want to do research, you need to primarily learn a lot of math, not 20 languages, debugging techniques, and details of the development process.
-m
Computer Science was formerly called Computing Science. It really has little to do with computers. The reason computers come into the picture is because they make computing practical.
Computer Engineering, OTOH, like all engineering is concerned with the application of a discipline. Thus, it will involve more of the ers than the ings.
"Perl 6 will give you the big knob." -Larry Wall
While I tend to generally agree with what has been said thus far, I think it's important to consider the individual universities, as each tends to have a differing approach. For example, at the University of Illinois, our Computer Science curriculum is part of the Engineering college, and as such is subject to many of the core engineering requirements. Additionally, we are required to take some lower-level ECE and hardware courses in order to gain more of an "engineer's" perspective.
Now, we also have Computer Science and Mathematics majors, which take many of the CS courses from the department, but as a supplement instead have to take courses in the arts and sciences, as well as a great deal more mathematics.
So we also have electrical engineers, who typically would deal with things a level abstracted from a computer geek's interests, yet many of them are designing processors, or even the next layer of software that interfaces with operating systems ... which is a niche that you'd think a Computer Engineer might find themselves in. Yet the Computer Engineering program seems to be a mash of everything together, maintaining the focus of Electrical Engineering, while combining a more thorough low-level understanding of computer systems.
Of course, there are other options, such as Information Systems in the business curriculum, which deals more with applications and their place within an organization. My guess is that you would find something like this far too trivial (which isn't to say that IS/MIS is trivial, rather it's just not going to whet your interests in computers to the fullest extent).
While Computer Engineering seems to pose the biggest compromise, a compromise might not be what you're looking for. If you really want to gain an understanding of computers that will allow you to understand the programming process (not necessarily learn how to program) at all levels, I would encourage Computer Science. If you are interested instead in creating the hardware and low-level interfaces to that hardware, Computer Engineering is your best bet. If you want to guarantee you maintain the computer influence, I would stay away from hardcore Electrical Engineering.
Yet again, this has all already been said. What I alluded to more in the beginning is that you need to look at the specific universities you are considering, and see what each program is like. Don't hesitate to ask the department for some current students to contact at those universities, in order to get their perspective. Don't hesitate to visit the departments (if possible), talk with the dean, and visit some classes, in order to get a better perspective on what exactly a specific program is like; I tend to think that you might want Computer Science at some schools, and Computer engineering at others.
Once you've made an educated decision based on these things, don't hesitate to change your major if you find out you made a choice that didn't work for you; the beauty of the Universities is that they'll be happy to keep teaching you as long as you keep paying; good luck!
I'm a student at the University of Michigan and I ran into the same problem as you. At U of M, the courses are basically the same except that there is more hardware stuff in Computer Engineering than there is in Computer Science. I chose to go the path of Computer Engineering because an engineering degree from U of M can go a long way, I'm told. It is basically up to you and depends on the college that you go to. Computer tech is an industry that is still in it's initial stages. The way the degrees are offered and the cirriculums that are required differ from college to college. For example, at U of M if I decide to get a Computer Engineering major, it will say Computer Science on it, but I will still have the "graduated from U of M College of Engineering" degree, but the majors for both Computer Science and Computer Engineering are about the same. I, personally, want to code for a living. Some might encourage me to get a CompSci degree, but I would rather have the CE degree. Due to the fact that I will have to understand the hardware of the computer better, I think that it will make me a better programmer. The fact that the engineering school doesn't require me to take english or foreign language classes also drew me as well. I would rather take the technical writing classes that we have to take, than to have to take some boring english or foreign language class. The choice in this matter depends mostly on what you want. Here are a couple of suggestions though. Find out what the differences are between the required classes for the CompSci degree and the CE degree at the college that you want to go to. Second, figure out what the basic requirements for the school (LSA or Engineering) that you want to go into are. These things vary from university to university so if you still don't know where you want to go, try and get this info from all of the universities that you are cosidering. jomamanup, signing off
jomamanup, signing off
On the university. When I went through the University of Illinois (Urbana) back in '90-'94, Computer Engineering was a hybrid of EE and CS that focused on hardware design and development, where their CS program introduced you to all of the major branches of CS (ie, hardware, hardware/software interface, software, algorithms, AI, etc), and gave you the flexibility as to which branch you wanted to specialize in. Although to tell the truth with the way the job market is, both of them will be extremely marketable... it really depends on what you wanna do with it.
I am a Computer Engineering Graduate from RPI (Rensselaer Polytechnic Institute), presently working in the electronics industry, and I can explain the diffrence between the three related majors (EE, CSE and CS) as they are taught at RPI. I have no idea if this is consistant across other top-teir engineering schools or not. Electrical Engineering (EE) focuses on analog design and control systems. It deals with the "fundemental" aspects of electronics, along with ampllifier design and often radio comunication. There is a large math requirement attached to this dicipline, primarily Claculus and Differential Equations. Computer and Systems Engineering (CSE) has exactly the same course requirements as EE for the first two years, with the possible addition of some software courses. This major then goes on to examine the digital side of the electronics world. Computers, digital controls, and assembaly programing, along with some design classes are included. The amount of math is the same as with EE, but there is more of a focus on discrete math and probibility. Both of the Engineering diciplines have only a few free electives alailible to them, and also have to take the basic engineering courseload. (Thermodynamics, physics, chemistry, MATH, intro to design, etc.) In addition, all majors have humanities and social science requirements to give the students some depth. (At RPI these courses tended to be fun and interesting without being too hard or time consumeing. That is not to say however that I did not feel that i learned a lot in them.) Computer Science (CS) is part of the School of Science as opposed to the school on Engineering, as such CS majors do not have to take the basic engineering courseload, and instead can select from assorted classes in the school of science. This Major looks at computers from a more theoretical level. The focus is on the development of elegent algorithums (I appoligize for my spelling) and yes, on programing. However, as has been said here before, the specific language is not realy the point, the major goal of learning how to write code is to explore the various concepts you are learning about. CS majors are required to take less "Hard Math" then the engineers, however many use their free electives to take extra classes to get a minor or even double major in Math. Full disclosure: I am a '99 B.S. graduate of RPI with a major in CSE. My knowledge of the other majors comes from several friends in each.
I graduated from Northern Arizona University, a small but excellent school in Flagstaff, AZ, with a degree in Computer Science Engineering. It is both combined with an equal emphasis on HW and SW. Excellent program. Great teachers, small size, not too expensive. And, the degree landed me a job at Motorola right out of school. Look for something like that, then you will be covered.
Go take a look at some of the writings in Donald Knuth's book Selected Papers on Computer Science to get a feel of what computer science is about. Knuth's target audience is the general public and it may very well fit your needs.
If you like designing algorithms, by all means, go to computer science.
I can speak to several aspects of this discussion. My first degree was a BA in History, with an emphasis on East Asia. It was a very interesting course of study, but I wound up selling life insurance. To be fair, I was planning on law school, but decided against it in the course of my senior year. Nevertheless, getting a job can be a tough sell with just a liberal arts degree.
I went back to school. This time in engineering. The degree was a BSEE, with a major in Computer Engineering. In my experience, employers like engineering degrees because there is a cohesive discipline. There is a problem-solving orientation that is not always present in a Computer Science curriculum. Since I already had most of the distribution requirements from my first degree, I was able to pull in quite a few pure-software courses. With this degree, I got a job in a large technology company, in the defense systems group. I did mostly software engineering, but also a little hardware and some things at the HW/SW interface.
My third degree was a master's in Computer Science, paid for the company that hired me with the BSEE. This was the most fun so far, and is the most applicable to what I really wanted to do. The best thing about grad school is that you don't have to take courses outside your field.
I started on a doctorate, but I was never able to take the time that would have been required to prepare for and take the general exam and do a dissertation.
In general, I think that the approach that I ended up taking was probably about as good as you can do in terms of preparation for a software career. Not that it was intentional at the time. I was particularly fortunate in that I could go back to school for a second bachelor's degree, and that I was able to adapt the engineering curriculum (which focused more on hardware) to me interests.
The bottom line is that either route can get you where you want to go. It depends on how you take advantage of the opportunities that are available.
Floating face-down in a river of regret...and thoughts of you...
I don't think anyone will get to read this cause their are already waaaay too many replies in here. But what the hell.
I want to design the next generation graphics card chipsets and processors. I'd like to work for either 3DLabs or Matrox when it comes down to it. Unless I just decide to go with AMD and hit the processor route.
But anyway, you can be a Computer Scientist and totally ignore all the hardware and just work in high level languages and stick with the easy crap, or you can be a computer engineer and *really* understand how everything works down to the electricity moving through the chip itself.
The rub is that you cannot be a computer engineer and ignore computer science. You have to know how programs operate in order to design memory and processing subsystems to give the fastest and most reliable results possible. So far, in my experience, Computer Engineering is like majoring in Computer Science and Electrical Engineering, the latter with a concentration in Digital Systems.
When I got to school, I had a bit of a desire to grab majors in all three subjects (CS, CE, and EE), but now I know that the one that focuses in the areas I want is Computer Engineering, and nothing is left out that I desire to know in the other two areas of my greatest interest.
Well, that's my take on it all, and I hope maybe one person got to read it and got some good info out of it!
JDW
Computer Engineers can become Computer Scientists, not the other way around.
"In mathematics, it's not enough to read the words -- you have to hear the music"
i'll give it to you straight up little man
up here in Canada at the Univ of Waterloo
this is how it works.
comp.eng's get pussy. bottom line.
cs, well, they got their dungeons and dragons'...
hmm.
12" floppies.. bring it.
At NCSU, you'll get half the undergrad curriculum in EE courses and the other half in CSC courses if you major in ECE. In essence, that's what I am.
I graduated as an EE 20 years ago and worked as an analog circuit designer and a magnetic compnent designer for 14 years. The last several years of that stint in electronics, I became a self taught programmer. Then I went to work for a CAD vendor and started taking CSC courses. I took the core undergrad CSC curriculum and did well. Now I write debuggers. Careers sometimes have a mind of their own. Do what interests you most. The "hot" areas are always a moving target.
Wansu, th' chinese sailor
But that's no reason at all, you have no control of what the transistors are doing below. Any semi-high level language you use is optimized on the compiler level so that no matter what you write, it will work as efficiently as possible. This isn't the old days where cool little tricks actually worked in C.
I applied for Computer Engineering because it was a growing department that was looking for more students. CS, on the other hand, had like hundreds and hundreds more students already enrolled. I think that apply for ECE was one of the reasons I actually got accepted at my school. After deciding I didn't want to keep at it, I switched to CS after two semesters. Hell, I coulda switched to English for all they care. Once you're in, you're in. ECE will get you in.
Intercarve Networks, LLC
My assumption here, based on your question, is that you do not particularly feel drawn towards one degree or the other.
As an engineer, I strongly advocate an engineering degree (of any sort but especially "fundamental" engineering like chemical, civil, mechanical, or electrical) over a CS degree.
The reason is this: an engineer is a general problem solver and a potential candidate for a wide range of positions.
OpenSourcerers
Now all that changes somewhat once you are talking about advanced degrees--because there CS is actually more than just Java programming. Still, you are better off doing an engineering undergrad degree, and then you can decide what to do for your Master's or Phd. If you are more theoretical/mathematical, you might want to pursue CS at that point--otherwise, I would still suggest sticking with Engineering.
I was in both programs at my school. I don't know exactly what the "industry perspective" is on the subject, but I can tell you what my school's POV was on that perspective. They felt that the industry saw computer engineers as a bridge between the computer science and electrical engineering folks. There was a feeling that these two groups were not communicating well in projects and that someone was needed to keep the two in step who understood both sides. I don't know if this is still the case or if it was ever the case, but one thing that was mentioned earlier is definitely true. Five years after you graduate, you'll have defined where you're career is going reguardless of your degree. You just need to make sure you can get your foot in the door. "All this machinery Making modern music Can still be open-hearted"
The market for IT jobs when you have one of the three degrees I've seen mentioned here (CS/CE/EE) is very fluid as to what you want to do. And, however many years from now you graduate, the market will have totally changed from the way it is now. The way it is now (in general and IMO) is that CE jobs are a bit more stable (as they're a bit more hardware oriented) than CS degrees; and, having a degree is very important as jobs you can get with no degree aren't very stable at all.
I recently graduated with a CE degree, and had over a year's experience in ASIC design/verification. This is the "digital logic" type of stuff that many other people have mentioned here. I had companies eating out of my hand the way Java people did when it was all the craze. The thing is, though, ASIC people are mainly employed by companies who create large-scale servers and processors (Intel, Compaq, IBM). These companies "in general" (big grain of salt here) do not lay off people in the groups that create these custom and semi-custom chips since these form the core of many large computer company's product line. There are also small companies that do this work (if you prefer the small company model), but mainly they're startups trying to get bought out by a larger company from what I've seen.
The whole point here is that you get more freedom and have the possibility of finding more job security from what I've seen in an area such as the one I've found. But, it's a relatively small niche when you look at the amount of IT work in general that there is to do. To take this point to a more general level, I will close by saying the following:
Doing what you want to do in life is the most important thing (even if a person wouldn't believe me, that is why I chose this job). If this falls into the IT world for you, my recommendation is to choose something that challenges the crap out of you, and takes you a bit to learn to like, as it will likely be more important to a company and more secure in the long run. Watch the market as much as you can while in college, and realize where what you like doing fits best into that. Everyone wants to program games, even the business majors. Look for goals that take things a step further, like "I want to design graphics cards."
IMHO, the point in career is the same with all things IT. Be one step ahead of the other guy, as he's trying to be one step ahead of you. Learn to predict the future, figure out where the person you want to be fits into that, and tailor your choices towards that world, rather than the one around you.
What matters is if you get the job you want after college. Either major is ok if it gets you the job you want. After that, it matters very little! I hope I helped!
Here's my quickie opinion as a Comp.Eng. major..
You have three choices for a computer degree: CS, CmpE, EE. It's a tough choice even though they all overlap. I believe that CmpE is the best choice because it gives you a solid background in hardware, software, and higher math--and to be a good engineer, you should understand all aspects of your tools. I can't tell you how much it frustrates me when some of my CS friends have no clue about basic electronics or low-level computer hardware. On the other hand, I know EE majors who have no clue what happens on the software side and are only comfortable with a VHDL analyzer or breadboard.
There is something about knowing EVERY aspect of computing that gives you the feeling that you are truly master of your machines. Having a more diverse knowledge base lets you better see how hardware and software and algorithms work together in the big picture. This leads to increased creativity and insight in problem solving as well as a more satisfying and interesting career.
In closing, one additional thing worth mentioning is that Comp.E and EE majors both give you a solid ground in classical engineering knowledge. (Physics, Differential equations and their application, systems and signals theory, etc.) This knowledge is applicable in all engineering disciplines--once you learn it, you can pick up a book on say.. acoustics.. and actually understand it. A Computer Science degree will most likely not give you this.
Good luck with whatever you choose!
computer scientists sepend a long time trying to deveop theories and ways to make it work better. computer engineers have to make it just work, usually by 9am tomorrow.
Something that may help you decide would be to compare the curriculums of those two programs at a couple schools. I am a 3rd year CE student at Milwaukee School of Engineering. In addition to CE, MSOE offers a software engineering degree (CS on steroids). You can look at the courses you would be taking for CE and SE on their respective department web pages. The biggest difference in programs comes in junior and senior year. This is when the SE's start spending 20 hours a day in the programming lab, coz they have 3 labs to do :)
Another thing to consider is that its OK to change your mind, since these two programs are similar, you can transfer between tham pretty easily. IMO, it is easier to transfer from CE to CS/SE than vice-versa, so you should start out in CE :)
Damn! That's funny. But George, don't you have a country to run?
If tits were wings it'd be flying around.
I'm a senior in computer engineering... I have many friends in computer science...
Computer engineering is, like the book says, more hardware then software. As a computer engineer, you design hardware that will specifically be designed for use in or with a computer (as opposed to an electrical engineer who might design things that are less computer related, like a power supply, motor controllers, etc). You'll do things like work with audio codecs, video cards, new types of CPUs, peripherals like webcams, mice, etc...
computer science is programming/software... you learn how-to make all that hardware work. the theory behind operating systems (it's not as easy as it looks), what makes a program run more efficiently.
If you like working with electronics and computer hardware AND you don't mind programming and software development then choose computer engineering... you will be qualified to do almost anything in the computer/electronics field. People go on to become programmers (nearly 90% of the development team at the software company I used to work at started out with Electrical Engineering degrees). you can also go on to work with networks, etc, etc...
get into computer science if you want to focus on writing programs, operating systems and other applications. you won't deal with the physical hardware, tho you may have to deal with interfacing with it (such as writing programs to directly work with the hardware rather then going thru an OS first... or maybe you'll be writing the OS that those programs are going thru!).
I would NOT suggest skipping a degree and getting "real world" experience. This seems attractive because there are many small/start-up companies that are willing to pay bright high school grads $20+/hr to work on software projects... this is generally a dead end unless you are truly exceptional (and no matter how much you think you are, you better believe there's always someone out there who's better then you). Once this job ends (or you get sick of it), you'll be on the street with nothing but your experience and a high school diploma. That piece of paper that says Bachelors of Science commands a much higher salary for the vast majority of people out there. It also opens many doors. Some larger companies might not even consider you if you don't have a formal college education, or 15 years of industry experience. 2-3 years at a start-up coding the installer for their application will likely not cut it at the next job. you also want to think long and hard about a company that offers to put you thru school part-time while you work full-time. Are you going to be able to handle 40+hrs of work AND school? How many years will it take? do you really want to spend 8-9 years just getting a bachelors degree?
CS teaches you how to get a program done. ASU's CE teaches you the why, the history, alternative designs and how they failed, hardware, software, everything.
For most programming jobs CS is fine. For device drivers and custom hardware (common in embedded systems), you want to know more or you might be in over your head. For cutting-edge R&D you NEED the deeper understanding.
I'm an Engineer. Send me an example of what you consider "hard" math. I'll give you a hint--if it has any integrals or derivatives, then it's not worth my time.
The differences between CS and CprE depend on the college. I attend Iowa State and major in Computer Engineering. Here, I would say that Computer Engineering is closer to Computer Science than Electrical Engineering. We have a little more emphasis on the underlying hardware than CS, but the vast majority of my classes are software project based. Hell, even my hardware classes (such as my processor architecture class) ended up being very software based because our semester project implemented a processor using Verilog. You also need to look at the Computer Science department and find what their focus is. Iowa State's CS department is more theory based, and a lot of students that come in here don't realize that. They expect it to be closer to Software Engineering, and think they will learn how to write huge programs in Visual C++. It doesn't happen. A lot end up switching majors when they start hitting the discrete math courses. So, the short answer is, check out each of the colleges and find out what the focus of each major is. And don't worry too much about not liking your initial choice. These days it's rare to find an engineering student (or CS for that matter) that gets out of college in 4 years.
Ususally a university will not require you to declare a major until your second year. Use your first year to ask a lot of questions and take courses that are common to both majors. If you don't mind adding an additional year to your education, consider a double major in CS/CE. Others may think this a waste of energy but there are so many common courses that a double major isn't that difficult.
I'm a junior in Computer Science at Stanford, and we've essentially got five majors that span everything from NP-complete to building logic gates.
First, Computer Science. It starts out with programming in C, then moves to Java, and a healthy dose of theory. Computer Science is where a lot of people learn to be programmers, as they pick up enough of the theory to be able to really design an application. There are also classes in hardware, but only the extent of "how do I program for this."
Next comes Symbolic Systems. This major is for people who want to learn a little bit about programming, and then a lot about the ethics and philosophy of machines in general. It's a little abstract for me, and tends to be looked at as CS for non CS folks, but that's not necessarily fair.
Computer Systems Engineering is the cross between hardware and software. You'll learn to program a little bit like the CS folks, but without a lot of the theory. You also take a bunch of circuits classes from the Electrical Engineering department. It's a pretty cool major for people who want to go on to systems design.
Science, Technology and Society is sort of a technical major for managers. It deals a little bit with engineering, but not mch past C programming. Certainly not much in the way of theory. It does, however, have the advantage of a bunch of classes on business, entrepreneurship, and so on, but you can take those from any major here.
Electrical Engineering is for the hardcore hardware people. Everything from signal processing to chip design. EE is one of the biggest majors at Stanford, and it's prettty involved. They are also likely to learn a little bit of C, but the focus is definitely on the hardware.
So, where do you fit? If you love computers, my guess is CS or CSE. CS allows you to pick up all the programming you could want, and here at least, teaches you some hardware as well. CSE is neat in that you learn a lot about hardware, but you also miss out on some of the theory (which can be a plus or a minus!).
You just come along with me and have a good time. The Galaxy's a fun place. You'll need to have this fish in your ear.
I am a junior in Computer Engineering at WVU. Computer Engineering is computer science plus electrical engineering. Unless your really good at electricity and feel like taking two years of calculus and advanced physics, become a Computer scientist. If your in it for the money, go to computer engineering. Don't forget to bring a big stick to kick the **** out of the ****ing ***hole professors that you'll meet.
You stupid bastard, you don't have no arms left. It's just a flesh wound.
Go to your local college campus -- if they have introductory classes in the subject, read the textbooks and see if your interested
Do some informational interviewing -- talk to people who have the type of job you'd like and find out what kind of degree(s) they have
Figure out what you like to do -- do you want to sit in a cubicle for 10-12 hours a day, or do you want a life?
Just a thought.....
"You're the one with the earthshaking reputation. I'm just a flunky. I'm along for comic relief."
>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.)
Caveat: this is more than 15 years old; you were (at best) in diapers
When I was an undergrad (Physics, Math, & Philosophy), things weren't as settled. The engineering degree was still called "Computer Science" (it changed to "Computer Engineering" a couple of years later to keep accreditation boards happy), and there was a CS degree through the math department, as wells. One of the articles had an article outside his door with an on-the-record comment from an IBM recruiter/manager. He said that when hiring a programmer, he *preferred* a math major to a cs major, because, "I want someone who can think."
THe point being that with a solid grounding in mathematics, it's easy to teach someone to program. If you come from a "cookie-cutter" engineering or CS program, you know solutions to a few specific problems, and can't solve anything useful.
I am *not* claiming that all CS programs have this problem--but I've met folks with MSCS's from respected universities suffering from it. "I know Fortran IV, not 77." "I don't know how to do that kind of sort" (with a bubble sort in front of him, he couldn't figure it out and apply it to a different variable.[1] I had to build some cards and show him by hand[2]
hawk
[1] Yes, I know that a buble sort is inefficient in most cases. (a) the code in front of him was one of the cases where it made sense, and (b) the bubble sort in the code pre-dated my involvement.
[2] If it took this to show him a bubble-sort, do you think there was *any* chance of showing him any other kind?
I just graduated with a degree in Electrical and Computer Engineering this past spring. Yet, I am writing software.
As far as which degree you get sort of depends on what you want to do. My degree has steered me more in the direction of writing device drivers, although a CS person would be very well qualified to do that also. I personally don't think that I'm as qualified to write a full blown app, although I do write utilities for our driver.
I'm glad that I went with ECE over CS, because it exposed me to a lot more than just Data Structures, algorithms and Operating systems(all classes that I took anyway). I learned about DSP, Digital and Analog Electronics, communications, control systems, power electronics, etc. IMHO Computer Engineering should allow you to do anything that a CS major can do, but will allow you the flexibility to really do what you want.
There is really a lot of software that needs to be written that requires knowledge of a field beyond CS. I didn't really think about how cool algorithms were until I started doing DSP stuff. That's when it's really nice to know about the hardware, discrete math and all of that other crazy stuff that ECEs do. Well, that's my take on it anyway.
Have a great college career no matter what you choose!
I would also like to say that reading Slashdot that often is probably not good for your social life. You may want to get out more often. :)
Don't declare a major until you have to, take all the required freshman classes (english, etc.) first and then go around, meet people, talk to them about their majors, take some intro classes here and there, and you'll find your niche.. I wasted a lot of time, I went in an architecture major, moved to MIS, then CS, then ended up a German major with a minor in sociology. Because it's what I had the most fun doing at the time. I've found myself in grad school now getting a MSCS. Although the years I spent in undergrad switching from major to major were lots of fun, it got expensive after a while and I stopped having fun at the end.
Be absolutely sure before you pick your major, college is supposed to be for learning and opening your mind to other things, but it's also there for fun. If you have any desire to go to grad school, that's when you should specialize. Most companies won't really care if you are CS or CEng, as long as you are what they need, either way, you'll be around computers(which you currently want to be), unless of course there is something specific you want to get into, embedded systems, application programming, Operating system design, missle guidance systems. But at 17/18, I didn't know what I wanted for dinner, much less what I wanted to do with the rest of my life.
In college, you'll learn a lot about what you are, what you will become and about others. I think that the life experience of college was what I took to be most important coming out of it(besides meeting my wife there).
Really, proper computing science courses are not about an OS or a language specifically.. they are about algorithms. Languages should be picked due to their ability to implement algorithms; some languages are better than others.
I don't think a computer science course should *ever* teach 'shell scripting' or 'perl'.
Those are things that someone with an understanding of computing can learn on their own.
Computing science is about the science of computing. Shell scripts and such are *adminsitration tasks*, and you need no degree to do them.
....go for CpE. In four years as a CpE at Virginia Tech I learned most everything you could want to know about computers. From gate level logic design to microprocessor design, and basic coding through OS design.
Plus I got alot of engineering ethics and economics I would have otherwise avoided. Plus the limited exposure to the EE world was nice. Basic electronics was a good experience and I didn't have to go through the hellish field theory classes.
In the long and short of it....if you don't want to end up as a code monkey or a sys admin you should go for something other than CS.
I ended up as an OS designer for the telecom industry.
B
Well, I can only comment on the Belgian situation, but I suppose it's almost the same as the american... Unless you are *REALLY* interested in hardware stuff (the "dirty work") you shouldn't pick Computer Engineering.
I'm caught up in CE because people told me "Well, it's actually the same as C.Sc, only you get to be an engineer and you will get a bigger paycheck". Needless to say, they were wrong! If you're in to programming and more abstract stuff like Information Theory, choose C.Sc. On the other hand, if you like to think for hours about whether or not some Bipolar Transistor is saturated or not, go ahead and pick CE
Buffer overflow
I recently graduated with bachelors degrees in both computer engineering and computer science. My school is ranked in the top 25 for both of these programs, and here are some observations for people looking at going into one of these programs.
First, you can probably do both. If you are inclined towards doing OS work, or mathematically intensive programming like graphics, then your computer science electives are probably valid as courses in computer engineering.
A second thing to look at is your school's courses for computer engineers vs computer scientists vs electrical engineers. If you look at the courses for the two engineering programs, and see alot of similarities in the sophomore and junior years (within the major curriculum), you might want to look at another school. For the computer science side of it, you will want to look at how many required courses are on things such as object theory or other things that are not related to hardware.
Around my sophomore year, I found out what really interested me. I basically chose courses that focused on microprocessor and ASIC design, compiler design, and operating systems. You need to figure out what you enjoy doing. If you really like working on UI's, databases, or other things that operate at a high logic level, then computer science is probably where you want to be. If you really like making things go fast or logical design, then computer engineering is for you. As I said before, your particular interests may overlap, but I think you'll get more out of school if you figure out what you enjoy and focus on it rather than just following what the course catalog says.
A few other observations:
-You will run into quite a few people who (in my opinion) don't belong in either program. You will meet CS students who can't code and CPE students who never bother learning about hardware. It is important that you learn to ignore them, because they are future management types and you need to get an early start at dealing with them.
-Look at the third level circuits course in computer engineering. If it is the same as the electrical engineers, look at another school. Computer and electrical engineers are focusing on completely different aspects of circuits at this point, and your college should recognize this.
-If you do both majors, you'll go through more weed out courses. These are classes to get rid of the people who don't belong in your major. Your first two circuits and programming courses will probably be weed outs. If you have any talent, you'll get through both fine.
-Hardware engineers typically make about $10K more a year than programmers after a few years out. However, CPE's and CS that do the same job, generally get paid the same, so deciding if you want to work in hardware or software is important.
-Don't get trapped doing something you hate. If you hate doing OO crap, then CS probably isn't for you. If you despise working on compilers and hardware, CPE isn't for you. You probably have to do whatever you choose for a long time after you get out of college, so make sure you like it.
-Have fun. This is far more important than anything else in school. If you don't have fun in college, you'll never have fun again, and that would really suck.
If you want to hack or build software primarily (and hardware is interesting but secondary) then you should eschew the formal CS/CE classes and major entirely.
Study something that will broaden your mind and teach you new ways to think (yes, you can learn new ways still for decades -- your education is only beginning, if you keep your mind open). I would suggest Maths, Organic Chemistry, Philosophy, Economics, or History. I'd like to suggest literature but I'm afraid that has become just a political subject at many schools and you need to check carefully.
And don't just fill the major in those subjects -- they're not as challenging as CS/CE or Physics and many people much less smart than you need to graduate in them so the requirements are easy. Demand the hardest courses, the broadest and deepest work, connections with allied fields, the most difficult teachers, and do a senior research project of some scope. It's more work to be a top star, but otherwise you're just stagnating in the easy subjects, so do it.
An ECE/CS education is worthwhile especially for hardware people but software you mostly teach yourself even when you major in it. And you can afford a nice linux box and some digital circuit toys and analysis tools for less than the tuition for one semester at a state school, so you don't need the school's equipment (but you can probably get it just by asking).
And if you do want a hardware course or three, take it. Ask nicely the teacher, know the background from reading, and the dean will allow you in.
But I suppose you MUST take 4 semesters of calculus (1,2, multivar, and diffeyQ), 2 of physics (calc based), and linear passive circuits (usually the first EE circuits course) just to be liberally educated in the sciences, no matter what. Unless you already did that stuff in high school. After that, you can teach yourself software; read books and read others' code and program, program, program, program!
And learn to think.
-Brian
I personally wanted to do computer engineering, hawever have been accepted to compsci. As I understand it the diffrence is that engineers work more with Networks, and how hard ware integrates with software. Its the comp sci guys who build the software that the engineers need to make work.
Anyway since theres over 500 comments I doubt anyones going to read this, but if you do. Reply to prove me wrong....
Jainith
Computer science is to computers as astronomy is to telescopes.
cpeterso
From what I've seen, it really depends on the school. I'm currently a computer science and engineering major at UCLA. It's actually a modification of the normal computer science route here. Essentially, the computer science and computer science and engineering tracks have the same course work for the first 2 years. It's only in the third and fourth year that there's some splitting. In computer science and engineering, no minor is required. Those normal minor courses are replaced by electrical engineering courses. I believe that just about any of the courses that are required in the computer science major (such as artificial intelligence) can be taken as a computer science elective. The other option here is a B.S. in Electrical Engineering with a computer engineering option. In this case, rather than take computer science electives, you have to take more electrical engineering courses, and a bit more math and mech and aerospace engineering. As far as I can see here (and I maybe wrong), EE deals with sending information around via hardware, CSE deals with putting that hardware together and merging it with software, and CS deals with mainly the software. I'm doing CSE mainly so that I have a better understanding of how the whole system works, not just the software aspect (though I am more interested in software than hardware). I find that CSE can allow you to later work more on hardware stuff or more on software stuff, whereas plain CS restricts you to software and EE restricts you to mainly hardware (assuming you stick with your undergrad and don't do your grad work in something else). As far as a break down of what you learn CS Major 70% CS 15% EE 5% Minor 10% General Education CSE Major 65% CS 25% EE 10% General Education EE w/ CE option 75% EE 10% CS 5% Tech electives 10$ General Education
Editor - GadgetSquad.com
Yume ni ikiteiru.
I chose electrical engineering but in a way that was close to computer engineering. I think that knowing what the software runs on makes it easier to adapt to new techniques. Knowing what makes a computer tick (no, not the clock alone) is important (power, operations, parallelism, etc).
nosig today
Personally I believe that you can model the relationship of CS, CpE and EE on a spectrum with CS and one end, EE on the other and CpE in the middle. While this is simplistic, it points out that we all are in the same universe, and the three fields are all related. Some CS majors (like compiler writers) are a lot closer to CpE than others (like game theory people). Some EE's are closer CpE/CS (like VLSI circuit designers) than others (like high-voltage motors people).
Computer engineers design computers, and I'm not just talking about the box, we do the chips as well. Generally we are working above the actual gate level representation of chips (only a little analog, and only in some spots, the EE people get to play with analog) usually at the RTL level (think of it as a really low-level parallel language). In reality this means doing a lot of programming, simulation, debugging, and analysis. Most days I spend the bulk of my time either writing code or debugging failing tests. The types of code we write are very different than other 'programmers' in that we tend to write either at a really high level (perl and python) or at a really low level (assembly or RTL).
In general, CpEs have a clear picture of the low level details of a computer and what it takes to get work done. The code isn't real pretty, the user interfaces are usually non-robust, but generally it's fast and gets the job done. The final hardware products are high quality because the company is legally liable for the quality (ever read a software NDA? The company isn't liable for anything the software does or doesn't do).
CS on the other hand (I have minor in CS) is focused on writing software for the sake of writing software, or possibly a final application for users. CS people generally can build larger, more user-friendly applications more quickly than CpEs, and have better knowledge of data structures and non-procedural languages.
If you have to choose, I'd encourage you to go CpE. It's trivial to switch from CpE to CS or even EE because you get the foundations of CS, CpE and EE to be a CpE (for example, at orst.edu the BS CpE degree automatically includes a minor in CS). Switching the other direction isn't so easy, as a good CS friend of mine will tell you after taking the CpE microcontrolers course (he now writes compilers for a hardware company).
At my uni (Washington U), many CS majors pursue a second major in computer engineering in order to have a better understanding of the actual internals of the machines they program. This is sort of a cop-out because a CoE is basically an electrical engineer who takes only those EE courses which apply to digital systems and basic cs courses in algorithms and software design. If you really want to be hard-core, double up CS EE. That way you have all the software design background you need (yes, you can pick up languages on the way but higher-level theory might be a bit tricky to pick up on the fly) and a full understanding of the system upon which you program.
This is actually pretty simple. A science studies something with the intent of understanding it. Computer Scientists study algorithms and computer programs in order to better understand them. The computer engineer takes what the computer scientist has learned, and applies it to a real world problem. Some may claim that Computer Engineering is focused more on hardware or more on software, but the reality is, it just depends on the individual department and the faculty in that department. I have an undergraduate degree in Electrical Engineering and a Masters in Computer Engineering. My work is mostly in software. Not because my major specifically prepared me for it, but because I personally chose it. Do you what you love.
That is funny, because at my school we view it exactly the opposite. Most of the involuntary CS's were EE's who couldn't handle all of the math. I don't know of a single person who has switched from CS to EE. All I ever see are the EE's going to CompE or to CS.
Now I'm not saying that CS is easy, but it is definitely less math oriented than EE or even CompE. I've taken CS classes and about the only math that was used was inductive proofs and simple efficiency of algorithms. While in EE we routinely use higher math such as Laplace and Fourier Transforms for frequency analysis.
At my school it only takes two extra math clasees beyond what the EE dept requires in order to complete a math minor. I would hardly consider that to be a CS without all the math.
But as advise to the student, I would say what most other people have said. If you want to be a programmer or are-not-very-good-at/don't-like math go for the CS degree. If you like math and would like to learn more about the hardware side as well as learning to program go for the CompE.
I am majoring in electrical engineering and biomedical engineering at a pretty competitive, primarily engineering school. I have a few friends that are doing both Computer Science and Computer Engineering. The required classes for the two majors overlap a bit, and the Computer Science degree is pretty flexible so that you can fit in all the engineering classes. If you can handle it, this seems like it offers the best of both worlds. After four years, you leave with a diploma that says Computer Science and Computer Engineering. Then, you are free to make up your decision after school and concentrate on whatever you like better. Just my opinion. I won't lie and say that it is easy.
~dan
while not entirely irrelevant, there are things more important than major. for instance if i had it all to do over again i would have gone to florida state. i don't know if they have much of an ee dept. but i know there are a ton of women there. for the love of god before choosing a school LOOK AT THE FEMALE:MALE RATIO. don't take one worse than 1:1 for the whole school, and try to get one with a good ratio in the engineering school. i know mine was something like 1 female per 30 males. thats the one thing i really feel that i underestimated going in.
No blubber head!
Pie Iesu domine, dona eis requiem.!
The Black Knight always triumphs! Have at you! Come on, then. Oh. Oh, I see. Running away, eh? You yellow bastards! Come back here and take what's coming to you. I'll bite your legs off!
Constitutional rights may be respected, repealed, or modified; but they must never be ignored.
.. which I haven't seen made yet, is this:
If you decide take the computer engineering route, you'll take a lot of computer science classes. I don't know that this is true for all schools, but it is at the University of Manitoba, and a few other Canadian schools.
If you take comp-eng, you'll end up with a decent knowledge of programming (here: almost all first and second-level programming courses). If you take compsci, you won't have to take a lot/any comp-eng courses.
Best of luck in whatever you choose. Usually, you can do your first year and take courses which allow you to continue down either path.
Cheers,
Jarett
www.escape.ca/~hush
Computer Science really is software. You take classes in Java, C++/Data Structures, Compilers, CS Theory (Math on Crack), Networking, and other bunches of fun things.
Computer Engineering is within the Electrical & Computer Engineering Department - U of I feels these degrees are close enough to combine them into one department, though you only major in either Electrical of Computer. You take classes in Analog & Digital Signal Processing, "Solid State Electronic Devices", and lots of ECE Theory (Electricity and Magnetism on Crack).
Both of these majors are within Engineering, meaning lots of math, physics, and chemistry. The best advice is to get a course guide/Programs of Study guide and see what each major takes and go from there. Also, remember.... many departments offer a minor, so you can major in one and minor in another - a lot of the classes will overlap.
- Jason Wong
Sophomore in Computer Science
Go Illini! (or something...)
Some quick background - my Bachelors and Master's are in Electrical/Electronic Engineering, and I'm currently studying towards a PhD in Biomedical Engineering.
Perhaps the most sound (and the most difficult) strategy is to know yourself. Understand what set of criteria is important to you in a career (job type, job satisfaction, renumeration, status, security) and match this against what your perceptions of Computer Engineering / Computer Science are.
In some important respects, the two disciplines share (obviously) a similar backdrop (think of surgeons vs internists in medicine perhaps - with engineers mapping to the surgeons, and scientists mapping to the internists). Some basic training will overlap, but the specialised learning, and more importantly the the mind-set, you'll leave each with can differ tremendously.
I think it's simplistic and limiting to class computer science as "software" and computer engineering as "hardware". Indeed, you can study computer "science" and finish up hardly being able to string two statements together in C. Likewise, you can study computer "engineering" and hardly be able to solder a resistor to a "breadboard" (sort of descriptive of me :-)). Ironically, you'll probably be able to string together C code, though.
You should perhaps consider that computer engineering is traditionally a specialisation of electronic engineering (and here I use electrical/electronic engineering interchageably).
Electronic Engineering is concerned with the processing of energy/information. Whether this energy is electron based, optic-based, is largely irrelevant. What is important is how can you use/manipulate this to solve problems.
Electronic Engineering, historically, grew primarily from physics and applied mathematics - and you don't often need to scratch the discipline too deeply to find that lineage still flows strong. Indeed, at least where I studied, EE at times seemed more mathematics than anything else. Practically every course had a mathematical undertone: signal processing was all about probablity and information theory, control systems was about linear differential mathematics, electronics lost itself in the physics of transistors, optics was mostly algebra, and then of course there were the more "pure" maths courses. Hell, now that I think about it electromagnetism and its love of Maxwell's equations matched anything that I've seen physicists grapple with when talking about relativity.
In terms of "practical" hands-on mucking about with circuits and the such, we had very little. One formal course of electronic design in my third year - and otherwise mostly in the assorted lab courses here and there. I should add that where I studied, the course offered a wide range of electives - had I the inclination I certainly could have jumped into hardware with both feet (and elbows, and the odd eyeball). Even courses on high speed circuitry and microwave antennas were all done on computer in simulations and the like.
Note, that I consider this a Good Thing. University study is not about trade certification. The moment you wed a degree to a particular technology you suddenly assign your knowledge a life-span that extends only as long as the technology is in vogue.
I cannot speak much about Computer Science. Its lineage stems strongly from studies of logic and philosophy. Despite what other slashdotters have posted, in my experience and the CS students I knew, it didn't hold a candle to the mathematics we as EE students had to suffer. And of course CS considers itself a *pure* science as opposed to engineering (which simply stated considers itself an *applied* science).
Scientists are more concerned with *why* things work, engineers with *how* things work - this makes scientists good at analysis and processing, and engineers good at synthesis and creativity.
Note that being highly creative is not necessarily a good trait in a scientist, while you can hardly be a good engineer without being creative. Remember, creativity is *not* the same thing as intelligence - a creative individual often implies intelligence as well. The converse does not always hold.
I remember that the EE students would often (perhaps unfairly) scorn the CS students. We (as EEs) would often be given problems that had to obviously be solved on computer, yet had no formal computer programming courses (this I considered a Bad Thing). We simply were expected to be able to program, or teach ourselves enough to get the task done. The CS students often had several formal classes in programming, yet little concern or understanding of practical considerations. A running joke was that an EE's program would be a jumbled mess of garbage that worked like lightning, a CS's source code would be 2/3 comments and the rest wouldn't work anyway. Several EEs that I knew programmed circles around anything that moved. Several also shouldn't have been allowed near a keyboard if the fate of the planet depended on it.
To this day, a lot of "pure" CS people that I know have little understanding about the actual implications of their coding styles. Elegance for the sake of elegance is a hindrance when down at the machine level you end up clogging the system down because you have no concept of how your code actually ends up shunting electrons around.
I don't know if this answers your question. EE/CE is IMHO more difficult than CS. Of course, you also have a much broader base of study doing EE/CE, and will deal with more than "just software". More than anything, I'd say that EE/CE taught me "how to think". How to approach and solve problems in a practical real world manner. I wasn't (and still am not) the kind of guy who'd be happy with a soldering iron, breadboad, and nest of components scattered about, up to my eyeballs in "hardware". If this is what you think Engineering entails, you have a misconception.
If you're up to the challenge, take the engineering track!
Then to McMaster University for Computer Science under the Faculty of Science. Still lots of math more science (duh!) and only a little CS
On to Mohawk College for Computer Electronics Engineering Technology Co-op. Very structured program heavy on the electronics, light on math, so-so on programming. Graduated (w/Honours even!)
Present: Lakehead Univeristy for Software Engineering. Transfer program into third year from College. Heavier math than College. Still some electronics and some CS courses (About 35%/65% split)
Which is better? I have no idea. Software Engineering will allow me to become a P. Eng. however Software engineering is still in a state of flux. No two schools seem to agree on what SE is. In my experience, engineering had a heavier course load and less flexibility than a CS program.
Best of luck. Lnical
I am currently a junior in the computer engineering major at my university, and I had been thinking for a while whether or not I want to switch to computer science. I've loved programming since I was 12, and it's what I really like doing. Hardware seems neat, but it's not really where I have my passion. I came into college after hearing the same vague things you've heard and decided to do the CE route. For the first two years I've taken engineering courses, which means a lot of physics, math, and a lot of electrical engineering courses. At the beginning of this year, I was about ready to switch to CompSci only because it's been two and a half years, and I still haven't taken any computer programming classes (skipped all the lower level ones), and it's been nothing but hard work in Electrical Engineering courses. CE / EE / Any engineering majors are very intensive. There's a lot of physics (3 classes), a lot of math (up to calculus III and beyond) and a lot of hardware design courses. But finally, in the second semester of my junior year, I finally feel comfortable in my major.
Right now I'm designing a small embedded CPU in hardware, learning about fundamental OS theory and design, fundamentals of programming languages, and next semester compilers and real OS's. Great stuff... but it took 2 and a half years of insane amounts of work to get here. I know I could've dropped out and taken the easy route of CompSci sophmore year, and it would have been so much easier. But I stuck it out, and I'm glad. CompSci deals with a lot of algorithms and math, but any Engineering has a few less algorithms and a whole lot more of everything else.
For me, it came down to the challenge. My easy way out was CompSci, where I could've taken the courses that I liked and learned what I wanted to, but everything would have come very easily to me. But I chose CompEngineering, where almost all the courses where very challenging and tested me not only in aptitude for learning, but also in dedication and motivation. And now in my second half of my junior year, with the 20 other people that stayed in the program, I'm finally happy with my major.
That's the college perspective, from one CE. But as far as job experience for me, it's been a piece of cake to walk into any job and know I can do it... not only the programming, but a whole lot more because of my education. I've been working as a web applications (database integration) programmer, will be working soon as a standard MFC / C++ programmer in the summer, and hope to get into some think tank / theoretical research in computers at some point. Having a hardware background and having designed (and built, not just studied) a computer from resistor to CPU to OS to Compiler, will be for me a huge advantage. At least, I hope so. Check back with me in 8 years, I'll know by then.
And good luck in college.
James
At a lot of universities, computer engineering is not much more than electrical engineer plus some computer science thrown in. The "pure" computer engineering classes will be some 4th year electives. Not matter how much a purist might jump up and down and scream "That's not computer science! That definition is waaayy to simplistic!" this is simply not the way most universities treat it. And that's the kind of education you should expect. I'm sure there are some individual universities with some expert staff members who really make computer engineering seem like a whole world of its own, but this is the exception.
"Love heals scars love left." -- Henry Rollins
I've always seen the difference 'twixt the two to be the same as any scientist vs. engineer classification. The Scientist is the one who plays with theories, runs experiments, tries to figure out why it works, etc. The Engineer is the one who tries to figure out how it works, and how it can be usefully applied. In the Computer Realm (as a Bachelor of _Arts_ recipient in Computer Science), I've always seen Computer Science as that branch which deals with theories such as compiler optimization, artificial intelligence, database organization, interface design ,etc; where as Computer Engineering had more to do with implementations of things, i.e. code organization, fragment reuse, hardware interfacing, data manipulation, and so on and so on. From what I've seen, generally speaking, both branches fall under the generic moniker of "Computer Science Degree" so it behooves you to go after that which makes you happy (good rule of thumb in any situation). Given the fact that most colleges don't require you to declare a major until about halfway through, start by taking those basic classes which are common to both, and dabble in a few electives on wither side of the fence. You'll be in a better position to decide which way you want to go, and feel less like you stuck yourself in a bad situation. And don't forget to spread tings out so you can taste the rich banquet of classes that College Life offers. You may decide that you were only interested in computers for the money, but that history (or philosophy, et al) is your true passion and calling. Not to say you can't have a computer vocation as well, but do what makes you happy, you'll feel better in the long run.
"Is this not a rare fellow, my lord? He's as good at any thing, and yet a fool." -from "As You Like It", Act 5,
My opinion of the two are:
If you want to build and design computer chips, circuitboards, motherboards, controllers, and the like CmpE is the right route - it is essentially Electrical Engineering with some componentized classes that they don't get. What I mean there is while EE's usually focus on building components, CmpE's focus on building things with the components (ie, putting together a computer). There is a LOT of overlap - my classes followed the same track as EE in 80% of the classes (all non-electives, to be exact).
CSci and CmpE overlap in one major area - writing of microcode (the actions on a chip that make up an assembly instruction). I know both CSci people and CmpE people who do this for a living.
CSci focuses primarily on high level coding, with a couple of delves into assembly code and other low level languages. The purpose is to get people writing readable structured code that is maintainable and teaching students to work as a team to develop code (at least in the last year). I was a graphics and UI specialist, so I like my code pretty high level, which also explains why I didn't do so well in CmpE.
Computer Science = some academician writing really awful java code
Computer Engineering = some CTO lying through his teeth about architecture
chose
--
in this age of communication i'm just not getting through
Let me share what I've seen at my school with ECE vs. CS majors, and their experiences with hardware/architecture.
I expect that which major - ECE vs CS - you choose will depend largely upon how the individual school structures their programs. At Carnegie Mellon, where I am currently a senior, those interested in hardware and architecture design would do best to major in ECE, as that is where much more emphasis/coursework is to be had in those areas.
Keep in mind that if you try hard enough, you can probably get away with being a CS major and taking the hardware courses through the ECE Dept, it's just harder due to prerequisites. Similarly, you can be an ECE major and take the stereotypically CS courses. Which says something about the flexibility about both programs here (both programs are among the best in the nation) but I don't know how flexible other schools may be with that. YMMV.
The reason, it seems to me, that there is debate about which is better for a given interest is because there is significant overlap between the two fields. People in both areas have to know the basics of hardware and software, just because each has to interact with the other. Which aspect you want to specialize in will probably determine your choice of major. I chose to major in ECE because I didn't know which path I wanted to take; it's looking now more like software, so I'm taking a bunch of CS classes, but I find my hardware background to be very valuable in my software work as well. I don't think I'd have been as well prepared if I had started in CS and tried to migrate towards hardware.
So my advice to someone choosing a major:
1. Check how your school of choice structures their program. Maybe even try to contact faculty at the school, and ask them questions. This more than anything will help you figure out which would best match your interests.
2. If that doesn't give enough info to make your choice, go into CE. It will give you a broad foundation from which you can easily migrate to CS if you later find that's what you want.
dont think the difference between Electrical Engineering, Computer Engineering and ?normal? Computer Science is that confusing. As one poster said:
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.
This is pretty close to the truth unless you get into the Computer Science options.
At my school ( Lakehead University ) we have the following options in Computer Science : Science Option: This program has a lot of classes in programming
Business Option: CS classes mixed with business classes. This makes you into more of an "IT" person.
Hardware Option: Lost of hardware classes with lots of programming class mixed in. (This option kinda blurs the line between Computer Engineering and Comp. Sci. )
Oh and to top it all off we now have a software engineering option under the engineering faculty !
This even further confuses students because now they don't know if they want to be a Computer Engineer, Software Engineer or a Computer Scientist.
This decision for me wasn't much of a problem because Lakehead decided to remove most of the Computer Science classes out of the Software Engineering faculty and replace them with Electrical Engineering classes. Since I wanted to be a programmer/sys. admin I simply transfered to Comp. Sci from the 'Software' Engineering faculity. This IMVHO makes the Software Engineers here less Software Engineers and more Electrical Engineers that have done a little bit more programming than the normal EE. This seems to be similar to what many Canadian universities have done so soon we are going to see a bunch of so called Software Engineers in the marketplace who don't know much about software development at all.
Does anyone else have any comments on the difference between Software Engineers, Computer Engineers and Comp. Science students?
The answer to your question is not as clear-cut as you would like. The answer really depends on the universities that you are considering, as I'm sure each one has a slightly different definition of "Computer Engineering". To make matters worse, companies suffer the same lack of uniformity in defining these titles.
:-)
Generically speaking, you have five (or more, depending on how you break things down) different types of technical folks involved with computer development (both hardware & software):
1) Electrical Engineers (EE): deal with things like designing processors, peripheral equipment (video cards, sound cards, hard drives, etc.) & physical networking medium. You can think of these folks as designing the actual physical boxes that sit on your desk. (There are also scads of other engineering disciplines involved in designing the actual boxes: Chemical, Materials, Mechanical/Heat-Transfer, but you aren't interested in those, right?
2) Computer Scientists (CS): covers a wide range of job responsibilities. Computer Scientists can do just about anything related to software. That said, most people I know who call themselves Computer Scientists prefer to work on low-level software that is algorithm intensive. Typical examples include operating system kernels, networking protocols (network through session or presentation layers on the OSI model), system libraries, programming language development, compiler design, numerically intensive applications, just to name a few.
3) Computer Engineers (CE): typically act as the glue between the hardcore hardware geeks (Electrical Engineers) and hardcore software geeks (Computer Scientists). Your typical Computer Engineer integrates hardware and software, and as such has to be conversant in both (to a point). Computer Engineers might design hardware (say, a disk controller), or software (a RAID driver) or both. Some computer engineers also get involved in higher-level hardware design (like designing a system architecture, with the low-level software needed to support it). A lot of Computer Engineers get involved with embedded applications (automobile computers, robotics, networking cards, etc.).
4) Software Engineers (SE): this is a VERY broad brush to paint people with. I know Software Engineers (by title) who write operating system code, and I know some who write no code, but are more involved with large software system architectures & project management. In the academic sense, Software Engineers typically operate at the highest level: designing large software systems, implementing quality control schemes & doing very little (if any) coding. In my (limited) industry experience, Software Engineers are typically applications programmers who dabble in the activities that define an "academic" Software Engineer.
5) Information Technology (IT): this is newer, and even less defined than Software Engineering. IT people do a range of activities: maintaining corporate networks, system administration, web design, database administration, help desk staffing, software testing/verification, programming, etc. This is really a catchall for things that don't fit in other categories.
Electrical Engineering and Computer Science are relatively straightforward, in that most schools have these departments by name. Computer Engineering usually falls under the auspices of one of these two. In my experience Computer Engineering is more often mated with EE in schools with stronger engineering programs, while the reverse is true of schools that have stronger science programs.
Software Engineering is not, in my experience, available as a named major to undergraduates, though it is increasingly popular as a graduate major. Typically, Software Engineering-type courses will be offered by a Computer Science department, but not always (this was not the case at RPI, where I went to school). If your ultimate goal is to become a Software Engineer (as described above), your best bet is to major in Computer Science and take a long, hard look at courses offered by the EE/CE department.
IT is a fledgling major at schools that do offer it (which I don't think is too many). At RPI it was (is?) largely a joke: basically CS for those who can't hack CS. This might not be true anymore at RPI, or at other schools (but I doubt it).
My advice is to delay declaring a major as long as possible. Most universities won't make you do it until you are a junior. By then you should have experienced enough to make up your mind.
Good luck!.
Think a bit outside the box... My major is Liberal Studies.. My "foreign" languages were Cobol, Pascal, "C" (hey, this was a long time ago....) I built my major by combining Liberal Studies and CS.... I have worked in Aerospace, as a Software Engineer, a SysAdmin, and a Computer Security "Expert" Now I work at University, as a Technology Administrator, for the Liberal Arts College/School - SysAdmin, chief cook and bootle washer over all things Techy.... "The Degree" for what it was worth - gave me people skills, writing skills, and other social skills that were more "key" than a straight "CS" , "CE", or "CIS" type degree would have. Not your Average "TechHead" but just a bit more....
I majored in physics. I later went back and did CS as a graduate student. The amount of useful theoretical stuff I learned about grammars, complexity theory, semaphores, analysis of algorithms, language design and so on during that time has stood the test of time and informed everything I've ever done from then on. The theory books still remain on my shelves after thousands of System X49.J33 Unleashed! books have been consigned to the dustbin of history.
The point of going to university is to get an education, not do an apprenticeship.
There have been programs using Software Engineering at the core of the program for years; RIT is WRONG about being the first. Being a Software Engineer (_not_ a programmer) I have found that most companies have little use for Software Engineering. Most of my time is spent writing code, not engineering it. What they are really looking for are programmers that can crank out working source at a high rate -- regardless of quality. This is EXACTLY the shortsighted mentality that delivers the usual mediocre code year after year. I digress... If you're looking to get the degree, decide which you're most interested in, programming, engineering of software, or hardware, and from there you can target CS, CSE or CE respectively.
Just because you write code, doesn't mean your an engineer. Unless you also drive a train...
Math is hard?
I am realizing I made a terrible mistake going into "computer science".
First off, it's considered a "weak science" -- that is, much easier than physics, chemistry, mech/elec engineering to get a degree.
Just read anything in the trade journals regarding Sun, MS, Microsoft. "no coding required" is the watchword of the day.
I was at a tech fair several months ago -- I saw some vidcap systems on display. After playing with the software for awhile, I mentioned to the sales person that the gui felt "like something from the eighties" and had a lot of grammar errors in the english.
He proudly stated that they had moved all programming to India and "saved a bundle" of money.
Now, do you really want anything to do with programming when India and Chinese outsourcing is on the rise? If you specialize in something like moving shops overseas, you'll do well in the coming years, but the corporations, public opinion and US government view "programmers" as *way overpaid* and "losers" (personality wise).
Do yourself a favor -- do as much hardcore math, physics and chemistry as possible and try to stay away from programming.
Most of the corporate jobsites are heavily padded to make it look like there is a massive shortage of programmers. My brother worked for a company that had hundreds of programming openings on their website -- yet never hired anyone. It's a scam to pressure the government into opening more visa opportunities and easing outsourcing regulations.
In fact, you may want to consider getting out of the sciences altogether. Much of engineering and programming is going to move overeas in the next couple decades.
Don't just take my word for it...research what's really happening in the sciences. Unless you're really a gifted engineer, you may not like what's coming up.
Treatment, not tyranny. End the drug war and free our American POWs.
See my user info for links.
Many schools have alot of overlap anyway, see if it's possible to do both. Like someone else said, hold out on declaring a major right away, and see what you think (by talking to others in the program). Different programs at different schools can be quite a bit different. You sound like you really like computers, so why try to limit yourself? See how easy it would be to do a double major in CE and CS. You will have to plan your courses a little more carefully so they are the ones that overlap (e.g., an extra electrodynamics class may count for CE but not for CS), but in general it will increase your graduation time by AT MOST one semester, and often you will still graduate in the same timeframe with proper planning. At UW-Madison, the difference is as little as 2 classes with proper planning. Someone below had an accurate description - Computer Engineering seems to be the medium between EE and CS. It is inaccurate to say CE is "hardware" and CS is software - it is more accurate to say EE is hardware and CS is software, and CE is some of both. I wouldn't say any of the 3 are "harder" or more important, but I can tell you that you can get a job across different areas if you have exposure to both HW and SW. If you are more interested in SW, take more CSci classes as electives. I advocate trying to do both because most programs have alot of flexibility and required BS classes - if you try a double-major for example, you may only have to take a couple more classes, and most of your electives will be computer classes instead of wasting your time. *To those liberal arts people - I can pick up any book I want about history and read it any day of the week. Sure, I can read about HW and SW, but I don't have access to the fancy expensive equipment. That's the only way I can fully justify the cost of college.* Many of the responses are people who haven't finished their programs yet. As a recent graduate and participant in many interviews and job offers, I can tell you that if you have studied both hardware and software (regardless of your official major - e.g, you could be a CS major with some extra EE or CE classes), you WILL get offers from both sides, and they are very comparable in pay. But if you can get CE and CS, you will have all your bases covered. Plus, being able to interview with twice as many companies means twice as many free trips!
My article which you have thoughtfully labelled a troll was NOT.
Is every dissenting opinion a troll? If you think that, then why not just censor the internet for every idea that you disagree with?
The article that I posted which started this thread should either be left alone, or marked +1 insightful.
You can moderate this article either +1 insightful, -1 flamebait, or -1 offtopic, take your pick.
If tits were wings it'd be flying around.
There is no consistantly applied definition of what Computer Engineering is. In some schools it is a minor variation on CS, in other schools it is a minor variation on EE. And there are plenty of schools in between.
Confused? Well, so are employeers. They don't know what Computer Engineering is supposed to be either. That's bad. Confused employers are less likely to hire you.
So, don't confuse them. If you want to do hardware, go with EE. If you want software, go with CS. If you're not sure, get the EE, it's the more flexible of the two. (EE's can and do write software. Few CS's build chips)
I'm a CE grad. I do hardware. Long ago, I gave up trying to explain what Computer Engineering means. I just tell them I'm a EE.
Anyway, I'm a soon-to-be graduate of a Computer Engineering program, and I think your question is an important one. However, there doesn't seem to be one solid definition of Computer Engineering vs Computer Science, so I'm going to have to go on what I've seen.
At the school I go to, engineering students do more math than computer science students, hands-down. Calculus, Statistics, Differential Equations, and Linear Algebra are requirements; CS majors only need Calc and DiffEq's OR Linear Algebra OR Stats... While CompEng majors have to take the hardest classes of CS (Discrete Structures, Operating Systems, Software Engineering, etc) plus programming courses, plus all of our Electrical Engineering core classes except for field and wave theory...
It all depends on what you want to DO after school. I work mostly in math and numerical analysis. I know CE majors who are webmonkeys and CE majors who are ASIC designers... At least with our program, there's a lot of leeway. And I've worked jobs from microelectronics to contract software development, so (my bias here) I think engineering prepares you more broadly for a large array of jobs. Still, if you love to program, a CS major is (in many ways) easier, and gives much more programming practice...
seven two six five
seven four six one seven
two six four two e
3: ability to produce solutions in some problem domain; "the skill of a well-trained boxer"; "the science of pugilism" [syn: skill]
... the body of knowledge acquired through systematic (reproducible) study.
In the term "computer science" it's got mostly defintion 3 above.
The "ability to produce solutions in some problem domain" is horribly vague. This is an example of popular culture affecting language. Babe Ruth wasn't a "brilliant scientist," regardless of the fact that he was great at solving the problems of baseball, because his "experiments" were not reproducable and he didn't set down any theory that could be disproven. The first definition nails it
The third definition describes "skill." This is generally relegated to the airy notion of "indescribable aptitude."
In short, to be skilled is not necessarily to be scientific.
PS: You wind up saying that CS should be classified as a branch of mathematics but, as can be seen by reading the first definition of "science" in your post, this means that CS isn't a science.
____________________
___
The ends are ape-chosen, only the means are man's. -- Aldous Huxley
The University of Michigan has a page devoted to this very topic. It may be just for that school, but it will probably be informative. It is
http://www.eecs.umich.edu/cse/diff2.html
/whois John Galt
Today is the closing of a parenthesis opened before this sig, before this story, before this existence that is me (as if
Here in Canada, the general impression I get is that Comp. Eng. degrees are much more applied, and yeah, do involve hardware more. Some people like that more, some do not. I find "applied" math courses detestable, but that's just me :)
Many people make the argument that a more theoretical background is more robust, if you've got a neuron or two to rub together. If you can figure out how to use all the theoretical stuff you're taught, you can use it anywhere. Whereas if you just learn how to do one thing, you have to be able to extrapolate the theory to apply it elsewhere. It depends how you think, I suppose. Can you extrapolate the theory behind things? Is that easier from simply being taught the theory for you? I think those are the most important questions when deciding between Comp. Sci. and Comp. Eng.
NEway, back to *Canadian* universities. Here the Engineering programs are renowned for trying to royally screw students in their first year, in a sort of "weeding out" process. The Comp. Sci. programs do it too, but to a lesser extent. If that doesn't sound appealing to you, you might wanna move more toward Comp. Sci. There's nothing stopping you from doing a graduate degree in Comp. Eng. after, either.
Maybe this is all redundant.. if it is, sorry!
"Caffeine is not an option. Caffeine is a way of life."
The answer is not clear cut and depends on the school. At some Universities Computer Science is under the school of Computer Science and Computer Engineering is under the School of Engineering. In many cases the core courses are the same but the pheripheral courses are not. A good comparison is a Degree in Physics and a Degree in Engineering Physics. In Engineering Physics, engineering (technical) courses were substituted for German and some of the humanities. My roommate at Cal Berkley switched for Physics to Engineering Physics when he discovered he could not pass the foreign language (German). In Computer Engineering you will probably get at least an additional 8 units of core Differential Equations plus Properties of Materials, Mechanics, and more Chemistry. If the school is very large (like Cal Berkeley) there will be multiple majors within each degree and their electives will be substantially different. For instance, subjects like communication theory (routers, gateways, switches) are more likely to be under Computer Science than Computer Engineering. Unfortunately there is no national standard so the school's course of study must be considered. For instance both UTD (University of Texas, Dallas) and UNT (University of North Texas) give a drgree in Computer Science with almost no common subject material. Good Luck.
If you're good at math and physics, CE might be for you, because theres quite a bit more in that than CS (though CS still requires some math, perhaps physics depending on your university)
-
As a college freshman and an Information Technology major (that's my plan, anyway), this topic and the ensuing conversation is a great help to me. I have long been interested in Computer Science and Computer Engineering, but I've never really known the specifics of the two. (I've never really bothered to look.)
Majoring in Information Technology, I get a more basic computer education that applies to the business world, but I'm not sure if that's all I want. Besides, I know all the basics. I've been looking for a major (or two or three) to add to Information Technology... Business Management is a good one for anyone to have, for that prepares you for and all but plants you in the business world. I've considered education, journalism, and philosophy and psychology, but the lattest two are the only that really interest me.
What's a college freshman to do? I'm just sticking to my classes, watching the technology world to make sure I'm not setting myself up for a field that won't exist, and, for the most part, just enjoying myself.
We should all just enjoy ourselves.
I think its been brushed upon but not really stated, but CPE is much more closely related to EE than it is to CS. The fact is, engineers take more math and many more physical sciences than CS people. CPE is very closely related to EE in the fact that CPE is EE but much more focused on the design of transistors and hardware. Of course CPE people must learn software, but it is nowhere near as in depth as CS. CPE and CS people get hired for the same type of jobs, however the focus of the degrees in my opinion is much much different than portrayed here. CPE is engineering. CS is not. The difference between engineering and non engineering degrees is HUGE.
(Subject changed to reflect varying schools' abbreviations)
So here's one way to decide: What did you play with as a kid (or right now, for that matter)?
Choose one:
[ ] "I learned BASIC, asm, and C." Congratulations. You are a CS major.
[ ] "I tore apart radios and used Radio Shack 'x projects in one' kits." Congratulations. You are a CpE (or possibly just plain EE) major.
It might just be that easy.
I can guarantee you that you will hardy ever, EVER touch the inside of a computer at a 4 year school. If hardware is what you want then go to a community college first for a year or 2 and then go to a 4 year school for programming and logic and stuff. There's a lot of 2 year schools that offer Cisco training and certification as well as microsoft cert and stuff.
"A plan fiendishly clever in its intricacies"- Homer Simpson
Double major. Sure, you'll get stuck with tons of work, but you'll also have twice the experience as anyone else. Or consider a course load that mixes the two, like embedded comptuer systems. What you'll find in college is that a lot of people sign up to major in computer science and end up dropping it because they just can't do it or they don't want to spend the time to try to do it. Computer science isn't bad, but electrical engineering or computer engineering involves a lot of work. I'm double majoring for a few reasons. One is to just prove that I can do it. The other is that I could probably teach myself everything they would ever teach me about computer science here. So, I figured I didn't know anything about EE/CE but I was interested. I figure if I can't handle EE, I can fall back to CS without having to play catch up with courses. PLus, I'll have twice the job opportunities in theory. And maybe I could end up working for a company similiar to Transmeta, somewhere that blends CS and EE/CE.
All this talk of hardware vs software is to a degree true, but you are overlooking the underlying themes of the majors.
Computer Scientists are just that, scientists. They deal with the theory behind programs and the programming method. Sure, a computer engineer can do this too, but for the most part, CS majors deal with the theory of computing.
Engineers take theoretical ideas and concepts, and integrate them into real world situations. If you want to build a new OS, you'll talk to a computer engineer, but in the end (most likely) a computer scientist will do the programming.
Being a computer engineer (at purdue) and knowing many CS majors, I have seen what classes and such are offered. I myself am going the course of software engineering, which means I have to be (for the most part) extremely proficient in programming, yet the core classes still deal with high level math, circuit analysis, and logic design.
So, if you want to sit and code all day, then by all means, take up CS. However, if you want to be able to do more than just program (though still program if you see it fit to) the CompE is the way to go.
-Wallace
"I am Jack's complete lack of suprise." -Fight Club
"Desparate enough to hire a computer engineer instead" ? Say what? I hate to break it to you but the only thing that would keep a company from hiring cmpE over cmpSci is that they'll have to pay the cmpE person more. CmpEngrs are worth more in the market today, and will be for a while, I'm sure. In my experience, the computer engineering program at most schools is more rigorous. You'll get most of the stuff that comp sci gets, plus a solid foundation in EE as well. Downside? It'll probably be more difficult. It might even require more credits to graduate. So what. At least you wouldn't end up as a software weenie in the end.
I can't believe so many people have this misconception. Computer science is not programming. Software engineering is programming. It's the same as physics and mechanical engineering: one side deals w/ theory, the other side deals with application. Unfortunately, colleges and universities have not (as a whole) caught on to this little fact, and try to lump the two together. That's when you get professors who are technically brilliant, but horrible programmers; their style rubs off on their students, and everything goes to hell. If you want to be a programmer, don't take CS as your major. Go for engineering or physics or applied math; majors that deal with computations that need to be as fast and accurate as possible.
Yes, my initials are MSN. And I used to live off of Altavista Rd.
Definitely true. When I started taking upper-level mathmatics, I got several comments from professors to the effect of, "Oh, well, we'll be writing actual proofs, not just automating the process." One of the things that I really loved about Indiana University's CS program was the explicit aim to teach the students to think. One instructor burned "if all you have is a hammer, everything looks like a nail" into our minds for a semester, which killed any 'favorite language syndrome' in me forever. There were still a lot of 'cookie cutter' programmers in my classes, but I'm convinced that this was despite the instructors'/Professors' best efforts.
I guess the point here (and I should have said this in my earlier post) is that everything I've said has been from my own experience at one school. Things may be considerably different elsewhere.
cheers,
-chris
I'm kind of in the same boat as you. I have no idea if I should go for CS or CE or even option number 3; screw it. Also I'm pretty sure that none of the colleges around here have CS or CE and you have to go to a university for that. But after reading all these posts I've concluded 2 things:
1) alot are biased
2) the whole choice depends on your school
Since the prof can decide what you're going to do and going to learn, and since alot of the less tech savy schools think CS == Visual Basic, go with what seems the best according to the advisors/councelors/proffesors, they know what you're going to learn at your college, everyone else is just guessing.
And of course this informations is comming from a man whose desk is connected to his chair.
I got a B.S in Electrical Engineering: microprocessor design back in 1997 from UW. I never used anything I learned, but the fact that I had a degree at all got me a partnership position at a technical drafting consulting company within three years.
In fact, of the group of friends that I hung out with back in college, only one of four of us (I didn't have very many friends) is doing anything remotely related to their microprocessor design EE degree. What you study isn't as important as the fact that you hold a piece of paper that says you are capable of jumping the hurdles that college throws your way (unless it's a business degree; that just means you drank a lot of beer in college).
Don't do either. Do like I did and get a specialised degree at a school with a 100% placement rate. Right now I'm attending UW Whitewater in Wisconsin, getting my degree in Management Computer Systems (MCS). I just so happen to be getting that degree with a business emphasis, but you could go the more scientific route (more math) as well. Whitewater has been named the top 4-year computing program 6 times by the Association for Information Technology Professionals (AITP), and just redid their curriculum. Forget the other two unless you want to be stuck in a cubicle or working under a computer guy with more seniority. This degree will give you the computer and business skills to not only be the best for the job, but a good leader.
Obviously, this will depend on the school; the levels of supply and demand for each major will depend on the reputation of both the school and the department in question.
Actually, it's not uncommon for new engineering majors to be the *hardest* to get into. Often when a hot new field of study opens up, the initial student demand exceeds the supply of qualified instructors and/or other resources. The response I've seen from some schools is to make the new major a de-facto "honors" major; ie. only those with high GPAs the first few semesters are allowed in.
Of course, if the school has had CPE for a while, or if they are really accepting people into the program from day one, then your strategy may work. Be aware, however, that not all schools make it so easy to transfer from one program to another, especially between technical and non-technical major. By the time you've figured out that you want to switch majors, too many of your credit hours may be in non-transferrable courses.
What separates the men from the boys is experience. I don't care what you say, but merely passing, or even graduating with honors, from any program does not somehow magically confer you the powers of deep understanding. Nor is it true that just because a person is self-taught, that the person cannot have a deep understanding of the subject matter. There simply is no replacement for hard work with the relevant material. I'll readily conceed that taking a particular program can _help_, but it's neither necessary nor is it a guarantee of understanding.
Empirically speaking, I've known people with top grades from the best programs in the country who can't hack their way out of paper bag (or perform other technical tasks). I've also known people that are largely self-taught, but are more capable and committed. There are also numerous counter-examples. Rather than enumerating each and every one, let me just say that you're overgeneralizing. I think your problem is that you confuse the entry level VB-type programmer for all self-taught programmers. This is simply a mistake. That programmer simply has never been exposed to anything more advanced than a couple simple subjects in limited scope. But if the programmer has covered more advanced subjects and written effective code for it, he WILL know his stuff.
If I, as an employer, had my choice between hiring a self-educated programmer with 10 years experience developing operating systems and compilers or a wet behind the ears programmer from any school in the country, everything else bring equal, I'd take the experienced one in a minute. What's more, I suggest to you that virtually any technology that is new and innovative is LARGELY focused around self-education (this is particularly true in engineering). In fact, one of the things that you should have learned in school (but didn't necessarily recieve) is not just about how computers work, but how to teach yourself, how to learn, how to think, discipline, etc.
Comp Eng:
Comp Sc:
The first number in the above subject codes gives the year they are undertaken. As you can see it largely backs up what other posters have been saying regarding Comp Eng. having a larger hardware/electronics/system design emphasis with Comp Sci. emphasising algorithm/programming/internet skills.
However, youll notice I have bolded the last Comp. Eng. point because, IMHO, an important difference b.w. the degrees that has not been emphasised is that Computer Engineers do a final year practical project. This project is 9 months work and is a BIG chunk of your final mark. It is the principal reason a Comp Eng. degree goes for 4 years (vs 3 years for Comp Sc.).
With Comp Sc. there is no final year project. An honours year after you graduate (provided you have the marks) will let you do a project similar to that of a final year Comp Eng. but this means the degree will also go for 4 years.
Computer Engineers get honours based on their final mark. For example at my University a final mark of 77 or greater gives you first class honours. This may seem easy to get but no more than the top 5% of the course attain this mark.
My final point is that I believe the Comp Eng. part of the course has been much harder than the Comp Sc. part. The maths is far more involved and the amount of theory including circuit knowledge is harder to grasp.
But this is just my opinion relating to my particuar University and although my mates at Uni have said similar things, Im sure it does not apply for everybody.
First I wanted to address this elitism I'm sensing from some CE people in here. I've been working in the computer industry for 10 yrs now and graduated as a CS major. Currently I'm doing embedded systems development writing low level diagnostic code for our devices. I work very closely with the hardware and you know what the transition from high level programming to low level hardware interfacing was NOT difficult at all. In fact all of the guys (with the exception of one guy who is an EE) who are doing the embedded work are CS majors. Of course I had to put in my time and read the manuals, download the specs, constantly refer to the blue book for the particular processor we're using etc. but it was not some fsckin genius level stuff that only a CE person could understand. It only took patience, work and interest, with interest being the key to it all. So to answer the main question, take what you're interested in right at this moment because as you go through life you're interests will change and if you're reasonably intelligent (like most geeks are) and patient and open to learning new things thing you can move in which ever direction those interests take you.
If you have the time and interest go for it all. I original wanted to do just EE, but then found out that the college I wanted to go to only had ECE. So thats what I took. Near the end I found out that adding a CS major only required like 4 extra CS classes. So if you really want want it all its not that hard. U of Minnesota, Duluth.
For CPE vs. CS, I doubt it would be much of a problem to switch majors once you've started. I suspect CPE-to-CS might be slightly easier than the reverse, but this is highly dependent on the individual school/program.
Personally, I would try CPE if you're torn between software and hardware; if you know you want to do software, going straight into CS might be a good choice. Also, companies making PC apps or web-apps are more likely to hire CS; those making embedded, networking, or other hardware-intensive products (eg. peripherals with driver software) may favor CPEs, even for purely software positions.
On one extreme end, the high level end, is IS/business majors. They deal with computers in a very "interface" sort of way - they learn how to administer them, set them up, and manage them in general.
Moving down the spectrum is the Computer Science major, my personal preference. They don't deal as much interfacing with machines and programs, but deal more with writing the software that the user will see. This probably covers the biggest amount of area - some deal with the application level, while some go down to the kernel level. CS majors usually have to know about both to understand what's going, but they don't generally learn all the details of the low level hardware. Likewise, they don't bother learning how to set up an Access database - too high level.
At the lowest level are Electrical Engineering majors. From the beginning, they learn how the hardware works, with both analog and digital circuits, transistors, flip-flops, memory, etc. Nothing is really too much detail at this level - you should be able to do ASIC design of hardware by the end. Programming is not a very big part of the study here - one or two courses at most, versus a majority of courses in CS.
CE is an attempt to bridge between CS and EE. They basically take parts of both, without throwing away what's important in either (hopefully).
Hope that helps.
CS emphasizes the theoretical side of computing (programming concepts, logic, etc.) CE emphasizes the technical side of computing (how to get all of those electrons to display a Doom game on your laptop without melting the case). CE majors can generally cross over to CS type work (as I did) without much difficulty, but the same can't be said for CS->CE.
Therefore, if you are still on the fence and aren't afraid of a lot of higher math and science classes, go for the CE major to keep the vast majority of doors open. But if calculus and physics give you convulsions, save yourself a lot of pain and take the CS route.
I'm a student at Southwest Tennessee Community College(<a href="http://www.stcc.cc.tn.us">STCC</a>) (2-year technical), concentrating in UNIX and C/C++, so that I can have some skillz. I'm planning on attending one of the regional universities, such as <a href="http://www.utk.edu">UT Knoxville</a>, and getting a 4-year degree in either programming, sysadmin, or supercomputing.
<br> Any suggestions?
It's important to remember that an engineering education has a certain breadth to it - and a philosophy of study. So do the sciences.
I'm an engineer and I value the training in group problem solving, the cross-discipline looks at civil and mechanical engineering as well as the courses in engineering law. I learned a lot about problem solving in a way that seems different from the computer science curriculums.
The advice to ask questions of students is sound.
Learn to spell jackass! Computer Engineering majors don't right good code, they write code. Computer Scientists write good code because they aren't stupid like you, the person who can't even right code.
>"if all you have is a hammer, everything looks like a nail" into our
>minds for a semester, which killed any 'favorite language syndrome' in
>me forever.
However, if that one language is Fortran . . .
>There were still a lot of 'cookie cutter' programmers in
>my classes, but I'm convinced that this was despite the
>instructors'/Professors' best efforts.
Yep, there's limits
Before the tests, they would ask us, "how do you remember all these fromulas."
We'd stare blankly back. "You're kidding, aren't you? There's 200 in that chapter. Know this one and this one and integrate".
At which point a blank look would be returned . .
I have been reading what people are saying about both majors. I am a CE at the University of Pittsburgh and we take just as many classes at the CS people do in programming. Our engineering school doesn't require all those stupid humanities... So we can take cool classes. 14 Hardware classes and 13 Programming classes.
There are probably some out there who are helpless, but there are also some out there who will RTFM, and teach theirself netware if their job's important to them.
====
I'm a first student at Cal Poly State University.. I've always been interested in electronics (I built robots and an electric car in high school). At the same time, I've always wanted to learn how to program. So, I'm majoring in electrical engineering, and I"m minoring in computer science. This way, I get all the hardware stuff, but at the same time, I'm learning Java and algorithms and everything. Have fun!
My sig's longer than yours.
Bullshit. I write code for a microprocessor with some quasi-DSP functionality. It is software pipelined, filled with all sorts of wierd dependencies, has 1K code space and 1K data space (2K/2K in the newest spin), and has to perform in a precise (to the cycle) realtime manner. There isn't a C-compiler ever made that could turn out assembly code as well-tuned as what is required for this beast to work. This isn't a PC where 90% of theoretical efficiency is good enough (though I doubt any compiler gets that close). Everything is hand coded assembly, and I most certainly do have enormous control over the unit. A lot (dare I say, most) of DSP code is written in much the same manner. A compiled language is rarely good enough for small embedded systems and DSPs with tight realtime requirements that you want to use above and beyond what the chip designers ever thought possible. There are still plenty of jobs around where every bit and every cycle count. -tjb
At least in 1988 to 1992, the difference between computer engineering and electrical engineering was a small handful of classes. CpE required about 6 classes in algorithms and other programming related topics, which replaced EE classes about machines/motors, transmission lines (all the wierd stuff that happens when you don't terminate a cable, like forgetting that 50 ohm resistor on 10BaseT), and a couple more more advanced math classes. Other than switching this small handful of classes, there really weren't any differences between CpE and traditional EE. In the final year of EE, there is some choice about what classes to take, such as control/feedback, communication theory (math), analog electronics, high power systems/circuits, computer/digital architecture, and microcontroller-based design. If you went the CpE route, you'd take the courses in these last two groups.
PJRC: Electronic Projects, 8051 Microcontroller Tools
Since the differences between hardware and software are so foriegn, I recomend a pursuing management.
This was probably posted somewhere in the countless other post, but to get things straight.
Comp. Eng. can't exist without Comp. Sc. and vice versa. When I was doing Comp. Eng I discovered we couldn't do many things without the aid of Comp. Sc. material and most of my friends who did Comp. Sc. agreed that they couldn't do things without the aid of Comp. Eng. material. However most people would agree that you would cover more in Comp. Eng. in comparison to Comp. Sc. as you would be coverting the best of both worlds (electronic and software) however in Comp. Sc. you would cover very little on electronics and focus entirely on software.
In the real world graduates from Comp. Eng. have an easier time getting jobs in either an engineering company or a software company. However Comp. Sc. graduates have the options somewhat limited. However it is only fair to mention that you don't have to severly rack your brains when studying Comp. Sc. since you won't be dealing with complex mathematical theorems and calulating compression algos with nothing more than your calculator.
Well I've stated my case and only you can decide on what you truly want. My opinion? Do Comp. Eng. you won't regret it.
-----
Not a frown. More like a typicle sneer or goofy smile
P.S. There's a town here? ALl I know is what's on the way from University to about Culver.
Albertsons, Campus Plaza, and the F**KING PARKING!
blah
Of course I'm probably giving into a Troll, but it needs to be said.
:)
See, in high school, most people think that Information Science/Technology is where CS majors go when they can't cut it. Unfortunately thats a myth spread by those who are narrow minded.
IST (as we called it in my college) is really a natural growth of of computers. There is more to computers than just hardware and software. Thats what most people break it down into. In truth there is a third component people keep forgetting... the HUMAN.
IST is about information. Information is what humans need. IST majors concentrate on getting information from the computer, to the human being wanting the information.
The problem is with many CS curriculums these days is that they concentrate on theory and mathematics and coding, but they rarely deal with the practicality of creating an interface, designing a database which strong relational integrity, and dealing with humans to figure out what they need.
IST majors deal with this directly. Technically, IST is not as intensive as CS or engineering, but there are other kinds of knowledge other than coding a good recurrive algorythm in C or cracking a code or fixing a bug.
Now these things can be learned by anyone, and usually are learned after college if you don't learn them before. However, its a huge advantage to anyone who comes out of college with that information. Without that information, biases about what makes a good interface or system for the masses usually ends up screwing up your work because no one wants to use it.
Gee... isn't that one of the main problems with Linux now? There isn't an interface easy enough for everyone to use yet so no one wants to use it, BECAUSE YOU CAN'T GET INFORMATION FROM IT IF YOU DON'T KNOW HOW TO USE IT!
Okay, I'm off my high horse
"All great wisdom is contained in .signature files"
Since when has "semi-high level language" been used to describe what you do? Embedded systems and DSP code are no where near high-level.
Its a bit low but I wanted everyone to consider Information Science and Technology. This is all about CS vs CE, but IST is a very viable option and is all too often considered a "BS major" as someone on this list put it.
IST is a very very important field of study, and we need more IST majors or IST thinking people working on Linux. If we do I think we can really give linux a push.
For more read my post about 36 lines down.
"All great wisdom is contained in .signature files"
My advice would be the following: You don't need to decide your major now when you haven't even graduated high school; wait till you get to campus and see and talk to fellow students about the specific courses involved. Pick the major that has the courses you find most stimulating (or has the fewest courses you find annoying/irrelevant).
Now in general, CS guys will never be hired for hardware/EE jobs, while the reverse will happen. This implies that an EE degree might be better (more flexible), but if you're going to work in software at the end of the day, you might as well get the extra software and algorithm experience from the CS degree. As a counter-example, I once interviewed someone with an E.E. for an internet startup I was working at and after looking at the mostly hardware courses he listed on his resume I found myself wondering how much coding experience he really had (we didn't hire him). So an E.E. degree without much software can be a minus.
Personally, I started out as and E.E. and switched to C.S. after taking and hating the first of four analog electronics courses (RLC circuits anyone?) I would have needed to get the E.E. degree. No regrets.
--LP
is it just me or is this same question being repeatedly posted??
A slip of the foot you may soon recover, but a slip of the tongue you may never get over. -Benjamin Franklin
My fault.
I thought you were implying that everything nowadays was written in at least "semi-high level language". Its an implication that bothers me, as quite often I here things like "Nobody programs in assembly anymore" or "A compiler can always beat a human, if you say otherwise you're full of shit".
So depressing, its like myself and other firmware developers are treated like we don't even exist anymore.
-tjb
For the most part, that post holds true. However, claiming "If you aren't good at Math, get a CSc degree" is a mistake. I am a CS major at UCSB, and a quick check at the course catalog shows that CS requires two more quarters of math (vector calculus and probability/statistics) than the CE major. If you aren't good at math, though, you'll have a hard time getting either degree...
or I haven't been clear enough, I'll rectify this now in any case.
...
... well at least we finally agree. The scientific method is the standard by which findings are made. If a scientific experiment is done incorrectly, the results are misinterpreted, or the results cannot be duplicated ... the data is discarded. It's almost like error correction in a modem, it filters out the noise.
I wasn't talking about the difference between science and philosophy, but on how to recognize what is science and what isn't
I know, I brought the difference up because it was implied in your post that you didn't recognize the difference.
(which is, as far as I know, the main issue in the philosophy of science).
Further evidence
In your original post, you stated that people generally regard science as a source of infalliable information, however Newton's own theories have been proven to be not correct.
I didn't say that all scientists spew out infallible information. The important point here is that scientific "theories" (or even scientific "facts") can be disproven.
For example:
"The universe is governed by 'God,' who lives in a place called heaven (which we won't find until we die) and cannot be contacted by mortal man." -- this is an empty assertion (it can't be disproven.)
"For every action there is an equal and opposite reaction." -- this assertion can be disproven.
In one of your other posts, you mentioned something about truth not being important, but rather the pursuit of truth (is important).
You took that out of context. The quote was from a play called "Arcadia." The message was that we're defined by our actions, not our discoveries. You've completely misinterpreted what I said.
in the real world, you simply cannot rely on people's unbiased pursuit of the truth.
Oh geez
In todays economy, where science is for the most part big business, research grants and empolyment opportunities are just two factors that have the potential to skewer the pursuit of truth.
Your mistake here is that you redefine science. If a "scientific experiment" is put forward that makes the case that "cigarette smoking is harmless" then, if it can be disproven, that assertion is thrown out. If a claim is made that cigarette smoking is harmless because God told me but he'll never tell anyone else then obviously the claim can't be proven and it gets thrown out. If the claim uses manufactored data and can't be duplicated by another research team, it gets thrown out.
So would you consider things like Creation Science science? If not, then I don't see how you can stand by this statement.
If you're actually serious when you say this, you must not have read anything I wrote. Just because it has "Science" in its name does NOT make it a science. "Creation Science" makes assertions that are not provable. Therefore it is not a scientific endeavor (just like a lot of things in the world that have "science" appended or prepended to their names.)
I can't really think of too many scenarios where what a computer scientist does is scientific at all.
I agree, that's why I brought this up. I really would like an example of a scientific experiment performed by a "Computer Scientist." I also agree with your statement about "CS" being a branch of mathematics. It would certainly be more accurate to call a CS-major a computician (kind of funny, but more accurate.)
Thank you.
____________________
___
The ends are ape-chosen, only the means are man's. -- Aldous Huxley
and while for the next 2 years I will be taking nothing but MATH and CS classes, at least 2 of those classes will involve computer architecture/logic/design (somethig that CE and EE students also take). I'm in my first of two now... and I gotta admit, I'm glad I'm sticking to the software side =)... okay, no Bill Gates jokes here... but, yeah, as a computer science & math major I'm doing a lot of theory in math, then some theory in CS classes, but in both CS and MATH there is always something to program to make your life easier... oh and to pass the course. anywho, good luck. While I'm sure each major is as challenging as the other, the rewards are well worth the work you put into it.
Being a Computer Engineering Student in Newfoundland, Canada. I felt I had to through my 2 bits worth into this discussion. In my Opinion, a CEng degree has these benifits over CS: 1. Digital Hardware design, we learn alot of hardware design, computer architecture design, etc. This is something I don't see in CS courses. 2. Practical Programming. I find myself learning actuall programming techniques and not just theory, and abstract concepts. I have to do my share of theory as well, but practicality is eminent. 3. Professional Degree. Any engineering degree carries with it the quality of being a professional degree. This means we are a self governed body with a code of ethics that dictate our behavior in the workplace. I think this lends respect and credence to our work that lacks in a non-professional programme. 4. I get to work with companies such as Nortel, Lucent, Cisco, etc. helping to bring the internet revoulution forward. 5. As an engineering student I have the opportunity to broaden my horizines, by having to take courses in mechanical engineering, design classes, etc. I'm not saying that I believe CS degrees are lesser that what I'm doing, but for what I want to do with my career, this was the only choice. Perhaps the abstract theoretical work of a CS major is more appealing to some, but I prefer to get my hands dirty into code, and to have an intimate knowledge of the deep inner workings of the digital hardware. Take what you will from my opinion, but remember it is only that, my opinion, your entitled to your own. Jon
-- Obligatory Blog descramble to e-mail.
CEvsCS
And if you're going to U of M, and you can handle a foreign language, I suggest CS.
Just major in Theoratical Physics, all the advances in Computer Science can from physicsts. The Internet, the web, email, newsgroups, mailing lists, and all the cool stuff in computer science. They need the fast computers and they are the ones who use them first.
Thanks,
Andrew Pinski
This post goes beyond "I program, therefore I am a computer scientist." Please bear with me. You do not need a university if you're motivated and you know what to study. Concrete Mathematics, The Art of Computer Programming, and Introduction to Algorithms make a good list to help you *begin* your studies. Other texts are available, just talk to people who are in the kinds of programs you admire to find out what they use. Read the course requirements for respectable CE/CS courses and pursue the materials that will help you learn the same concepts. You can more strongly specialize or broaden your studies by using pieces of several different courses as your guide. Finally, challenge yourself to create something new & broadly useful. It better be nifty! Be honest with yourself! You do not need someone else to grade your work if you are a real computer scientist. You do need someone else to grade your work if you are a real fiend for money.
CIS, as far as I know stands for "Computer Information Systems" wheeas CS is computer sciance. There's a pretty big diffrence.
Rate me on Picture-rate.com
"and dear god does this website suck now." -- CmdrTaco
Learn math. Calculus, logic, permutations... that sort of thing.
I've read elsewhere in this story about the "my favorite language" syndrome.
Learn how to think first, all the other stuff is just details really. I've always laughed at how people think they're so smart because they know Unix or C but couldn't integrate function to save their life. I felt like saying to them that UNIX/C is downright easy compared to calc/logic (which I'm sure is easy compared to higher math that I haven't taken yet).
Another important thing is that through the process of learning math you just may discover some things about yourself that you didn't know. I discovered that not only could I do math like calculus, but I actually enjoyed it. That surpised the hell out of me.
Just give yourself a chance.
Ask Slashdot: Computer Science vs. Sex?
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: 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."
--
--
"I personal[ly] think Unix is "superior" because on LSD it tastes like Blue." -- jbarnett
Computer Engineering is more structured than computer science. They approach the subject more methodically. You tend to get a more technical outlook on things. (i.e. in networking the engineers look more at numbers such as bandwidth and delay times, where the computer scientists may look more at how the overall TCP/IP structure works). Many of the upper level classes here in Computer Engineering & Computer Science overlap.
Computer Science in general is more "free and artsy" as a friend of mine said the other day. I think computer science people also get more low level experience, although they have plenty of application developing experience also.
Ideas of focus for computer engineers:Software design & designing hardware
Ideas for Computer scientists: programming/software design, graphics, designing & improving algorithms
of course those are just a few...
Have fun whatever you choose!!!!
I go to USC and my major is 'Computer Engineering and Computer Science'. They also offer a Computer Science degree. I take all the courses the computer science degree offers except a class on compiler theory. I also get a lot more EE classes. So as I see it, CE is still concerned with programming & theory, but with the addition of a lot more hardware.
Okay, well, first off, lemme say thanks for posting this question. I'm in the same predicament myself, and I thought about Askin' Slashdot, but I had just assumed it wouldn't get posted. :-)
;-)). So, if you know where you're gonna go all ready, take a close look at the course catalog and see what looks best to you.
:-)
Secondly, a quick question. Are you really gonna read all these posts? I mean, you asked the question and all, but, at last check there was 820+ posts... How do you decide when enough's enough?
For my last cent, I'll try a feeble attempt at actually contributing to the thread. I know about half a million people have all ready said this, but, the course you choose is gonna depend largely on the school you go to. Each school will design the focus of their majors a little differently. For example, at MIT there isn't a "Computer Engineering" degree, instead they have "Computer Science and Electrical Engineering" major (62 for those who care
I'm done.
-------------------------------------------
I like nonsense, it wakes up the brain cells.
-- Dr. Seuss
I went to RPI as an Electrical Engineer. I decided to switch to CE because I was less interested in hardware, more interested in software, and didn't want to take Advanced Calculus at 8 am.
I know many CS people. A lot of CS, to me, is learning a great deal of theory, design and documentation, and languages. Honestly, once you know how to program, a language is a language...its just syntax and such. Although esoteric knowledge of a language comes with practice.
As a CS you can do plenty of things from being a SysAdmin, a Web Bitch, an applications developer, or embedded systems.
As an Engineer, you have to go through all the tortures of Differetial Equations, Thermodynamics, Circuits as well as Data Structures and Algorithms, and other programming classes. In my opinion, a CE can do just a good a job programming as a CS, it all depends on the person.
But quite honestly, what percentage of CS know how to use a 'scope or a logic analyzer? How many CS have done either theoretical or practical work with electric circuits or transistors?
That kind of experience and/or classwork is ideal for embedded systems. Companies pay premium for Engineers that have a honed skill in certain microprocessors or previous background in industries. Embedded systems, I would think, are in much higher usage than web pages or Windows programs. (I bet you couldn't go one day without using embedded systems, unless you are a monk in the Himalays...).
I write firmware and I think a CE degree made me better off for embedded systems.
So it really depends what you want to do and if you want to avoid some hardcore engineering classes.
It worked for me
Good luck!
- and small change got rained on with his own 38
First the differences: Computer scientists take programming classes, lots and lots of programming classes, C,Java,perl,...yadda yadda.. Computer engineering students (that's me!) take about 5 programming classes and a butt load of EE and embedded system classes. I am a sophomore of computer engineering at Worcester Poly tech, to get a degree in computer engineering you need (give or take). 7 calculus classes, a few basic EE classes (resitors, phasors, capacitance...) but then you get to take the fun EE side stuff. Embedded systems, you will learn assembly (AND LIKE IT) probably for the x86 and a few more versions (microprocessors and such). For CS classes you need a few, basic C++, data structures, operating systems, computer architecture, and probably some algorithm classes. Some other fun classes on the EE side of the degree could be VLSI, VHDL, and cryptology. Some of the things we do as ECE (electrical and computer engineering) program a pre-made board with a small microprocessor that controls a keypad, LCD, and Leds. We also have a more advanced lab where you design and program an ISA oscilloscope for the pc, pretty cool stuff if you like the electronics in computers. When you graduate you actually get an EE degree specializing in computer engineering. You are also roughly 4 classes short of a CS minor when you get your BS in ECE. As for a CS degree you will probably learn assembly as a "good things to know" skill but will probably tuck it away with all the other useless crap that you pick up. As a CS major you will be doing most of your programming in (don't flame me, this is just form my understanding) C, C++, and/or java. You will rarely worry about hardware level operations and therefore you are not required to take ANY EE classes. I hope that this has answered your questions some, sorry if I bored you to sleep. **cough** and we make more money**cough**
You describe a circuit in terms of mathematical formulas --- you take each circuit and compose a long equation that describes the circuit, then you solve it. I am talking differential equations, multidimensional calculus, you name it.
If you are trying to design speaker cabinets, for example, you have to figure out what frequency response you want, translate this into a mathematical statement, then optimize these equations with respect to the size, shape, and composition of the cabinets, the electrical characteristics of the speakers, the recommended geometry of the room you want to put them in, etc. etc. etc..
In other words: math, math, and more math. The only difference between electrical engineering and math is that instead of using the variables x, y and z, you use v, r and i.
Computer engineering is just an extension of EE, slanted towards the engineering of computers (instead of power generation and distribution, or digital signal processing, or whatever other specific area of study a particular school offers). You have to learn basic computer stuff such as assembler, etc. but any area of specialization requires taking classes outside the department.
Need a Linux consultant in New Orleans?
Plenty of people have made this point, and I'll agree, whatever degree you get is largely irrelevant, period. When comparing degrees like CS vs CE - almost totally irrelevant. Do whatever interests you, period. I've heard many techie graduates (a few years after they've graduated) say they wished they had taken more liberal arts courses. If you're getting into the computer field, barring some stroke of luck that makes you independently wealthy, you are going to be doing plenty of bit flipping, but the opportunity to wax philisophical over 19th century french literature will almost certainly be diminished.
For me, college was far more than classwork. It was a new time, with new people, doing new things. Classwork comprised only a small part of the pie.
Finally, all I can figure with all this hoopla that seems to spring forth on /. when any sort of "college education as relates to computers" story surfaces is - ego problems. It's amusing.
College can be a great place to get a basis in computer science or engineering. It is by no means the only way, and it NO WAY it is at all sufficient for any sort of challenging problem in computer science. Period. If you're working on non-brain dead projects, you will constantly have to be learning - and I'm not talking about getting better at C++ or learning Cobol-2025 when it becomes the next big thing. Algorithms, logic, math, and all those "Computer Sciency" things.
Which brings me to my main point - it doesn't matter what degree you get from whatever school that covered such 'n so subjects - you've only covered a *fraction* of whats out there, theory and all. People who seem to think a degree auto-dubs you a "Computer Scientist" are amusing. The MOST important thing any formal education can give you is a greater ability to teach yourself, because that's what you're going to be doing most of your life.
As an undergrad in my Computer Engineering program, I was in a computer science course that was required for my major. Our professor (a CS professor) told us that a recruiter asked if he knew of any great CS students who were graduating soon. Our professor said, "How about CpE students?" The recruiter then said, "The only difference between computer scientists and computer engineers is that computer engineers are better."
Isn't Thevenin the evil twin of Norton?
Need a Linux consultant in New Orleans?
Example: Members of my 'team' were evaluating a program that performed like crap on a Sun 450, a nice little 4-way box with 2 or 4gig's of ram. After weeks of testing, a Sun rep as called it and suggested binding some of the processes to it own processor (so less context switching would occur). When I heard this I laughed! I knew that, but the 'experts' who represented the product didn't...... and it then perform much better. So the moral; if you don't know what the hardware can do, you can't stress it or use it and your code to it's maximum potential. (Maybe it was a crappy app to begin with ;)
I have a very small mind and must live with it.
-- E. Dijkstra
Could you provide a link to www.goatse.cx if you're going to mention goatsex so someone new could find out what it's all about?
Don't waste four years on a CS degree. A double Major in CE and MATHEMATICS will pay off. Do a lot of research with the university staff and join the ACM or IEEE societies on campus. You'll be one of the crowd. A few years after graduation, you'll be doing grad research or accepting a tech lead promotion. Your life will be great but you'll have no free time to spend the 4% raise you get each year. Oh, there's no overtime but you get an suitable bonus.
I guess that skipping college and starting your own business is out of the question since you posted that question on the board.
i'm in my third year at the university of texas. i came in as an computer engineer and studied it for 2 full years. i was well into the upper division classes (thanks to multiple ap tests). i then decided to change majors to computer science, and haven't been happier since.
why change when i was so far into the ce curriculum? simply put, i wasn't happy there. i could care less about the inner workings of a transistor or about the electromagnetics of an antennea. instead, i'm now taking classes such as abstract data types, computer organization, and analysis of programs (the fun theoretical stuff) and i'm loving it.
bottom line is, don't do what the comanies are looking for and what others are telling you. fact of the matter is, you keep your grades up and you'll be hired regardless of your choice. do what you want to do. if you want to concentrate on programming (coding) and the science of programming (algorithms and theories), go with computer science. if instead, you'd rather build circuits, manipulate digital logic designs, or develop faster memory (for instance), then go with computer engineer.
by the way, don't be afraid to change if you find you're not happy with your initial choice. life's too short to put up with something you don't like. i changed, and it was the smartest decision for me i've made since college.
good luck.
I would imagine, however, that not all schools are the same. The differences between CS and CE are most likely potentially drastic between two schools. You should look at descriptions of the courses, etc. from the schools you are interested in to see which major you think is best suited for you.
I have two degrees in CS, and am currently persuing a third. I do VLSI design, often down to the level of drawing the polygons as they will be fabricated on the chip.
The curriculum for CS/CE/ECE varies widely from department to department. Often the program is what you make of it. When I was an undergraduate I decided I liked hardware, but didn't like the EE curriculum at my school, so I chose to do hardware as a CS major. YMMV.
Part of your choice of degree should be the department that it is based at. An engineering department means that you can get accredited as an engineer.
:) )
I hate to say it, but engineers get more respect in society than scientists and tend to get better, higher paying jobs.
(Hey, this is from my experience only
Computer Engineering cannot be compared to CS. They are to different entities. What CS should be compared to is Software Engineering. SE is applied CS, much like chemical eng. is applied chemistry. "Science is the study of what is, Engineering is the creation of what never was" (Theodor von Karman (1881-1963)) The problem is people in the Engineering field dismissed software development as a byproduct so CE hardware design. So the "SE" that is refered to today has its roots with the CS community and not the Engineering one. The other problem is that it is a misuse of the word engineering. SE has been used to describe all types of software development, which is incorrect! With the world's increasing dependence on software which is embedded everywhere around us, we need SE's with an engineering education focussed on software, unlike CE which focuses on hardware. For example, how safe do you feel about the embedded systems in your car or your pacemaker or in nanotech.... it goes on forever. I cannot wait until the day when a Software Co. issues a guarantee with its product and not a disclaimer. It can do this because it had SE's design it with strict mathematical specifications to ensure soundness and completness. This is done in all other Eng. disciplines, why not software? Well enough ranting for now... Thoughts?
I can give you my perspective. Eight years ago I graduated with a BS in Computer Engineering. Now I'm working on my PhD in Computer Science.
A lot could depend on where you go. Don't assume that because a school has a strong Computer Engineering Department, that they will have a strong Computer Science Department.
A lot also depends on what you want to do. If you think you may be interested in eventual graduate education avoid Computer Engineering. In my experience Computer Engineering is more focused with giving you skills for the market then allowing you to really understand the material. You will spend a lot of time memorizing EE equations, and not enough time understanding the math behind the equations. Still, from the perspective of boolean logic, the computer hardware material will make sense, but it isn't really that deep. In the end, you will just end up doing low level programming with lots of tedious debugging. (Of course, the stuff is often hands on and can be fun...) For someone interested in graduate work, I would recommend Math with a minor or double major in CS.
If you want to stop after a BS, I would recommend CS. For the most part the material is self-contained. You still need math to really understand the material, but it is possible to learn that math while getting an undergrad degree. Also the material is very practical. You will learn more about programming than a Computer Engineer and odds are that your programming skills will matter most in the job market. (Almost all my friends, no matter what their major, ended up doing programming after they left school.) While a CS degree often avoids teaching the details of modern tools, a broad CS degree at a good school will allow you to use those tools with minimal effort.
In summary, a Computer Engineering degree doesn't have a very substantial foundation to teach you. Instead they spend a lot of time having you memorize formulas for the EE side, since the foundation is too difficult, or try to give you practical experience in things such as microprocessor design since there is no serious foundation. Computer Science does have a reasonable foundation that they try to teach you. The only complaint is that it often seems they spend all four years giving this foundation. I don't think this is a problem. If you really understand the material, you should be able to go out and apply it in the world and get real experience. (Of course, I shouldn't talk; I'm still in school.)
Chris Mesterharm
I go to MSOE (http://www.msoe.edu/) and am a Software Engineering student. I have observed that Computer Engineering is pretty much for engineering stuff related to computers. The software engineering program teaches students to engineer software, not just write it. As an SE, you learn architecture, algorithms, teamwork skills, how to program, programming phases, and WHY all of this is important. Lowly, CS people simply learn how to write software to other people's liking, not to come up with the ideas and engineer the software to fulfill the problem statement. If you truly want to be marketable, become a software engineer (SE). Goto MSOE. Make $50k/year starting. And, hey if money is all important to you, go into a business field. It's the CEO, CFO, COO, etc that make the big bucks. If you want to enjoy engineering software to solve problems and make some money, become an SE. If you like hardware and software and wish to engineer both, become a CE. If you want to be bossed around and potentially make a lot of money like John Carmack, become a CS person. It's all up to you.
I couldn't agree more. I originally applied for college in 1986 to learn computer science, but never went, instead I joined the Army (for monetary reasons). I'm glad I did, because if I would have graduated with a CS degree in 1990, I would have had to keep up with the 90's computer revolution by taking short course after short course, acquiring those Microsoft "trophy" certificates along the way, and would now be jumping from one sinking dot-bombed ship to another. What a way to earn a living.
But I saw how rapidly the computer scene was changing, and when I enrolled in college full time in 1997, I decided to knuckle down on the math and try out for straight EE, because nowadays, the EE curriculum is so computer oriented that to say you are an electrical engineer means you also know a good deal about computers. But having an EE degree also means you know a bit about industrial controls (interface a new computer system to the same old assembly line every couple years), and know a bit about power engineering (deregulation won't change how you your electricity is delivered one bit, even if you say "Screw deregulation, I'll buy a generator", EE's ultimately designed the generator).
Here's how I've always seen it...
EEE - strange people...smart as hell, but strange in that 'no shower for 3 days' type of way (been there, done that, btw)
CSE - not as book smart as EEE, but smart enough to know to not do EEE
CS - wants to be CSE, wants the 'coolness' associated w/CSE, can't cut it at math, or doesn't like the math
CIS - business people...thanks for the COBOL!
BIS - like the BetaMax...they still make these?
Personally, I'm a CSE and CIS double major, as highly conflicting as that is, I've gotta cover both fronts. =)
I am a CSE at ASU (arizona state) and we have to take cources in engineering ethics too. We learn ways to make our design decisions etical and how to solve problems effectivly.
Also so far in my classes I have had quite a bit more hardware than my CS friends. We have done digital design at the gate level, and we are now doing electical networks. My CS friends have only had to do the digital design, and I have been told that is to be their last required hardware class.
-----
Can I Play With Madness?
I too am in a similar position and have debated the question of science vs. engineering for sometime now. After talking with friends who are currently undertaking post-secondary education, I came to the conclusion of majoring in computer science. This decision stemmed from my own person preference to have a more specified field of study, rather than that of the duality of computer engineering (both hardware and software aspects). In any event I encourage all who are in a similar situation to make an informed decision and research heavily into your prospective college or university and the programs the offer.
Seriously consider doing both...I'm a junior in the Computer Science and Engineering program at the University of Texas at Arlington (http://www-cse.uta.edu) and I love it. Not only am I getting a firm grounding in both CS and CE, they're also using the combination to teach such things as software engineering, engineering management and to give you a broad background in engineering. UTA CSE graduates are currently dominating the incredible technology environment that is growing in the Dallas/Fort Worth metroplex here in Texas.
My primary criteria was to find a school accredited both in the computer sciences (look for a 'CSAB' accredidation) and computer engineering (This one is from ABET) and a school that jus focused on CSE - I didn't want a program that was just a CS program that they tacked a few courses onto, I wanted a program that was designed from the ground up as a CSE program, not just a double major. And it's really been worth it - not only do I have a deep knowledge of programming, but I can peer deeper and actually comprehend what's going on at the chip-level and not only diagnosis problems easier because of it, but write highly optimized code.
Check it out, the website has a bunch of info, as well as the UTA website...look at http://www-ais2.uta.edu/cat/compsci.shtml for the actual pages of the undergrad catalog that detail the CSE program, it's requirements and it's goals. If you have any questions, email me!
Computer Science is not (directly) about software, it's about the theory of computation. Software is a practical application of computer science.
"Computer science is no more about computers than astronomy is about telescopes" --Dijkstra
Computer Engineering: Take electrical engineering, remove the analog stuff (i.e. power supplies, generation, transmission and some RF) and add discrete math, some programming languages and algorithms classes, shake well. Computer Science: Take lots of discrete math, data-structures, compiler theory, actual programming languages (duh), operating systems and add some logic and design, but not usually implemented in hardware, shake well. At least this is the way it is a my school. -ted
There are several differences between Comp Sci and Comp Eng. I am currently a Comp Eng student. Basically, computer science deal almost exclusively with the software side of a computer. Writing programs, algorythms, web site management (to some degree) etc. Primarily writing software. A lot of math as well. Computer engineers work on a broader scope. They apply computer technology to a problem. Though computer engineers usually program as well, typically not as well or extensively as comp sci students. However, we also learn about robotics, systems integration, and using the computer as part of a whole. Whereas a comp sci student will write a program, a computer engineer will integrate a computer into an airplane control system, or will write the interface for a computer-controlled robotic arm. We work more with hardware, and creating a solutiong for a specific problem. ERTW
"Reality is merely an illusion, albeit a very persistent one " -Albert Einstein
You gotta be out of your damn mind. I attend a Liberal Arts school...I'm a Biology major with a Computer Science concentration, and frankly, I'm offended. I don't care where the worst programmers or the best programmers you work with came from. I have the background to program, to splice DNA, to write for a magazine or to rule the world. Have a cup of coffee and piss off...
- you learn where you may take a closer look at
- you are forced to do things you won't do on your own and learn from it
- it is very likely to find people who can do certain tasks better that you and you can learn from them
- you meet a lot of people with similar interests and you can learn from them
- exams are to say you that you are not doing completely stupid things
- you get a degree, and there are many people out there that value them very high
So, to study is the best way to aid your personal learnig process. You can learn all on your own, and in the end you have to learn all on your own, but an academic environment helps a lot. And e.g. medicine is almost impossible to learn without academic background.Just because I can imagine doing a hippopotamus, doesn't mean I'd like to do it.
"A few atoms won't even light a match" - Dr Jones, 1933
In my experience on the job, those programmers who had studied the most advanced math (i.e., math majors or double majors math/CS) were most able to do the important programming - choosing how to set up a program, how one part will interface with another, etc. If you are interested in doing those "senior programmer" type things, get lots of math. Once you have the critical thinking skills and the understanding of formal systems that classes like Algrebra and Analysis give you, you realize that the process of actual "coding" is the least important part of programming, and involves merely writing down your ideas in a way the compiler understands. The real work is understanding the problem.
BTW, I gave up programming to go back to grad school - still not sure if I should kick myself over that one ;)
-- When all else fails, read the friggen' binary!
I did my Bachelor of Engineering in Software Engineering last year. In australia we did things kinda different to they way the US seems to do things.
While all the Comp Sci. and IT ppl were getting out after 3 years - we were doing an extra year of more advanced topics. Seriously, most of those that graduated the year earlier didn't even come close in formalised construction and Engineering software that worked. It seemed by default that we also built better code because we actually THOUGHT about what we were doing rather than just hacking up a piece of crud.
The degree I did is also recognised by The Institute of Engineers of Australia (which means I'm recognised in the US aswell - at least that'a what they tell us) as engineers (It really ticks me off when people call themselves engineers when they really aren't).
As far as I'm concerned, a Software Engineering degree is the only way to go - not only do you get a far better concetptual grounding, but as a result, you WILL stand out from the crowd as someone who knows what they are doing and WILL get the job done properly.
have a look here:Griffith University - and make the right choice.
Aww shucks. Having studied Computer Systems Engineering, this topic is one that irks me no end. Very few people outside of these fields are able to distringuish between the two, and it especially pisses me off when someone tells me so-and-so also studied computer science and is earning $X. (computing jobs pay more in general, as there is a greater scope for engineering jobs.. more on this later)
;)
Okay, before I start my rant, a few disclaimers:
1. I'm Australian, and don't know how systems work in other countries.
2. I'm an engineer, and naturally believe engineering to be "better", despite lower average pay and poor community respect. Take all comparisons with a spoon of salt.
3. Beer makes my English funny sound.
Engineering is a profession; it is roughly defined as "the application of a proven process or standard to the undertaking of work". Engineers are focused on maintaining quality and safety throughout a project, more often than not because the scale of work that they undertake is often quite large or critical in nature. eg. civil engineers building bridges; industrial engineers and their manufacturing plants...
More often than not, the engineer will need to assess a number of different factors. These factors may include economic constraints, environmental impacts, legislation, work safety, time etc etc. These skills are the reason why many engineers move into management roles of some form during their career.
The roles of electrical and electronics engineers began to change somewhat during the takeoff of computing and automation. Increasingly, these engineers would be required to coordinate the development of systems which would be controlled by complex computer systems etc... it was from this shift that the role of the computer engineer developed.
The types of projects that computer engineers are schooled to undertake are often large scale; incorporate other fields (such as mechanical engineering) and often involve a wide variety of systems. The best way to explain this is with examples:
Eg1: Aircraft autopilot systems
Eg2: Glass furnaces, with associated RTUs and SCADA system
Eg3: Manufacturing plants
I think the theme is large-scale... The problem with engineering, is that it is poorly understood and recognised within society. Often, jobs may be advertised as engineering roles, without actually requiring the skillset of an engineer. (wtf is a sales engineer... they should be called "technical salespeople"... wtf is an MCSE ??) In Australia, there has been a quiet push to remedy this problem through legislation (though I doubt it would ever happen) The idea is that employers advertising "engineering" positions only employ "real" engineers listed on a national register (www.ieaust.org.au)
Another problem for computer engineers, is the fact that they possess a number of the skills required to undertake a number of computing professions. Subjects such as operating systems, communications networks, software engineering, code cutting etc etc are taught alongside the math, physics, materials, project engineering, statistics, legal issues (etc etc) subjects...
Anyway, to cut a long rant short (i wanna eat dinner), computer engineering and computer science ARE very different; my summary is:
If you LURV computers and would like to work in one of the many computing roles, go COMPUTER SCIENCE. Besides, there are more girls in comp. sci. than engineering.
If you would like a broader scope, touching on electronics, electromagnetics, lotsa theorems, Standards! and don't mind LESS pay and crappy recognition, then engineering is cool. (We're more free to move to other fields, too... for example to computing, or to telecommunications etc etc)
donny
Hi,
I'm studying Computer Systems Engineering (in the UK) which I assume is similar to Computer Engineering in the US. My course is a combination of the computer science and electrical engineering degree courses. This means that I have covered
C, Java, Lisp, Digital Systems, Linear Systems(analogue electronics), Computer Architechture, Multimedia, Pure and Applied Maths,Statistics, Calculus, Matricices, Discrete Maths(Trees/Groups/Number Theory).
Above all of these courses is the experience I have gained from taking a year out to work as a programmer. I have found that the most useful thing I learnt from Uni was how to program and solve problems. Rather than knowing any specific language very well I was taught lots of languages in shortish stints. Currently I have dabbled with C/C++, Java, Haskell, Z, Perl, Lisp, Fril(like Prolog), Assembler, Machine Code and Html(not a programing language I know) and although I don't claim to be very good at any of them I have found picking up new languages quite easy.
Almost as important as understanding how to pick up a new language is following a disciplined programming style. It is important to stick to the "Golden Rules" of programming ie. Commenting, layout, grouping code into logical sections, striving to make the code human readable even without comments.
On the hardware side I have been taught with Electrical Eng students the basics of digital system design techniques, electronics, digital components(transistors etc). So I have a good idea of the hardware I will be writing software for.
So, what you have to consider is what you are prepared to do for 8hrs a day, every day for the rest of your life. If you want to bash out application software go for CS. If you want to write low level code (down to firmware) go for Computer Systems to get knowledge of hardware. If you want to design + build hardware go for Electrical Engineering.
If I wanted to I could even pick up a soldering Iron an become a hardware guy, but for the moment I prefer software. I like having the choice between hardware and software as I have found great similarities between the design methodologies of both disciplines.
Hope this helps you descide.
Cheers
--- All opinions expressed above are my own, noone else can be held accountable for them. My ignorance is my own fault
"A few atoms won't even light a match" - Dr Jones, 1933
Here in England, when I did my undergrad, these two strands were Computer Science (resulting in a BSc) or Computer Systems Engineering (resulting in a BSc or BEng at the candidates discretion). I was a CS student, but used my "optional courses" to take CSE courses in signal processing. The tricky aspect to CS was that coursework was less well defined, and the courses contained more algebraic-maths. Conversely, CSE was more "practical" and lectures had more of a "how to make things work" feel to them. I wholeheartedly agree with previous posts suggesting that you should start courses to "suck it and see" but my word of warning would be that neither CS nor CSE are primarily concerned with training programmers, or even "software engineers" and in my experience most practical knowledge is self-learned by graduates from all disciplines. It does help, however, to have a sound background in how computer systems work, as it helps you avoid some pitfalls less obvious to the empirically self-taught.
Fast development time with minimal business time investment. They don't care how good it is. They don't care how long it lasts. In fact, they're more than likely going to declare your software as a capital asset and depreciate it over five years, and carry forward the opinion that software -- somehow -- just dies after five years.
:> ) The liberal arts will help ground your understanding of all sorts of other things. Developing software for people in a business is primarily a people task -- finding out what they want is the biggest adventure in this whole field. Particularly when they have no idea how to put into precise language what they need. The 16 hours of anthropology I took in college have been a wonder to me in trying to determine what my company's requirements are lately. "An Ethnography of the Don'tKnowMyProcesses Tribe".
What should *you* do? IMO, you should get as solid a grounding as you can in as many core things as possible. Math, physics, liberal arts. Problem solving is likely the best possible skill you could have (read Polya, chant it like a mantra when you're stressed
All of these other studies will also help to provide a fall-back. Never shut yourself out of options.
This may be a bit simplified, or a bit tongue in cheek, but I took computer engineering in university, and one of my professors tried to explain the difference between CS and CE as:
A computer scientist assumes that when you write a value onto a bus, that all the bits reach the other end of the bus at the same time. A computer engineer knows about bus skew - that due to the varying capacitance of individual wires on the bus, that some signals arrive sooner than others.I admit that this is an overly simplified view, but it does illustrate that there are two levels of knowledge. As an engineer, I didn't study the algorithms and data structures as much as a CS major would, even though we did take courses on real time OS's, compilers, and algorithms/data structures, but we had to study *more* of the physics (and even chemistry) side of things. One of our courses was all about the electrical properties of silicon, for example.
Another good differentiation is this - a computer engineer would design a new CPU, whereas a computer scientist would write an optimized compiler for it.
"I have never let my schooling interfere with my education." - Mark Twain
I majored in C.E. then switched to C.S. I'm short
one thesis for an M.S. in C.S. My experience has
been that C.S. students hate subjects such as
computer architecture and assembly language
programming. I happen to like those subjects...
go figure! What you really ought to ask yourself
is how close to the hardware you like to work. I
enjoy programming right down to the bare metal.
Most C.S. types do not, AFAIK. Unless you really
want to build machines right out of school, I'd
suggest getting a C.S. degree (especially from a
fine school such as CMU) and concentrating on
computer architecture as much as possible. If, on
the other hand, you like designing chips or ciruit
boards, forget C.S. and go the C.E. route. Either
way, you can make a pile of money if you display
any talent. I will point out that there are a
lot more companies hiring software geeks than
hardware geeks.
Oing!
I am currently enrolled at Rose Hulman Institute of Technology. I have switched between computer engineering and computer science several times already, so I know this question well. The important thing is that you do what you want. All these people telling you to get such and such a degree and go back for master's, or to avoid the sciences and engineering as a whole due to outsourcing. That's plain b.s. It's important that you choose a profession that you enjoy. Granted job security and salary are important, but if you truly love what you do, and possess some skill at it, then surely you will move up the ladder and those facets of your career will come true. Their is a saying at our school that you will most likely only be an actual engineer or scientist for 5 years after graduation, then you begin running things. As a freshman, I clearly don't know the validity of that, but I have heard good things from alumni.
www.rose-hulman.edu/~castlebs
On one hand, I think that, as long as you pick a major which is generally related to what you will want to pursue as a career, you'll be alright, provided you take enough classes in peripheral subjects. For example, if you major in CS but take a few more advanced classes in computer architecture than normal, you will still make a respectable computer engineer, and vice versa. So your choice of major is not so critical for general job skills.
On the other hand, I do think that the choice of major strongly influences the way in which you approach problems, and how big your `box' is. By `box' here, I mean the same `box' as in the phrase `thinking outside the box.' Typically you find that people in more theoretical departments, like physics and math and literature and philosophy, develop very robust and flexible ways of problem-solving, whereas those in more applied fields, like engineering and architecture, develop more specialized skills.
The flipside is that theory is only useful when it is applied, and to apply theory you need to develop a skill in formal reasoning, which means some kind of mathematics. From this point of view, then, physics is the ideal major.
But it all depends on what you want to do. If you want to build new things, you will need to develop those formal reasoning skills, and a goodly amount of patience. If you want to build things which are useful but not really new, you may be satisfied with an engineering degree. If you want to build things which are elegant but not immediately useful, mathematics or philosophy are good choices. If you don't want to build things, then you are probably better off in a non-technical field.
Personally, I think you should play it safe until you know what you want. Take a mix of courses which introduces you to a wide range of subjects. Don't bias yourself towards theoretical or applied classes until you know what you want. (For example, I regret not taking more advanced theoretical classes in college.) If you are required to declare a major, then make your best guess: you can always switch later. (I did.)
Good luck!
BH
BH
Fools! They laughed at me at the Sorbonne...!
Want to save $100K on a CS degree and still be a great programmer? Buy Don Knuth's books, then learn and practice everything he teaches.
You'll be working five to seven days a week, eight to sixteen hours a day, for the next twenty to fifty years of your life. Figure out what sort of lifestyle you want to have, and then find some work that you really love to do, that will accomodate it. Don't choose a major for your future employer; choose it for yourself.
There's a lot of pressure in this respect when you're 19, and you don't have to make all the correct choices the first time around, but its good to be aware that these are the issues you need to sort out over the next several years.
There is a third option: Software Engineering. These degree programs tend to concentrate on programming in the large where Comp Sci spends time writing small programs and Comp Eng building breadboards of systems and writing low-level code. Well worth looking into.
Being a neophyte to the industry (I am finishing my third year as a CS major right now), but having had some 'real world' experience, I am inclined to say that acadamia has it all wrong. The dual between Computer Engineering and Computer Science shouldn't even exist. To deal with technology, one must be an engineer -- how else are you goning to make it go at 5 am when the product ships at 8 am? On the same note, we must be scientific as well. We need to know the mathematical and scientific tools which make our jobs easier. I found a happy medium by majoring in applied computer science within the engineering college of my university. This way, my core is engineering based (they don't offer computer engineering). You may look into a double major or something like that if you're up for the work. TAKE AS MUCH DISCRETE MATH AS YOU POSSIBLY CAN. This advice has proven invaluable in my three years of college life.
Actually, since the original spelling is in Cyrillic, any phonetic equivalent in the Western alphabet is technically correct.
- tokengeekgrrl
Well, both Computer Science and Computer Engineering require a lot of math, so I'll suggest you to take all your math courses the first semester (if that doesn't disgust you too much), so that you may discover that what you really like is math (I am a math majour, trying to spam), and talk to CS/CE majors in your school, get to know the faculty, or even discover that math can have CS applications.
That's what I did: since I had no computer as a kid and I had fun with math tricks I chose math and now I am majoring in math and I'll specialize in CS application (I hope signal processing).
The two fields are so closely related, you'll see people in either column take each other's classes. Here at Drexel Univ, I've had to take a 5 class sequence in CS as part of my EE/CE requirements. Hey, CS is just an offshoot of EE/CE.
But from my experience in the job field, I've observed that it's easier to teach a hardware guy software than the otherway around. But then again, analog guys are the same way with digital . . . Hmm . . .
Well, my final biased opinion, before I go back to my design project, is that software people can't do anything without the hardware, but hardware guys will go on with assembly code and logic gates:-)
Good luck
The holy grail of CE is to make a hardware system with enough computational ability to design all other hardware platforms, making all computer engineers obsolete.
Software is always limited by hardware.Hardware is limited by the laws of physics. Which would you rather be bound by?
Hardware is always limited by the laws of physics. CS is limited by the laws of logic. Which would you rather be bound by?
Additionally, need I remind you that the problem of laying out all those jillions of gates, pathways and sinks is only accomplisheable because software people have developed efficient algorithms for doing so? Circuit design algorithms are the primary tool that CE uses for designing new architectures, and these algorithms come from CS.
It's a mutual relationship, sorry buddy.
In terms of pure programming, I'd say that CE and CS get about the same amount of training. CS's get more theory (e.g. theory of algorithms, theory of computation) than CE's do. They also get more ELECTIVES, if that's important to you.
If you're planning to do regular Windows programming, it probably won't matter much which you pick. But if you want to do anything related to Operating Systems, Networking, Compiler Design, etc., then CE is definately the way to go. CS's don't learn much about registers, busses, assembly language, or signal processing, all of which is extremely important if you want to do anything low-level.
There's also the issue of what degree you get when you graduate. If you are an Engineer, you are a "Professional", which means that a few years after you graduate, you can apply to get your P.Eng, which puts you into the ranks of the doctors and the lawyers (i.e. you can sign passports, among other things). As a CS, you're just an arts/math major.
That's my perspective, as a computer engineer at the University of Toronto. Things might be different in the US (e.g. at Princeton, CS is part of the engineering department).
--It's all fun and games, 'till someone loses an eye. Then it's one-eyed fun!--
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.
Yes. In Theory (ahem). The reality is that most coming out of a computer science degree learned-to-pass -- they didn't learn-to-learn. So they wind up performing rather poorly.
Now there ARE people who "learn to learn" while at school, but these people usually wind up staying in academia. If they don't, they're a great asset to the industry.
But I just see way too much elitism from CS grads who think they're king shit on turd island, yet don't understand how to design a system for time to market, maintainability, usability and performance, and think it is "beneath them" that their team leader is someone without a CS degree.
-Stu
Computer engineering programs are usually run out of the Electrical Engineering Department. Some schools have their own Computer Engineering Department (which is in the School of Engineering.)
Computer Science programs are usually run out of the College of Liberal Arts and Sciences at many universities. Other LAS programs include Biology, Chemistry, Physics, etc. Some schools separate the "sciences" from the "humanities" (i.e. they have a "school of science") but still have heavier liberal arts requirements for those outside the schools of engineering.
Many LAS schools require a "core curriculum" in the liberal arts, along with the courses required for your major. This liberal arts core usually includes history, philosophy, and two years of a modern foreign language.
Most engineering schools do not require liberal arts courses beyond a very rudimentary core of freshman English and a few others, and the vast majority don't require foreign languages.
As someone with a BS in computer science, I somewhat regret not majoring in another engineering discipline. The computer science stuff that I actually use I could have picked up on the fly: a CS curriculum does not teach you how to program. What a CS degree gets you is a lot of theoretical understanding about software construction which is not terribly useful in a lot of programming jobs.
The thing that was useful I could have gotten from any engineering degree program: problem analysis and reduction. But had I been something other than a CS I would have gotten a more solid grounding in math, something I am hurting for now.
You can pick up all the CS stuff you need on the job. Choose a degree that teaches you about other things than programming. Actually computer engineering would have been great had my school offered it.
-marsh
(Okay, not everything.)
The answer is "the real CS"(cognitive sciences). CS(again cognitive science) is multidisciplined and you'll encounter neuroscience, the other CS, EE, PSY, plus whatever they(labcoats) figure out to be on the same path as to complete THE GOAL. THE GOAL(i'm not shouting): automata. CogSci majors get to specialize in any of the above mentioned fields. But the goal(2nd one) is not to be specialized. You'll figure this out soon enough.
You know the Microsoft destroys the night, Linux devides the day...
Just make sure that if you do choose CS or CE, that you don't limit yourself to taking classes because they are on the other side of the fence. I'm talking about those classes that typically only CS or CE would take, the ones that don't technically overlap. Take the classes that you are interested in and don't worry if it takes you a little longer to graduate becuase the broader knowledge you have, the more likely you can be of benefit to a company in a computing-related field.
I'm an EE and CS double major. I have one more quarter until I graduate, and I have heard this debate over and over. EE with a CS minor is the best combination of the three, CS, CE, and EE. With EE, you will learn the skill of learning because it is the most theoretical and you will spend hours doing homework. Once you can learn, you will be able to do any of the other fields. When you get a job, it will not be what you learned in class, but what they will expect you to be able to pick up. Having the EE and CS minor, you will be qualified to at least get in the door. Then it will be the people that are the quickest and the one who are able to learn that will move up.
I might as well chime in too...
I did Comp Eng at the U of Waterloo
The major difference is who runs the programs. Comp Eng is in the Engineering Faculty, so it has to have its curriculum approved by whatever the body is that approves Engineering curricula - the PEO or whomever. In Comp Eng your entire class takes nearly all the same classes until 4th year so there's a very different social atmosphere than CS. Other than that however, it's not that big a difference. I took comp eng and couldn't do a VHDL design to save my life. One of my ex-classmates now designs chips for a living. 3 work at Microsoft. One is a consultant. I'm a product manager at a software tools company. Your education, as many others have pointed out, has minimal bearing on what kind of job you end up doing professionally. Also note that I took one 4th year CS class (Graphics) and some of my classmates took up to 3 of them...
I personally liked the engineering background stuff like physics and the small amount of management science we were taught, but some people might like the bigger math focus and more theoretical CS aspects of a Comp Sci degree. Comp Sci is much more loosely structured, you take whatever classes you want after first year and there's less of a coherent sense of having a "class".
So, in summary, it's not so much the course content that's different, but how the courses are structured and who's in charge of things. I liked Comp Eng. Of course, I have two Chemical Engineers in the family, so I might be biased.
There's one funny thing about CEng and math.
.. The kind of things you did with your left hand while trying to get blood out of a rock with the right to get the math assigments done.
..
You never ever need the math again after you graduate unless you want to.
About only jobs in digital hardware I can think of that actually NEED higher math are DSP-style filter design and some telecom jobs that deal with transmission pathways.
So when you get the degree you find out that all the blood and tears (yeah, PDEs will make a grown man cry) was just for the degree.
What you really NEEDED was those Mickey-Mousey logic design courses, low-level programming courses
I was an exchange student in Canada for a year and graduated in Finland and I can say:
Our math is a lot easier! Neener!
At least unless you specialize in EE
My first question is: where did you goto school for Software Engineering?? I am in Wisconsin, and a few of our Universities just started offering a Software Engineering Major.
My second question is: Are you a software engineer?? What do you like/dislike about being one. I am seriously thinking of being a Software Engineer, and am interested in everything computers.
Noffie
I was just wondering what career should I choose for fixing computers like those guys that work at Best Buy? Thanks for your help.
Honstly!
Who would believe in penguins,unless he had seen them? Conor O Brien - Across Three Oceans