What’s the difference between computer science and software engineering?
Computer science isn’t software engineering
A lot of people study computer science, but they end up working as software engineers.
If you’re planning to work in the industry, you need to realize that there are fewer computer science positions in business. The vast majority of jobs are for software engineers. The difference between these two is that software engineers don’t have to be good at coming up with novel ways to solve mathematical problems, and computer scientists don’t need to be good at making scalable, maintainable systems.
So as a computer science student, unless you develop the skills of engineering, it’s going to be a problem because most jobs out there are for software engineers.
Here’s our list of the things you won’t learn
with a CS degree
No long term view on software
In CS classes you attempt problems, get feedback, then never touch the code again. Engineering is the opposite — you often have to maintain the things you create for a long time. There is also almost never just one version. Users demand more and more features that you will have to add. Occasionally, these are features that make perfect sense but you never accounted for when you architected your solution, and you won’t be able to add them without major changes.
They can’t define the problem
If you can’t define a problem, you have no business trying to fix it. As a software engineer, people will be coming to you with vague, unspecific scenarios and ask you to handle them. You need the ability to listen and weasel out what needs to get done.
Poor user intuition
Let’s face it, creativity is necessary as a software developer. You need to be able to come up with edge cases and weird usage patterns while building your program, for the sake of security, performance, and product quality. Undeveloped engineers don’t think of all the ways users will try to use their program. They think the world should bend to their will, rather than them making a product that can handle what the world will throw at it.
Take Tesla’s newest car, the Model 3 as an example. Unlike almost every other car that has a glove compartment, the Tesla’s doesn’t have a handle to open it. Instead, you’re supposed to open it in the control panel. Well, a customer of this car got into a major accident, and his touch screen panel was destroyed. He had a very hard time getting his documents from the glove box, and Tesla CEO Elon Musk had to go say this problem would be fixed with a software update making the glovebox automatically open when the car gets into an accident.
This oversight (as it should have been included by default) was most certainly caused by someone green in the industry. When software engineers are coding, they aren’t just writing software — they’re creating a product, and they are partly responsible for the product’s direction. Unlike computer scientists, they need to think of the many out-of-the-box ways their code will be used.
Poor debugging skills
Good engineers make it a point to not create bugs (by thinking a lot), while poor engineers have a defeatist attitude towards them. When they do come around, they know where to look to fix the problem. You need to have a wide breadth of experience. After all, software is built on layer after layer of abstraction. You need to practice coding on different layers to really build an intuition. Work with high level software, low level, and have experience with the command line and configuring your environment.
No knowledge of the ecosystem
Another problem with novices is they don’t know what’s out there. There are so many problems, and so many solutions. Your job as an engineer in the industry is RARELY about creating new solutions! You are often actually just connecting existing solutions to new problems. You really need to know the landscape of the problem domain you’re in. For example, while on vacation I met a fresh graduate who started work at Amazon. When I told him I worked in ecommerce myself, he had no clue how people would sell with their own website. You need to have knowledge of the industry you’re working in, and you also need to know the software landscape of your stack. A lot of programs that are open source could solve a task you’ve been assigned, if only you knew they existed. Remember, Bill Gate’s favorite kind of programmer is the lazy one.
To be fair, some schools do try to address this problem by having specific software engineering courses. For example, you can find the reference material used by the University of Singapore here: http://www.comp.nus.edu.sg/~seer/book/2e/