Computer and Software Engineering, Computer Science

<p>What is the main difference between Computer Engineering, Software Engineering, and Computer Science?</p>

<p>Currently my school only offers computer engineering and computer science. What would be the best route to go if I wanted to work as a software engineer? Eg: working for companies such as Apple, Nvidia, Microsoft, Google..developing software and whatnot?</p>

<p>Also, would being a mechanical engineering major (currently my major) throw me off this path completely? Do ME engineers have jobs at these companies?</p>

<p>Computer Engineering is a sister discipline of Electrical Engineering. It’s basically an EE degree with a focus on computer hardware, there is some overlap with CS in that you take some algorithm course(s), some more programming than an EE student, and some computer organization/architecture stuff (probably with a hardware oriented flavor).</p>

<p>CS varies widely depending on what school you take it. The big difference is that it’s not a traditional (ABET accredited, or CEAB here in Canada) engineering degree. Therefore you are not eligible to call yourself an “engineer” in certain jurisdictions. CS focuses mainly on theoretical stuff (algorithms, complexity theory, automata theory and such things) also with a fair amount of practical stuff (computer networks, graphics, software development, etc.)</p>

<p>SE programs vary even more widely. Again, they may or may not be an accredited engineering degree. A single school may offer two versions of the degree, at my school they are widely different. The B.Eng SE is basically Computer Engineering with more (annoying) software engineering practice, validation/verification, etc. classes. The B.Sc. SE is Computer Science with less math and more required projects. But that’s just my school, you should look up the info for yours.</p>

<p>As for ME limiting you from this path. Yes and no. Typically software companies seek out SE or CS graduates. However, some companies which build specialized software need people with a very good understanding of the application domain, which may mean knowledge of mechanical engineering could be required. I interned at a company in the aerospace industry and mechanical engineers were very welcome provided they had programming knowledge. In fact, they could do jobs that SE/CS graduates could not. (For example MATLAB/Simulink work involving some understanding of aerodynamics, which us SE/CS folks lacked since we were too busy with silly design patterns and other nonsense :wink: .)</p>

<p>You don’t need a CS/SE degree to work in this industry. Just make sure you know how to program!</p>

<p>Edit: Looking at the list of companies you provided, the best route if you want to work as a Software Engineer for them would be a CS or CE degree.</p>

<p>Edit #2: Personal Bias Disclaimer - I look upon SE as a fairly sketchy discipline which can easily be practiced by people with traditional CS or CE degrees. If accreditation is what you seek, CE is the solution then.</p>

<p>Actually, ABET does accredit CS programs. You don’t necessarily need to attend one for a programming job, but it’s still true.</p>

<p>I stand corrected. But does that make you eligible for Professional Engineer status as a B.Sc. CS holder?</p>

<p>I only know the situation here in Canada to be honest, and it’s much stricter than the states. At least in my province you cannot have the word “Engineer” in your job title if you are not a Professional Engineer (graduate of an accredited engineering program) and registered with the appropriate professional organization.</p>

<p>But I digress, that’s another topic altogether.</p>

<p>^ Probably not.</p>

<p>“I stand corrected. But does that make you eligible for Professional Engineer status as a B.Sc. CS holder?”</p>

<p>Well the software/I.T. industry has their own slew of certifications that are worth more (within the software industry) than the “professional engineer” certification/license.</p>

<p>Also…</p>

<p>Software engineering uses the “engineering” term because it uses a variation of the “systems engineering process” to actually produce software. The main difference between computer science and software engineering is the “software” term. Software engineering focuses strictly on the development and production of software whereas computer science can focus on either hardware or software. There are areas of computer science that deal with hardware that is NOT really totally tied to EE.</p>

<p>Computer Engineering is hardware. Computer Science is, depending on your focus, software or theory. Software Engineering is code monkey.</p>

<p>Hmm good information. Thanks guys. So if one wants to land a job at Apple or Google and these other big name companies what do you think the best bet is? CS?</p>

<p>^ In general, yes.</p>

<p>Sure, but remember those companies employ a small number of total yearly graduates. Study something you like before or all else.</p>

<p>Understandable and I definitely agree. There are certain parts of the CS field that I wouldn’t like but ultimately I do want to do some type of work regarding computers. On the other side I love all of the aspects that with ME. Would it be possible to get a BA in ME then go to grad. school for CS?</p>

