Degrees Demystified: Computer Science vs Software Engineering

I have been promising this article for quite a while now, but as with anything I feel strongly about, I would rather wait until I have the time to put in the effort it deserves. After a morning of proverbially bashing my head against the desk running gene ontology experiments in R, today appears to be that time!

With high school finished for the year and thousands of young adults getting ready to take a plunge into university, I want to talk about a question that is often the source of many debates: What is the difference between computer science (at the level of an undergraduate degree) and software engineering? I will start by addressing the obvious ‘conflict of interests’ here, given that I myself graduated from a Bachelor of Computer Science (and Bachelor of Computer Engineering) early this year. I do not think computer science is amazing because I chose it. I chose it because I thought it was amazing. Furthermore, some of the most intelligent people I know are software engineer{s|ing students}, so I have a great deal of respect and can appreciate the importance of both degree programs.

With that out of the way…

Why the confusion?

Where do I even begin…

Egotism

Let’s face it: Everyone thinks their degree is the best. After all, as hopefully intelligent individuals, if you thought another degree was better you would be doing that one instead. Normally this isn’t an issue, as someone interested in journalism isn’t going to be swayed by a physicist’s mocking of a communications degree. Unfortunately, when two degrees are as superficially similar as BCompSc and BE(Software), issues can arise.

I recently asked a group of software engineering students what they believed the difference between the two degrees were. The first response was exactly what I expected: “Computer scientists code until it works, software engineers code until it couldn’t be coded better”. For an intelligent yet easily-influenced high school student struggling to pick which degree to enroll in, hearing something like this at a university open day can very quickly result in dismissal the shorter (3 vs 4 year) BCompSc program as the “easier alternative”.

The corresponding and equally naive opinion of a computer science student often smells of academic elitism. “Computer scientists learn to solve complex problems. Software engineers learn how to document their solutions”. This dynamic is made even worse by unfortunate nomenclature, with computer scientists and software engineers often respectively insisting that the names “engineer” and “scientist” are poorly-deserved.

Industry

There are a lot of things that our comrades in industry don’t appear to fully understand (and for every issue I have with the tensions between computer scientists and software engineers, I have a hundred with the equally naive tensions between university vs TAFE-certified workers). When a company needs to hire someone to write code, that’s what they care about: Their ability to write code. As this skill-set sits at the intersection of BCompSc and BE(Software), there is little need for an understanding of what goes on during the final years. Nor is there one, for the most part.

So what’s going on?

They say a picture tells a thousand words, so here goes:

This is how industry views BCompSc and BE(Software)

This is how software engineers view BCompSc (and vice versa)

This is the reality of the situation

What are they really?

I quite like the following figure, which I have borrowed from a 2005 ACM report. Although projecting four different degrees (including electrical and computer engineering) onto one axis (hardware <-> software) is obviously a dramatic simplification, I still believe it is information that no prospective student should be without. It even includes the distant cousins of BCompSc and BE(Software): Information Technology and Information Systems.


http://www.acm.org/education/education/curric_vols/CC2005-March06Final.pdf

Computer Science

Below is a good description of computer science, produced by Concordia University:

Computer scientists are primarily concerned with the design of algorithms, languages, hardware architecture, systems software, applications software and tools. Applications range from simple game playing to the control of space vehicles, power plants and factories, from banking machines to intelligent fault and medical diagnosis. Computer professionals, in short, are concerned with the creation of computer and information systems for the benefit of society.

For the most part, I agree with this description. However, one thing that never ceases to annoy me is the emphasis that people put on the way you do things, rather than the big picture of what it is you are trying to do. Computer science is a field that predates the modern computer, and a lot of people seem to forget this. If you wanted to describe it to your grandmother, “it’s a degree in applied mathematics” would probably be more accurate than “it’s a degree where you learn how to code”.

Better still is a description that one of my colleagues at the University of Melbourne (a Carnegie Mellon computer science graduate) presented: “Computer science is a degree in learning how to solve tricky problems”. Any “learning to code” is entirely secondary to this purpose and is simply a reflection of that fact that high technology permeates every aspect of modern society, and any student who reaches the end of their degree without an appreciation of this has, in my opinion, received little value for their time and money.

