What is computer science?#
Computer science, as I learned it in my CS1 course, is “the study of algorithms.” A Google dictionary definition says “the study of the principles and use of computers.” Wikipedia says “Computer science is the study of computation, information, and automation.”
While these aren’t necessarily incorrect definitions, I think they miss out on part of the story. Computer science, to me, is the blend of computational theory, practical software and hardware engineering, and problem solving. Computer science is as much of an art as it is a science; the science comes from the concrete theory, mathematics, etc., whereas the art comes from the people and the problem solving. To me, computer science is all about being handed any problem and being able to solve it or put a strong effort towards it.
There’s no precise formula, mathematical proof, or scary AI replacement for problem solving (thank goodness, or I would be out of a job) nor is there one for working with real people and real teams. Nor is there one for making good decisions [1]. Real people and real teams do these things.
What is software engineering?#
A fan-favorite programming site, Geeks4Geeks, says: “Software Engineering is the process of designing, developing, testing, and maintaining software.” This looks suspiciously close to the Wikipedia definition, but I think we’re all in agreement here.
Software engineering (“SWE”) isn’t just sitting and writing code for eye-straining amounts of time; it’s about designing things that solve problems and serve real people’s needs. It’s about testing to ensure safety in critical operations, and designing the software with longevity in mind.
What’s the difference between CS & SWE?#
Once upon a time, I thought there was no difference. I was quickly corrected. Software engineering is a subset of computer science, but as mentioned, it’s not all of computer science. A lot of professors and important people in higher education will quickly argue that a degree in computer science is far better than an online bootcamp or course focused on just coding. If you go out into industry, you will see and hear about many people who dropped out or had online training and are doing just fine. I have nothing against online courses and have done a few myself, but I can see the academic argument too. Understanding the full picture of computer science will help you be a better software engineer, which is the main job outcome from a computer science degree [2].
What isn’t software engineering?#
I don’t think software engineering is about the paycheck. It shouldn’t be. I’m always pretty grossed out and disappointed by the people looking at levels.fyi comparisons of which company is going to give them $900k a year and work them into the ground; or the relatively newfound ghost software engineers, who work multiple remote jobs and get paid more for doing less [3].
Yes, the paycheck is nice. Yes, it can positively change your quality of life. But if you’re doing it only for that reason, I think you will be left disappointed and frustrated.
Software engineering is getting frustrated at a problem but working diligently for hours, days, weeks, months, and years to fix it. It’s hours of debugging, only for the sweet relief of a fix.
I’m not saying I enjoy being frustrated for hours and days on end, but I recognize the necessity of that process, and seeing the fix or the final product makes it all worth it for me. If you’re not on board with that contract, it’s going to be a rough ride.