<p>(Curious, did you mean BSc, BASc or BEng?)</p>

<p>Yes, but it depends on the school. Mine for example won’t accept you unless you’ve already completed a certain number of CS classes. They require you to take them elsewhere or as an independent student before applying.</p>

<p>Other schools actually have custom tailored programs for non-CS people looking to get a Master’s in CS. From what I’ve seen these schools tend to be smaller and perhaps less reputable. But I haven’t looked into it a lot.</p>

<p>Try to at least get a minor in CS to get a feel for it if you stick with ME. Though during your grad application you will likely be asked to list “advanced” CS courses you have taken, likely outside the scope of a minor.</p>

<p>Whoops, I meant BEng*</p>

<p>I guess I will look into my school’s plan for the program and send out some emails.</p>

<p>How common is it for someone to major in ME and minor in CS? Seems like the workload would be quite high.</p>

<p>I don’t know, but it probably is a lot of work.</p>

<p>Here’s what I’d suggest at a minimum. Take the intro sequence (probably two courses) then take the Data Structures and Algorithms class. It’ll be named something similar regardless of where you’re studying (a lot of schools use MIT’s Intro To Algorithms book for it). This class is basically the bread and butter of CS. If you like it and do well it’s a sign that you should continue.</p>

<p>Personally I’m of the opinion that minors are not all that important, but I know engineering curriculum is usually strict, so you may not be allowed to take more than one or two CS classes unless you declare an official minor. But now I’m speculating.</p>

<p>Hopefully someone else has better answers.</p>

<p>I’d rather not have a minor. I may consider summer classes in the courses you listed. </p>

<p>I just glanced at my school’s department page and an undergrad CS major isn’t required so thats good. But one of the courses you listed, Data Structures, does need to be completed. I’ll be looking into this a little bit more. Thanks for your help man.</p>

<p>If anyone else has any feedback/suggestions/more help please provide!</p>

<p>What areas of CS are you not interested in?</p>

<p>When I say that I mean the idea of having so many of my classes be computer based. I love working with computers, but RIGHT NOW, its not what I want. Which is why I’m enjoying engineering so much. When I think of CS, and correct me if I’m wrong, I imagine being on a computer in all of my classes. I feel like I’m in a awkward situation here because I have enjoyed all of my programming classes, but at the same time I don’t want my whole curriculum to be based off of just that. Which is why I wouldn’t want to major in CS.</p>

<p>I guess results will depend on your college, but my school gives us the option to shape our own CS degree. If you want, you can take a bunch of programming heavy courses like compilers and software engineering. On the other hand, you can go theory heavy and take courses where you don’t even touch a computer (i.e. Analysis of Algorithms, Discrete Mathematics, Cryptography, Mathematical Foundations of the Information Age, Algorithmic Game Theory are some such courses).</p>

<p>CS is a very flexible major. You could do a lot of hardware stuff if you wanted… although at that point you’d be better served by doing CompEng.</p>

<p>If you want to do a lot of theory, CS is a great option…</p>

<p>Now, why don’t you like the idea of being at a computer all day? Any engineer is going to spend a fair amount of time in front of a computer, or at least such is my understanding. To people outside CS, a computer is just this thing that can be used to accomplish menial tasks or frivolous tasks. To people inside CS, a computer is just as exciting and full of promise as a fully-equipped laboratory is to physical or natural scientists or engineers.</p>

<p>I guess I’m just too in love with it to see the downside. Are you worried about staying active? I wouldn’t count on getting too much exercise with most engineering positions. I just don’t know… I guess I’m cautioning you to ask yourself really why the idea of doing CS doesn’t appeal to you. There are plenty of good reasons but “have to use computers” doesn’t seem to me to be a sensible reason…</p>

<p>Hardware is something I certainly do not want to do. </p>

<p>I don’t know…the idea of being on a computer just doesn’t appeal to me IN college. I wouldn’t mind having a job using a computer, but I don’t want my classes to revolve around computers. I would much rather take my engineering courses and enjoy those. From a previous thread I posted, not many ME get programming jobs which is why I created this thread. Basically, I want to do something with programming but don’t want sit through all the courses lol =/</p>