Computer Science and Software Engineering
Hello,
I’m not sure if this should be posted here. If it should go in the open thread please let me know. I figured this could be an interesting conversation, since many people on lesswrong seem to be programmers.
I am currently researching the difference/ pros-cons of pursuing a computer science degree versus a software engineering degree. By “software engineering” I mean an accredited 4 year engineering program that allows a student to become a p.eng. My understanding is that computer science is more theoretical and mathematical and studies things like algorithms, data strictures, complexity and computability, while engineering is concerned with the practical design,development, testing, and production of software.
I’m wondering what kind of jobs each degree can lead to, and if one is more optimal than the other in terms of:
1) short term salary
2) long term salary
3) promotability (job ladder climbing)
I’m sure there are more useful and relevent questions which I do not even know to ask. If there is anything you think might be a good question that others (or you) can answer, please let me know and I’ll add it into the OP.
Thanks!
My impression of how people become programmers is that it’s only weakly tied to education and much more strongly tied to what you do in your spare time (namely whether the thing you do is programming or not). I would expect an impressive GitHub repository and history of good answers on StackOverflow to be much more relevant to people hiring programmers than what you did in school.
Yes. Computer science is quite different from computer programming. Unfortunately, no one outside computer science knows that computer science exists. They think it means “really clever computer programming”.
No government agency funds computer science research. Only a few places in the world (Google, Microsoft, IBM, Sun) fund computer science research. So computer scientists very rarely direct research. They may get venture capital for a startup, if they went to MIT, Carnegie-Mellon, Stanford, Harvard, or maybe U Waterloo or U Mich. I can’t think of a single case of a VC investing money in a comp sci startup where the founders weren’t from one of those schools. My impression, though I can’t back it up well, is that VCs would rather invest in a firm run by someone who failed out of Harvard than someone who graduated from Brown.
If you’re brought onto a project run by someone who isn’t a computer scientist, they think a computer scientist is a programmer, and they will tell you to write and optimize database queries.
Ayup.
One of the odder moments of my professional life, back when I worked for Lucent, was being asked to find ways to integrate the Bell Labs team into our software development team.
Wow. What happened next?
The short answer is “I failed.” We made a game effort with respect to the real-time elements of the converged prepaid/postpaid rating system we were building at the time, but ultimately it just didn’t work… we had about a week’s worth of computer science we needed done, and about ten person-years of computer programming, and the two just aren’t fungible. They were nice guys, though.
I’ve never seen a software engineering undergraduate program like the one you describe. Can you point to one? (Update: after a bit of googling I found a few such programs, but they don’t seem nearly as common as CS programs. Personally I don’t recall ever meeting a graduate of such a program, and I meet a lot of new grads with CS degrees.)
I would be surprised if you found a statistically significant difference in outcome. Software development as a field has vigorously resisted professional certification of the sort practiced in other engineering disciplines like EE, CE, and ME. Frankly I’d argue that in practice software developers are not engineers in the same sense that civil engineers, mechanical engineers, and electrical engineers are. Employers of software developers don’t seem to care about “professional engineer” titles, at least not in the United States. Perhaps it’s different elsewhere in the world.
I also suppose this might change over time, if employers develop a preference for SE degrees and professional engineer titles. However, while such an expectation might affect the preferences of today’s students, it would be hard to measure in the present.
The curriculum for software engineer isn’t hugely different from the curriculum for CS. I suppose if the skills taught in the SE classes proved more useful than the skills taught in the CS classes that are omitted by an SE, then employers might become more interested in hiring SE grads. Right now I suspect most employers don’t really distinguish these two degrees.
Long term, I suspect any differences wash away. I wouldn’t expect to find any differences in long term salary or promotability between CS and SE grads from the same school. That’s because I’m finding it hard to imagine what entry level jobs an SE might be suitable for that a CS grad isn’t or vice versa. If there is a difference, it might be that a CS grad is more likely to continue on to a Ph.D. program, and that could certainly have a negative effect on lifetime earnings.
Here are two links to Canadian programs. I have never seen an analogous one in the States.
http://www.mcgill.ca/engineering/degrees/software
http://www.encs.concordia.ca/future-students/undergraduate-education/programs/software-engineering/
(Sorry for the urls… Is there a code or button to link things in text?)
If I were going to post asking for this kind of advice, I would ask in the Open Thread.
Thanks. Will do next time.
Try google and the appropriate stackexchange.
Seconded. It’s impossible to decide based on just the course names, but you might find someone who’s already taken those courses at those universities. Search for such people. Ask them, and consider both what they say and where they are now.
(My answer will be very US-centric.)
These degrees will be regarded almost the same by most employers. A much bigger factor is where you will get them—your choice of school affects how valuable the degree is more than the major, what your next four years will be like, and how much money you will spend on it.
A PE in Software Engineering is a brand new thing. The PE is very important in some transitional engineering fields, but actually doesn’t mean much practically in many others. In the software development industry, certifications have traditionally meant very little outside of government, government contracting, and internal software development at large, non-software corporations. (Think words like “enterprise”, “requirements specification”, “Java”...) If you are interested in stable work, go into government contracting. Mostly avoid the latter category, where you will be undervalued most places.
If you are interested in working for tech companies or startups (think words like “agile”, “free energy drinks”, “Python”...), then your degree is of a lot less value and certainly the subtleties of it are. Strengths here will be showing cool projects from your degree (CS wins a little here), personal projects, professional experience, etc. help a lot. A strong github profile or other portfolio will impress.
If you’re interested in doing interesting, stable, well-paid work but still want to program, consider a dramatically different degree. People who can program in science, engineering, economics, etc. get to work on really interesting problems and are considered really special in their fields. There is a lot of money for people who are really good at it and know how to sell themselves. Hopefully a few decades from now “programmer” won’t even be a career and domain knowledge will be the norm.
Often tech companies like programmers who have undergrad degrees in eg maths or physics, as these subjects are seen as being difficult.
ETA: should say that this comes from my experience from working tech companies in Cambridge, UK. I’m not sure to what extent it’s true elsewhere.
One of the things I’m considering is a joint math/ comp sci degree. Thanks for the suggestion.
That’s basically the idea that I read in this WSJ piece.
Can you provide concrete examples of people/companies/job titles? I’ve been programming for a while, and I realized recently that I actually find it pretty boring a lot of the time. If there was some way I could learn a new field in order to get paid more and do more challenging work, I’d be pretty interested in that.
Job titles can be things pairing off terms like research/computational/computer/software/[domain] with analyst/engineer/scientist commonly. In my experience, most companies learn that it’s usually easier to turn an “x” into an “x programmer” than to turn a “programmer” into an “x programmer”, so it can be inaccessible to do interesting work in fields that you didn’t start in.
One of the most accessible fields for outsiders tends to be biology. Employers include the NIH and federal agencies, state research labs like http://labs.fhcrc.org/compbio/ and http://www.wadsworth.org/resnres/bioinfo/ , biotech firms like Amgen and Stryker, and university research labs. Many problems in biology are not that hard to pick up and the field is short on programmers.
Another field welcoming of outsiders is finance. Working conditions are terrible (high stress, long hours) but pay is good for people with skills. Every major investment firm, actuarial firm, insurance company, etc. is looking for programmers and will convert you to understand their domain well.
Other engineering and science disciplines are tougher to crack, but if you’re looking to earn a degree or commit excessive amounts of study, can be great homes. It’s hard to get by in fields that aren’t desperate for programmers without a really strong intuition for the topic and potentially a really strong background in the right methods and mathematics. Engineering stuff tends to be dominated by defense and energy contractors, from SAIC to Lockheed to the thousands and thousands of little suckerfish companies sucking at the military-industrial complex’s teet.
There is some commercial presence to this as well, where companies mostly make software for the above sorts of companies to use. Big firms such as Siemens and Ansys have well-defined roles for software development with domain expertise. Small companies like Enthought and Continuum Analytics need cross-disciplinary thinkers to survive.
It bears noting that if someone is like OP and just starting their career, opportunities such as academia and national labs are open to them if they pursue the right academic path. These can be very rewarding domain-centric programming careers, but are a lot harder to transition to from other careers.
Thanks for your response!
I’m actually in a kinda similar position to the OP in terms of starting my career, I’m 21 and I have 3⁄4 of a computer science BA. My programming+web development resume is very good, but it’d be interesting to branch out in to other stuff (just lately I’ve been taking Coursera classes on machine learning and related stuff). On the other hand, money is really important to me (effective altruism FTW) so if a field doesn’t have the promise of offering Silicon Valley type salaries (150K-ish being reasonably typical) for a programmer like me, I’m probably not interested.
My understanding was that finance was in the process of contracting right now; can you say anything about that? Having an excuse to learn more economics would be cool though. For some reason the idea of working for a defense contractor doesn’t appeal to me.
I’ve never worked in finance and don’t know that area well, but I get a lot of cold contacts from the finance industry and occasionally meet people who work as analysts writing software who indicate there is a ton of demand. I cannot attest to salaries, but people seem to imply they’re very competitive compared to other fields.
I work in what is essentially mechanical engineering. Money isn’t very important to me, so I don’t have the highest salary, but I turned down a job offer doing similar stuff in NorCal where the offer was above that. I’m in my late 20s.
No matter what path you choose, I encourage you to squeeze out all the room in your degree you can for stuff involving other disciplines.
Any advantages to taking classes officially over just doing independent study?
Formal training means little in software development, but means a lot in fields where autodidacts are unheard of—it would go in your list of qualifications and you’d actually know the topics. I’ve never met someone who has taught themselves heat transfer or solid mechanics from scratch who seemed actually to remotely know what they are talking about, let alone communicate lucidly about it.
Hmm, that’s a very interesting idea, thanks!
I work for the US government, so this is my experience.
The career track of someone with a CS degree is more likely to be a programmer. Their career will focus on the “front lines” of the project, doing the grunt work. Mainly, these will be our contractors. Software Engineering is more of the leadership track. These will be the project managers, the eventual CIOs, etc. They focus on guiding the contractors on the project, keeping up with the burn rate of the finances on the project, the requirements to tackle on the project/preventing requirements creep, etc.
I’m more on the SE track than the CS track, so most of my duties lean towards the leadership aspect. It doesn’t pay as much as the contractor side of the project, but I have more job security than the contractors :)
Speaking from my perspective in the software industry: There is little difference between the two, and after a few years, no one cares what degree you have.
The general rule is that a highly theoretical training in computer science is correlated with higher salaries than vocational training. The software engineering degree you describe is in between. These distinctions have more to do with signaling of ability than with actual learning.
This says that newly graduated software engineering grads make more than computer science grads.
FYI, I started a Computer Science B.S. with a concentration in Software Engineering on Monday of this week at ASU. My startup is doing well enough that I was able to quit my night-job, but I keep seeing (what appears to be) low-hanging fruit that could be exploited with software applications in my industry, so I figure getting a degree should put me in a good enough position to know whether these apps are feasible and if they are how to go about getting them developed (plus, I love logic and missed school). PM me if you want to collaborate or compare notes.
Mind sharing what your startup does?
Home-based speech therapy (almost exclusively for children).
I suspect that the impact of degree choice (at least between these degrees) on career success is largely mediated by the impact of degree choice on your own enjoyment and satisfaction with what you’re learning.
Which do you find more interesting?
(While I’m making unevidenced guesses, here are some more. 1. Computer science degrees are probably harder to get into and harder to do well in, and even if they aren’t they’re probably perceived as being so, and a large part of how education affects your career is that employers use it as a rough gauge of how smart you are. So if you’re hoping for “high-end” software jobs, and if you expect you would do well in a computer science course, that might be a better choice. 2. You might try to supplement whatever official learning you do with something on the side that broadens your knowledge. Doing a software engineering degree? Read up on computer science topics. Doing a computer science degree? Get involved in an open-source software project, or build some things yourself and put them on Github, or something. 3. The prestige of the institution you attend probably matters, at least if it’s a good one.)
Depending on your personality, how much you know already, and the kind of places you would want to work, a programming dojo might be a good complement or alternative to college. I would guess that most companies don’t care much about the difference between software engineering vs. computer science degrees.