r/learnprogramming • u/Cin316 • Oct 23 '14
ELI5: Computer Science vs Software Engineering vs Computer Engineering
13
u/boredcircuits Oct 23 '14
Computer Science: studying how to compute
Software Engineering: designing and building computer software
Computer Engineering: designing and building computer hardware
Computer Engineering might be the most varied of the three, and overlaps significantly with Software Engineering. Computer Engineering involves significant amounts of programming, but tends to be lower level (drivers, embedded programming, compilers, operating systems, etc) while Software Engineering usually involves software users interact with.
Both Software and Computer Engineering apply the principles of Computer Science, so sometimes it's hard to distinguish between them. If you're working on a compiler, are you doing Computer Science, Software Engineering, or Computer Engineering? Actually a little bit of all three, and it all depends on what your goals are. If your goal is to create a product for someone to use, it's probably Software Engineering. If you're trying to find algorithms that make compilers more efficient, it's probably Computer Science. But if you're modifying the backend to work with a new CPU architecture, it's probably Computer Engineering.
→ More replies (6)
7
u/s1nequan0n Oct 24 '14
The posts here pretty much explain it all. Funny that this comes up, as I just today inquired about switching majors from CS to IT w/ Software Development track. If I hadn't been chatting up a classmate about majors and found out about this, I wouldn't have known. Make sure you check out your universities Engineering or Computer Information Sciences department, and actually look at each flowchart for each major or plan of study. The types of classes you'll be taking really give you the idea of what you'll be learning (and I'm sure school's differ in the classes for each major). Just realized you didn't ask this related to college majors specifically, but if it hopefully some of this helps. I wanted to get into programming and wanted to learn about the computer in general. Some time in CS made me realize it can get very theoretical and the math is VERY present. Suddenly I find IT w/ software development, all the classes I've taken still apply, and there is no math past the Data Structures course I'm taking now. (and I think the majority of the math is being forced down our throat as this professor is the only one I've found so focused on solving massive recurrence relations.) On that note, make sure you look up the professors if you have a choice. Your grades and education are being paid by someone, treat it like the huge purchase it is. The research into what you should be doing and whats available falls on YOU, not your parents, friends, or advisor. Boy, can your advisers can really fail you. Hope this helps someone.
→ More replies (1)17
Oct 24 '14
Employers will look at a IT with software development degree and think, ok this guy can plug libraries together and work in a team and build our business app according to spec. But he will look at the computer science guy as someone who can do all that, plus come up with his own algorithms for problem solving, he will know how things work behind the scenes and will be able to spot potential performance issues, and he will probably be able to write more efficient code.
Most companies only need the former most of the time, but every team should have one computer scientist on it, and they will probably earn more and get promoted at least in the technical track quicker.
The IT with software development guy should learn some management too so he has something extra to offer and can get promoted on that track eventually.
→ More replies (3)
7
u/Juniorlol Oct 24 '14
Great post, TIL I didn't really know the difference between a computer scientist and a software engineer!
2
u/CodeTinkerer Oct 24 '14
Although few computer science majors get jobs in computer science-y things. They end up being software engineers.
4
u/brwtx Oct 24 '14
I don't know about other colleges, but this was my experience:
Computer Science: Do you want to have a degree in mathematics and know how to perform board level electronics repair, along with programming? I have never used anything I learned in the higher mathematics courses, and outside of a little soldering never used anything learned in electronics, in my career. I wasted a lot of time and money on this degree since most of the stuff I learned I will never use. If I lived in Silicon Valley my opinion might be different but opportunities for my knowledge are limited where I live, and a lot of the positions end up being H1B hires paid chicken feed.
Computer Engineering: Do you want a degree in mathematics, electronics, and learn how to build a cpu and other components along with machine level software development? Had a friend go this route, he worked for TI for a long time and was paid well. He works for a NASA contractor now, and I assume he makes a decent amount of money.
Software Engineering: Want to learn how to program using software and concepts that is probably 4+ years out of date? I know a lot of people who went this route. They all make a lot more than I do and constantly get harassed by recruiters who want to pay them a lot of money. One of them is a good friend that got addicted to cocaine, that was supplied by his employer so that his developers could meet their delivery goals. He was really sad but had lots of $100 bills to wipe his tears with. He lives in a mansion on a golf course now. Every time I talk to him I kick myself in the ass for not going this route.
3
u/lee714 Oct 24 '14
ELI5: What is Computer Information Systems vs MIS vs Information technology then?
→ More replies (9)
3
u/NeoWasAProgrammer Oct 24 '14
The classic college question.
Computer Science is really "pure", kind of like math. You learn programming languages in depth, logic, algorithms, data structures, as you progress to higher level classes you start applying these topics more towards practical uses like compiler design, operating systems, and actually building programs.
Computer Engineering is a cross between Electrical Engineering and Computer Science. Sticking with the analogy where Computer Science is like Math, you can view Computer Engineering as Physics - an application of math, but you do not go as in depth into certain topics that a typical math major goes into. This means a CE major will have the basic foundation of a CS major, but as the degree progresses you will branch off to different areas of focus. This includes actual hardware of computers, like processors, circuits, boards, embedded systems, etc. You will be dealing with concrete computer objects instead of just abstract ideas and programs. CE also learn programming languages pretty well, but do not get as intimate with them as a CS major would. They work with a lot of lower level languages that are close with parts of hardware, after all, their focus is how the hardware is programmed.
Software Engineering is a bit different from CE and CS, but I feel like it is the most practical in the real world if you want to be a developer. You learn how to program, but you focus on topics like working on projects in teams. This means you will have to know a lot of knowledge such as the best approach to a problem (what architecture to use, what is effective), meeting requirements, releasing software. You are basically designing the best approach to create software, like an architect designing a building. I feel like CS majors lean more towards SE over time, because they will have more experience and know what is the best approach to certain designs. You need good social skills and communication for SE, but that is typically true for any programmer who wants to work in a team.
Note that all three majors overlap significantly in the basic courses - all must learn how to program and will probably learn a few lower level languages to increase understanding of how you're actually manipulating the computer. When the time comes for upper division courses is when the skills start to branch away from each other and changes how you will apply this basic knowledge.
2
2
Oct 24 '14 edited Oct 24 '14
I'm a Software Engineering major. I was really wary at first as I did not want a watered down "IT degree". It is from a regionally accredited public university. I compared it with the coursework in CS programs at other universities and it's pretty much the same depending on your elective choices. It's housed in the school/department of engineering at my university. Basically, with most schools you choose an emphasis within your CS degree. Very often, there is a "software engineering" track. This degree is basically CS with your emphasis chosen ahead of time in SE.
I take some intro programming classes, calc 1/calc 2/calc 3/ODEs/linear algebra, algos/data structures, physics, discrete math, at least a couple basic hardware classes, and statistics. There is also a core sequence of enterprise related stuff. For my electives, I am going to take some embedded systems courses(I don't give a fuck about mobile apps or websites I've always wanted to learn lower level stuff that directly interfaces w/hardware) and some game development classes.
1
Oct 24 '14
So what would be the most suited role for someone looking to get into Digital Forensics or Security or something like that?
1
1
Oct 24 '14
I don't have any experience with Computer Engineering, but I switched my major from Software Engineering to Computer Science halfway through college. Why? Because, at least at my school, Software Engineering took the basics you HAD to know to be a code monkey and threw project management and a lot of business stuff in. While this is great to know, if I wanted a business degree, I would have double majored. Computer Science, on the other hand, took just enough team building and project management courses to be a competent team member, and taught you anything you could ever want to know about computer programming, from theory to application.
1
u/americanextreme Oct 24 '14
I am a computer validation engineer. I spend a lot of time dealing with, and inferring, the state of bits, flops, registers and buses. I ponder the reset procedure of memories. I wonder about various types of race conditions and ordering rules on a bus.
I'd like to learn more Software Engineer skills, as I think I will have more career opportunities with them. Are there any resources people would recomend?
1
u/FlukeHawkins Oct 24 '14
Here's how I've explained it. It may be a somewhat inelegant metaphor, but I've found it works:
Software engineering is like architecture. You're most concerned about building things and the best way to do that.
Computer Science is like materials science. You're discovering new ways to make better "beams" (data structures, algorithms, etc).
Computer Engineering is maybe more like physics. You're working on the underpinnings of the system (low level stuff).
0
u/DrMeowmeow Oct 24 '14 edited Oct 18 '16
[deleted]
0.157452930)
→ More replies (1)2
u/mrussell48 Oct 24 '14
CE: Don't really build computers and we do get math. CE is more like the bridge between EE and CS. We share half our core classes with EE majors and the other half of our core classes with CS majors.
-8
u/crow1170 Oct 24 '14
Computer Science has as much to do with computers as Astronomy has to do with telescopes.
4
Oct 24 '14
Hey look, it's that guy who comes into a thread with nothing to contribute, rattles off a catchphrase that he likely doesn't understand and expects the karma train to flow.
1
u/crow1170 Oct 25 '14
Well, shit, the question was already answered and no one had mentioned the catch phrase. I was not expecting a karma flow but I wasn't expecting a hit, either.
186
u/michael0x2a Oct 23 '14 edited Oct 24 '14
In theory:
Computer Science:
Focuses a bit more on theory and the core concepts behind making a computer do something. The emphasis tends to be on understanding data structures, algorithms, programming languages, etc. Graphics, robotics, compiler design, video games, etc are all fields of study that might fall under "computer science".
One interesting thing to note is that computer science doesn't necessarily have anything to do with computers, and in fact was a field of study before computers even really existed! Computer science, to a certain point, can be thought of as a degree in applied mathematics -- the emphasis is on computation, not computers.
Software Engineering:
The focus is more on developing software in a professional environment. It'll typically combine a mixture of soft skills such as project management, talking to clients, and gathering/articulating requirements, and will also emphasize learning best practices in the industry such as architecting and testing software, effective build and deployment, etc.
The emphasis here is less on theory, but more on learning skills that'll help you build something robustly and effectively.
Computer Engineering:
Computer engineering is similar to Computer Science, but is focused a bit more on hardware and low-level system details -- you can think of computer engineering as a mixture of electrical engineering and computer science. Things like operating systems, embedded devices, hardware and drivers, robotics, etc. are fields of study that might fall under "computer engineering".
In practice:
In practice, the differences between these three things will vary greatly from school to school and person to person. For example, in my university, the requirements and coursework for graduating with a computer science and computer engineering degree are almost identical, and so many people end up dual majoring in them. We also don't have a software engineering degree -- the expectation is that students learn about software engineering through their normal coursework + through internships.
On the other hand, other schools/other people place a huge distinction between the three (though I don't know enough about this to go into too much detail).
The boundary between the three of these things is always going to be a little hazy, so the exact difference and distinction isn't necessarily clear-cut. They're also not mutually exclusive -- you'll find that all three fields will have a fair amount of overlap, especially for any foundational material, and that having a firm grasp on all three disciplines will be very useful, no matter what you're doing.