The difference between computer science and software engineering

academics computer science software software engineering

What is the difference between computer science and software engineering

It’s common to talk about these two programs as if they’re one. Most universities may not have a distinction between these fields and the media/casual conversation often use the two terms interchangeably. However, there’s a fundamental difference in training/design and learning outcomes for these two programs that often gets lost.

Software Engineering involves...

  • Taking requirements and coming out with an efficient design.
  • Concern about the lifecycle of a project
  • Learning project management/documentation
  • Being comfortable with version control/testing
  • Understanding of practical implementation of various data structure
  • Being aware and competent in different programming/technology stacks in order to solve problems efficiently

Whereas Computer Science...

  • Has a high degree of comfort in math/logic and comfortable with very theoretical tools
  • Requires strong fundamental understanding of algorithms/data structure
  • Is interested in domain specific application of computational techniques (vision, networks, security, learning, etc.)

In casual conversations, when we refer to the need for people to learn “Computer Science”, we often are referring to software engineering. It may come as a surprise but many people who study “Computer Science” are quite lousy programmers. The more theoretical students may be able to get through a university Computer Science program with only coding in a handful of courses. On the other hand, a software engineer may shrivel up at the thought of talking about NP-completeness. And to be clear that’s ok for both sides – the ultimate end goal of these two different tracks are quite different. A Computer Scientist doesn’t need to know the latest and greatest programming language, while a software engineering doesn’t need to be able to prove NP-completeness to fulfill their jobs.

Most university departments don’t tend to have a distinction so the balance between engineering and science varies dramatically between universities. The most common complaints from university students s tend to be from those whose schools lean more on the science side – complaining about the program being too “theoretical” and having little practice/exposure to more hands-on design and implementation projects. For students who fall on that side of the spectrum, the best solution is to seek out internships/ individual projects that help practice these engineering skills. Senior design projects tend to be a good way of furnishing the engineering skillset. On the other hand, most software bootcamps tend to lean heavily on the engineering side – focusing on producing graduates who can immediately be employable by software companies at the expense of learning some more of the theory. For those, delving into the little theory that’s taught at these bootcamps will be extremely useful to get a more holistic and fundamental understanding of the field.

In terms of job prospects, both fields of study can lead to various software development engineer (SDE) roles – however, those with more of a theoretical background might need to put in the extra effort to bring their technical skills to the level that employers deem necessary. On the other hand, there’s a good chunk of jobs that expect more of a theoretical background (jobs in network security, machine learning, computational biologist, etc.). In these roles, it might be difficult/more hoops to jump through for a pure software engineer to obtain the domain/theoretical knowledge required.

Bootcamps and self-study tend to be a popular alternative to formal university training to get a software job. However, it’s quite a bit more difficult to learn the more foundational, theoretical techniques in that manner. For those who are more interested in the science side of the coin, it is extremely difficult to get all the parts needed for a complete theoretical study without formal university. On the other hand, people who are purely interested in getting a job in software, self-study, and bootcamps may be a viable option. I would caution, however, that bootcamps/self-study often has a focus on learning a specific technology stack – which is extremely useful but may be missing the importance of learning how and when to use various technologies and how to transfer knowledge from one stack to another.

In short, software engineering and computer science are two different ends of the spectrum. People who feel frustrated with one side should try to see if moving towards the other end satisfies them more.

Comments

topicTopics
academics study skills MCAT medical school admissions SAT expository writing college admissions English MD/PhD admissions strategy writing LSAT GMAT GRE physics chemistry math biology graduate admissions academic advice ACT interview prep law school admissions test anxiety language learning premed MBA admissions career advice personal statements homework help AP exams creative writing MD study schedules test prep computer science Common Application summer activities history mathematics philosophy organic chemistry secondary applications economics supplements research 1L PSAT admissions coaching grammar law psychology statistics & probability legal studies ESL CARS SSAT covid-19 dental admissions logic games reading comprehension engineering USMLE calculus PhD admissions Spanish mentorship parents Latin biochemistry case coaching verbal reasoning DAT English literature STEM excel medical school political science skills AMCAS French Linguistics MBA coursework Tutoring Approaches academic integrity chinese letters of recommendation Anki DO Social Advocacy admissions advice algebra art history artificial intelligence astrophysics business cell biology classics diversity statement gap year genetics geometry kinematics linear algebra mechanical engineering mental health presentations quantitative reasoning study abroad technical interviews time management work and activities 2L DMD IB exams ISEE MD/PhD programs Sentence Correction adjusting to college algorithms amino acids analysis essay athletics business skills careers cold emails data science dental school finance first generation student functions graphing information sessions international students internships logic networking poetry resume revising science social sciences software engineering tech industry trigonometry writer's block 3L AAMC Academic Interest EMT FlexMed Fourier Series Greek Health Professional Shortage Area Italian Lagrange multipliers London MD vs PhD MMI Montessori National Health Service Corps Pythagorean Theorem Python Shakespeare Step 2 TMDSAS Taylor Series Truss Analysis Zoom acids and bases active learning architecture argumentative writing art art and design schools art portfolios bacteriology bibliographies biomedicine brain teaser campus visits cantonese capacitors capital markets central limit theorem centrifugal force chemical engineering chess chromatography class participation climate change clinical experience community service constitutional law consulting cover letters curriculum dementia demonstrated interest dimensional analysis distance learning econometrics electric engineering electricity and magnetism escape velocity evolution executive function freewriting genomics harmonics health policy history of medicine history of science hybrid vehicles hydrophobic effect ideal gas law immunology induction infinite institutional actions integrated reasoning intermolecular forces intern investing investment banking lab reports linear maps mandarin chinese matrices mba medical physics meiosis microeconomics mitosis mnemonics music music theory nervous system neurology neuroscience object-oriented programming office hours operating systems

Related Content