Friday, June 5, 2020
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 a 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 A Computer Science Has a high degree of comfort in math/logic and comfortable with very theoretical tools Strong fundamental understanding of algorithms/data structure 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 though of talking about NP-completeness. And to be clearthatââ¬â¢s okfor 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 university. 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 bo otcamps will be extremely useful to get a more holistic and fundamental understanding of the field. In terms of job prospects both types 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. Are you interested in connecting with a computer science tutor like Aditya? ;
Subscribe to:
Posts (Atom)