Software Engineering

Again, from Concordia University (I have removed the first line, because I simply do not agree with it):

… Software engineers learn much more about creating high-quality software in a systematic, controlled, and efficient manner. Software engineers are trained in all aspects of the software life cycle, from specification through analysis and design, to testing maintenance and evaluation of the product. They are concerned with safety and reliability of the product as well as cost and schedule of the development process.

This is another excellent description, and I agree with the distinction it is making. Software engineers write better software, and it would take a very talented (or arrogant) computer scientist to deny it. Where computer science is about taking complex problems and deriving a solution from mathematics, science and computational theory, software engineering is very much focused around designing, developing and documenting beautiful, complete, user-friendly software.

So which is better?

For anyone not willing to sit through 1000 words of my rantings, the answer is simple: neither. That being said, each certainly lends itself to more readily to different areas. If you are interested in academia or industrial R&D, I would definitely suggest computer science. If you see yourself developing and maintaining large software solutions for large businesses, software engineering is probably more for you. If you just love the process of writing code and have little idea of where you’d like to end up in 3-4 years, toss a coin and decide later.

In closing, I would like to emphasise that this article is full of personal opinions and generalisations. Just because you are a computer scientist doesn’t mean you cannot write good code, and it certainly isn’t the case that software engineers are code-monkeys that don’t know how to problem solve. (Nor is everyone in industry too dull to understand the difference between degrees.) I am just trying to shed some light on the general focus of the two degrees, and hope that it will prove useful to some prospective students out there

Please feel free to add your own comments or commentaries below!

25 Responses to “Degrees Demystified: Computer Science vs Software Engineering”

