Difference between computer scientist, computer programmer, and computer engineer?

<p>I'm interested in a career in computing, but I don't understand how a computer scientist, programmer, and engineers' jobs differ. Do the degree requirements for each job differ? Is one job more competitive than the others? </p>

<p>Are the folks behind Google more engineers or programmers or scientists? Photoshop? Facebook?</p>

<p>In short, what does each job require you to do?</p>

<p>Computer Science for software
Computer Engineering for hardware
Computer Programming is a tool they both use.</p>

<p>That’s a very general answer.</p>

<p>I think a computer scientist would be more likely to work on the things you listed.</p>

<p>Funny thing is…I have several family members in these fields. My husband, who has a degree in computer science is an IT manager, and was a software engineer, and also had been called a software developer. My mother, who also has a degree in computer science was originally called a computer programmer, a DBA, and a few other things. (of course, she has been in it way longer than my husband. My friend, whose husband has a degree in systems engineering, is called a systems engineer. Then I have 2 siblings with undergrads in econ and poli sci. Then they got masters in BCIS type masters and they seem to be doing similar things as my husband, only different topics. One does data warehousing, the other does Java.</p>

<p>SO…my point is…it seems to be all over the place. I actually asked this same question recently. But I do think a computer engineer is likely a hardware person. However, I did notice degrees in computer engineering and then it said -software or -systems. So…who knows. I mean…who knows what they will call these degrees in 10 yrs.</p>

<p>I do like civilengr’s answer too.</p>

<p>CE is definitely very hardware focused. It covers the physical engineering that goes into making computers in a very similar way to EE. There are definitely jobs at Google for CE majors, and a lot of CE majors know enough programming to do many of the things that a CS major can do. The biggest difference is the type of math that is covered in CE vs CS. Basically you’re looking at continuous(CE) vs discrete(CS) mathematics. Continuous is the classical math that you think of which is the calculus path. Discrete math has less of the fluidity you would find in engineering. Logic and algorithms are both significant parts of discrete math.</p>

<p>So in terms of what that means for you, choosing CE would aid you in being able to design and implement hardware because hardware is a physical object that requires physics. Choosing CS would allow you to be a better programmer and “Software Engineer” by being able to implement the math and logic used to design software.</p>

<p>I’m assuming that Computer Programming isn’t a major at your school, but if it is, it is most likely something you would want to avoid. If you are interested in computer programming then you might as well major in Computer Science since that is the discipline where you will learn the important components that go into designing software.</p>

<p>Computer Engineering: Hardware (mainly computer architecture related)
Computer Science: algorithms, system engineering, security, etc.
Computer Programming: just programming i guess?</p>

<p>Bottom line, anybody can learn how to program. All computer scientists are programmers. But just knowing how to program doesn’t make you a computer scientist.</p>

<p>Guys at google, microsoft, facebook are computer scientists.</p>

<p>I disagree. I was a BS in Computer Engineering. I currently write firmware for embedded systems for work.</p>

<p>Computer Science: High-level work – desktop applications, web stuff, smartphone apps, etc. (think C#/Java/Rails)
Computer Engineering: Low-level work – systems-level stuff, firmware, embedded systems, FPGA, VHDL/Verilog, ASIC (think assembly/C/C++)
Computer Programmer: I usually think of this as a guy who didn’t get his degree doing rudimentary levels of coding – basic web design, maybe IT, maybe databases (HTML/Javascript/PHP/MySQL/Perl)</p>

<p>Thanks for the info, everybody! It was the term “software engineer” that originally had me confused. I’d always thought that engineering was physical too, but “software engineer” just sounds so contradictory…</p>

<p>If you ever watch an interview with Mark Zuckerberg or a Google exec, they tend to call everyone that works at their company doing programming an “engineer” and this would be referring to the term software engineer which you mentioned. Software Engineers are simply the engineers of programs.</p>

<p>Looks like everyone has their own definitions, but I’ll add mine.</p>

<p>Computer scientist: a researcher (PhD or maybe an MS) who expands the boundaries of knowledge in the field of computer science. I would not call somebody who has a bachelors in CS a computer scientist, just like I would not call somebody with a BS in chemistry a chemist, a BS in math a mathematician, a BS in physics a physicist, and so on. I would reserve this title only for CS professors, post-docs, or researchers in industry.</p>

<p>Computer engineer: a graduate of an accredited engineering program who is designs computer hardware or embedded systems. I suppose this name could also be applied to researchers in computer engineering, but in academia I would use “Professor of Computer Engineering.”</p>

<p>Computer programmer: anyone who writes code for a living. I wouldn’t assume any particular level of education is required for this title; anyone from a high school graduate to a doctorate could be called a computer programmer.</p>

<p>Software engineer: in my opinion, this title carries more “prestige” than that of a computer programmer. However, I believe anyone can call themselves a software engineer without formal accreditation or education. I would expect somebody with this title to have a bachelors degree in computer-related field, but that’s certainly not always the case.</p>

<hr>

<p>In terms of roles:</p>

<p>Computer scientist: develop new algorithms and analyze their properties (designing software and writing software are not primary tasks)</p>

<p>Computer programmer: implement a software design (designing software and developing new algorithms are not primary tasks)</p>

<p>Software engineer: design software and sometimes implement (code) it; understands algorithms and how to apply them effectively to different situations (developing new algorithms is not a primary task)</p>

<p>For smaller companies these roles will blur, but I would say this a fair summary of the <em>primary</em> purpose for each person.</p>

<p>Computer scientist: academia
Computer engineering: computer architecture (for example, designing microprocessors, designing operating systems, and writing programs that directly interface with hardware)
Software engineer: writes software programmers
Computer programmer: anyone who can write code (for example, someone in high school)</p>

<p>Keep in mind that the major of “Computer Science” is a very misleading term. Computer science is not really a science. It’s more engineering-slanted, or, at its most theoretical, it’s basically applied math. Most people who get a bachelors in CS go on to become software engineers.</p>

<p>No idea where this notion that CS majors are on the path to academia comes from, but rest assured that’s not the case for most CS majors. CS majors can do anything software related and even firmware stuff. You are certainly not locked into being a researcher for your life. Most of the guys at the big tech companies are CS majors with a BS and no more.</p>

<p>Having worked with pure CS guys on Firmware projects myself, I would personally never hire a pure CS student to do Firmware, unless his degree specialized in it. Too much knowledge of hardware is required.</p>