Read below or add a comment...

  1. IT Student says:

    Very nice write up! (Wish I had come across this during my HSC year [2011]) I’ve researched a lot into computing degrees from multiple universities around Australia, mainly NSW and Melbourne, and can definitely say this is an accurate depiction of where all of these degrees currently lie.

    I’m in my Third Year of IT at UTS (http://handbook.uts.edu.au/courses/c10143.html#F17 which was meant to be a three year degree, but I failed one Business Info Sys core last semester (due to the pure garbage that doesn’t need to be taught – [it was legit a subject on how to read articles and discuss them - I wanted to do CE/CS so badly then!] and have kind of come to a breaking point crossroad).

    I’ve been more interested in touching the low-level hardware of things since I was about 14 (I would look at my PS3 and would want to know all of the low-level intricate details inside that makes it tick, so maybe I could one day design the hardware for the next upcoming console or GPUs). Many times I think I should have done a CE degree (or transferred), but there are many ongoing external factors/pressures which ended pushing (and keeping) me towards an IT degree. (I.e. Australian job prospects for CE-related jobs is incredibly low/next to 0 [but I wouldn't mind moving overseas now, if it means I could secure a job at a hardware design company i.e. Intel, AMD, Nvidia, Sony], two 6-month industry placements offered, 45.5k scholarship degree fast-tracked over three years, my High School teacher encouraged us to apply and it looked like a good program by glimpsing over the core subjects and industry exp., also, being in second Semester, First Year, we’re already working so it made it even harder to consider to change when you’ve made so many human relationships/commitments already, and my maths skill set is limited (I haven’t practiced it since High School [Mathematics 2 unit] three years ago, but I did enjoy Calculus), I did no Physics either in school (The High School wouldn’t let me do it as a) my Science ranking was in the top 60s, and I needed to be in the top 40s and b) The Subject Coordinator said we didn’t need Physics for computing, and c) Physics was on at the same time as VET: IT [I did all three IPT, SDD, VET:IT Computing subjects in High School]), but like reading up on its applications).

    My IT degree (http://handbook.uts.edu.au/directory/stm90668.html) contains 7 cores which were introductory technical subjects which I said would be okay when glimpsing over it (Intro to HTML/CSS, Linux, Networking, Java, Object-Oriented Design, SQL, but from what I’ve been through with my 7 other info sys cores, the experience hasn’t been all that thought provoking, the Info Sys subjects are absolutely pointless [In a lot of ways, I guess SENGs would do some Info Sys subjects, but not much - depending on the uni]).

    UNSW has really good programs available (http://www.cse.unsw.edu.au/studying-at-unsw/undergraduate/program-options/), and they have a lot of hardware-related subjects, i.e. Microprocessors and Interfacing, Operating Systems, Computer Architecture, I’m not sure if I should head onto Postgraduate studies up to MIT (via Grad Cert/Dip which is accumulated to MIT). http://www.cse.unsw.edu.au/studying-at-unsw/postgraduate-coursework/master-information-technology/course-list/index.html (which has the same COMP subjects as undergrad Comp Sci/CE/SENG, minus the core maths/Physics subjects…do you know why the postgrad MIT degree contains no maths or physics, when the undergrad CE/CompSci/SENG degrees do…? Should I transfer to undergrad while I can? (I’ve never really considered myself being that great at maths, but I do appreciate it, same goes with Physics, and there are bridging courses available for $380 ea. subject.

    Should I finish my Bachelors and go the Postgrad route (2 year course for MIT) or should I change to CE ASAP?! (4 year course and Bachelor credits will be non-existent/non-transferrable (Networking, I find pretty interesting, because it’s probably the closest area IT has to hardware). I’ve come to the point where I don’t even care if I fail my IT degree or not, that’s how disinterested I’ve become in my spare time with it. I read up on a lot of science and Engineering online articles. (I’ve been on two six-month industry placements working in the IT sector, but nothing low-level, although I have met embedded hardware guys at a company and my eyes just lit up )

    Sorry for the long rant, I just needed to ask someone and I thought you’d be perfect to answer it since you’ve done CS/CE. Would a CS option be better since it touches some hardware stuff and the course is 1/3rd electives at UNSW any ways? Thanks! I look forward to your reply.

    I’m sick of pretending to be 100% happy/follow the crowd, when I know for a fact I could be doing so much more with what I ACTUALLY WANT TO see myself doing in the future. +1

    • David Budden says:

      Short answer to a long question: If you’re already 75% of the way to completing your BIT, and transferring to BCS would see this three years count for zero, then finish the BIT. There are plenty of universities (e.g., UniMelb) that offer CS as a 2 year coursework Masters. Not only would this pathway take less time from where you’re at now, but a) you’ll have two degrees instead of one (inc. one at postgraduate level), and b) it will offer a direct path into a Ph.D if this is your interest (you need either a Masters or Honours).

      • IT Student says:

        Woah, thanks for the prompt reply! Appreciate it. Yeah, I guess so. I’ve just become so demotivated to finish IT, mainly because of this very reason of not learning anything low-level/how things actually work. I hate the business/project management side, I don’t even want to go into that field, so why the hell should I be studying it atm?!

        The naming conventions for Postgrad degrees are weird in NSW. USyd and UNSW name their postgrad degrees with GratCert/GradDip/Master of IT, but UNSW can purely contain Comp Sci/CompEng subjects. (but it doesn’t cover all of the subjects taught at undergrad level). I live in Sydney, so looking for at UNSW atm.

        CE undergrad: http://www.handbook.unsw.edu.au/undergraduate/plans/2015/COMPBH3707.html

        MIT postgrad: http://www.handbook.unsw.edu.au/postgraduate/programs/2015/8543.html

        Here’s a map outline of all of the choices you can do for MIT/GradDip/GradCert http://www.cse.unsw.edu.au/opencms/export/sites/cse/studying-at-unsw/postgraduate-coursework/downloads/PGRDrequisites.pdf

        I want to do Microprocessors & Interfacing > Digital Circuits & Systems > Computer Architecture

        Also Operating Systems, Data Structures & Algorithms.

        I guess it’s best to just finish off BIT for some recognition in case things just go all south from here on out, I’ve come this far. Can students apply to study for another Bachelors? E.g. CE? Would UAC enter me in as a mature aged student? Thanks!

        • David Budden says:

          Some universities (e.g. Newcatle) adopt a model where there are many, many specialised undergrad degrees (BCS, BCE, BSE, etc). Others adopt the ‘Melbourne model’ (I’m not sure if anyone outside of UniMelb actually calls it that…) and only have a small number (~5) of general undergrads followed by specialised coursework Masters.

          If you’re already close to finishing BIT but are passionate about CS/CE, I would strongly suggest finishing and then applying for an MCS/MSci(CS)/etc. at one of the latter institutes. It may not be supported by the university you had in mind, but it’s worth stepping outside of your geographic comfort zone (like I did for my Ph.D) for the sake of having a Masters degree versus a second Bachelors degree (and in 2 years instead of 3-4).

  2. Troy says:

    Wow, that really cleared away the fog. I just met with a university recruiter who didn’t give as clear of an explanation. Thanks.

  3. Chathura says:

    Got some idea. But still confused! But this is helpful…

  4. tosif says:

    m really puzzled ryt now about chosing CS or SE..which is better??..i heard b4 that if a person is doing “bachelor of Cs” then he can later decide whether he want to chose SE or may study extend in CS??Is it true….? and i want to be SE engineer then i y shouldnt i directly chose SE rather doin Bachelor of comp science?

    • David Budden says:

      It depends a lot on the university. At Newcastle, BCS and BSE were two separate degrees. Certainly, if you know from the outset that you want to work as a software engineer, it makes perfect sense to enrol in a software engineering degree!

  5. fatima says:

    can a person take up software engineering for their masters after studying computer science at undergraduate level?

  6. Software engineering is the study and application of engineering to the design, development, and maintenance of software. Computer Science covers the core concepts and technologies involved with how to make a computer do something.

  7. John says:

    You discussed the differences between computer science and software engineering, what about computer engineering? Are computer engineers trained to do the functions of CS and SE? My son is interested in computer engineering and all I have been reading about is that there is a projected unlimited jobs for C. scientists. Can somebody offer a detailed explanations between computer engineering, CS and SE please.

    • David Budden says:

      So hopefully I can answer this from experience, because my undergraduate degrees were in CS and computer engineering

      If you take a look at the Figure under “What are they really”, you can see where computer engineering (CE) falls along the harware < --> continuum; i.e. CE is more hardware-oriented than CS. You still learn the fundamentals of coding in a CE degree, but it quickly diverges to deal with things like digital logic design (FPGAs etc.), C/assembly programming for microcontrollers and fundamental circuit theory. It’s almost half-way between a CS degree and an electrical engineering degree.

      As far as job prospects, there’s a huge demand for graduates from any of these degrees. I guess it depends on whether your son is more interested in making large-scale, end-user software (SE), using programming and mathematics to solve tricky scientific or engineering problems (CS) or really drilling into how computers physically work at the hardware level and writing code that interfaces with that hardware directly (CE).

      If he’s not really sure (which I can certainly empathise with), I’d suggest starting in CS. It’s relatively straightforward to transition from CS to either SE or CE, but I imagine the SE < --> CE transition would be far more difficult to make.

      I hope this helps. Keep in mind these are all generalisations and personal experience from the Australian university system, and there’s no substitute for looking at the individual subjects offered in each degree at the particular university(ies) you’re interested in!

  8. I am a CS student, as far as i think, i could pass a hard time in learning algorithms, as they are very difficult and creative. I am also experiencing to write codes using procedural and object oriented languages. but CS is more algorithmic study and has a very deep thinking process in creating a real program.
    SE is implementation of those programs which is a skill that most of the CS students don’t know about.
    CS is the study which gives a sensitive intuition to mind… most of the life is passed in thinking. I may cause a human in psychological problem easily.
    SE is more practical that’s why no more thinking is needed and no change for psychological problems.
    CS is curved and SE is straight.
    If you ponder CS courses you will find more algorithmic stuff in the books.
    Algorithmic study is the way the thinking is based. CS degree is harder than SE because of understanding Algorithms. SE degree is harder than CS because of understanding implementation.
    There is a vice versa difference. But CS is has more branches to get into.
    SE is the branch restricted to analysis testing and debugging and management.
    I suggest everybody when choosing any of field don’t hasitate just choose one of them.
    Both are excellent degrees.
    I Love both

  9. shaheer says:

    very good description I think both are same.Both are doing code in better way so If u have in u than u be in the top.

  10. Matt says:

    It seems to me that CS degree will get you a job, but with no upward mobility. SE seems to allow for management positions and in design rather than just cranking out code. Right now I’m in the crossroads with an associates degree, but I can go either way, but I’m leaning more SE at this time. I might want CS if it really does have more hardware though, as I love the hardware aspects of computers. Could anyone verify and explain hardware interactions between someone going into CS or SE?

    • David Budden says:

      I would argue that CS and SE both offer upward mobility, but I appreciate that this is very dependent on the particular degree, university, sector and company, so this observation may very well be true in your scenario. Keep in mind that computer science is a “real science”, and as such there are countless opportunities in the emerging biotech sector and other similar fields.

      My alma mater offered a “double degree” (literally two bachelors degrees in 5 years rather than the cumulative 7, due to overlaps in requisite coursework) in CS and computer engineering. As computer engineering is inherently a hardware-related discipline, it may be worth investigating if you have similar options available to you. You would have to look at the subject breakdown for your specific associate degree options to see whether CS is more-or-less hardware-oriented.

  11. CS Major says:

    While this is an informative article, I strongly suggest each individual student look at the curriculum of their university of choice.

    I’m attending the University of West Florida, and while it’s a smaller school, it has a very good Math/CS/Engineering department. I love the school and my decision to attend it.

    Upon initial registration, I chose their Software Engineering program. As I started getting into the meat of the curriculum, taking classes like Data Structures and Algorithms and Software Engineering, I found the SE courses to be mindless memorization of trivial facts while the CS courses (Data Structures, Systems and Networks) were really, really hard and intellectually stimulating.

    I switched to Computer Science, and after seeing SE courses in action, there’s absolutely no way an SE major from my university would be better prepared than I would for writing software. Three of my close friends switched majors also from SE to CS because the SE curriculum wasn’t challenging enough. We often joke how the SE program is a watered down CS degree with some business courses peppered in, because that’s exactly what it is.

    Again, this curriculum could likely vary widely between Universities, but this is my experience. My personal opinion is that if you’re able to do a CS degree (It is a harder degree in most cases), do that. You’ll be better off than the SE major straight out of college. It’s much, much easier to learn the SE process then it is algorithm analysis.

    • David Budden says:

      Although I fundamentally agree with the importance of checking the individual curricula at your university of choice, I maintain that “really hard and intellectually stimulating” is a very subjective and individual thing. Some people are more excited by mathematics and all things related (I am one of these people, so I can empathise), and will find (say) learning about correct object-oriented design and the application of established design patterns to be “mindless memorization”. However, it is important to keep in mind that there will also be people who find that latter to be interesting and stimulating by virtue of it having clear and direct applications to improving their coding quality and productivity, and rather find more abstract CS concepts like automata and Turing machines to be the “mindless memorization” without practical usage. Without having looked at your University’s curricula, I dare say this may be what is happening.

  12. Tareq Odeh says:

    I think Computer Science is the general base where person can decide later which profession he can be part from. Professional experience and expertise in a field will lead to Hook-up with Industry position in Market.

    Never the less, I can see both are same, as most of both tracks are shared specially in University. But, I also think it would be fare to make it under Single Graduation Title which is “Bachelor of Engineering in Computer Science” rather than “BCS OR BES”.

  13. Sergio G. says:

    Even though it’s your personal opinion and generalization, you are absolutely right.
    I have done extensively research on the subject and your explanation and samples helped me on my decision going for SE instead of CS. Thanks, great article!

  14. Lakhan Mane says:

    Thank you very much i had confused in both of them your advise is better for me thank you

  15. Teerna says:

    Thank you very much.. Gave me an insight into choosing between the two

  16. sheraz says:

    superb and suplended description

  17. Short and succinct. Great write-up.

Leave a Reply to sheraz Cancel reply