The Role of Computer Science in Today’s Software Engineering

I’ll be running an I​ntro to Computer Science workshop​ at B​rainStation ​in Toronto on Tuesday, November 10.

Computer Science refers to the study of computation and would be more accurately be named Computational Science. During World War II, when the U.S. army had to perform complex computations to estimate bomb trajectories, they did so by hand. In fact, since most men were at war this job was done mostly by women.

At the time, these women were called “computers.” Today, the metal box you’re probably reading this on is the most powerful computational device we have and we now call them “computers.”

These boxes enable us to perform 2.5 billion operations per second on each processor and the internet connecting them all makes things very interesting. Computer Science as an academic discipline educates masses of eager undergraduate students and researches many fascinating topics such as artificial intelligence, cryptography, human ­computer interaction and system design.

While you can be an excellent software developer without ever studying computer science, and likewise a great computer scientist without ever developing software, understanding the interconnectedness of these two disciplines is a real advantage if you want to stand out in today’s software industry.

Software development is an umbrella term referring to all things related to the writing, integrating and maintaining of code that forms the instruction manual for modern computers. Software can solve tasks like “What is 2 + 2,” “Check todays weather,” “Call an Uber,” or lower the wheels on a plane as it approaches a landing strip. The average person might not know that when you perform a mundane everyday task, hundreds, if not thousands, of different software, often all written by different developers, must communicate to yield the desired result in a fractions of a second.

The abundance of computers making themselves useful in every domain imaginable has made software development a hotbed of creativity and boundary­pushing ideation. Have no doubt software is well on its way to rule the world. The gold rush has just begun.

But the real world has real problems and real problems need real solutions and both disciplines have flaws when considered in isolation. With only computer science it’s easy to get caught up in idealized problem solving and theoretical results with no real­world application. With only software development it’s more challenging to master a specific area, coding interviews questions can be hard and you may find yourself stuck in junior roles.

To understand this better let’s simplify the problem, say you needed a new desk. Going to IKEA would be the equivalent of editing a WordPress site, a very simple form of software development. Buying some wood and looking at some DIY guides online is equivalent to writing your own AngularJS front end along with a custom backend.

Alternatively, getting a degree in Forestry would be the equivalent to studying Computer Science, which is clearly overdoing it. There is no simple answer regarding the necessary skills to build the desk; rather, it’s a question of what the expected outcome needs to be and what is the most effective way of getting there.

I propose that in order to be a standout software developer in today’s industry, you must strive to hit a balance of both skill sets. If your Computer Science skills are your comfort zone, it’s hard to overemphasize the importance of the practical knowledge of software development. Spend time thinking about things like rapid prototyping software solutions, scoping and estimating, communication with developers, code life cycles and software maintainability. Try to zero in on a few languages and frameworks that you can put under your belt and call yourself an expert on. Most importantly build things, break things and build them again and again. There is no better way to learn than doing.

If software development is your forte, take some time to dig deep into a select few Computer Science topics. Data structures are all around you when you develop and are easily overlooked; understanding their pros and cons will empower you to use them to your advantage.

Algorithmic running time and space analysis will help you build scalable solutions out of the gate and minimize the number of code refactoring. Learn some interesting algorithms, recursive, greedy, approximation and graph algorithms, dynamic programming and network flows will enable you to think out of the box and aid you in abstract problem solving. Invest some time in your math skills; basic number theory and combinatorics are much more useful than you may initially think. Try to enjoy the intellectual challenge of the problem as much as the practical solution. When you find a solution try to optimize it, make it more efficient, scalable or elegant.

We are lucky to live in a time when a vast amount of content is available online for anyone that wants to expand their skill set. Ironically though, it also makes finding a starting point a daunting task.

From my personal experience, don’t hesitate, jump right in. Find a mentor and surround yourself with people that have strengths that complement your own.

At BrainStation, we pride ourselves on teaching our students the skills necessary for navigating today’s digital workplace. Lots of pieces need to come together to create a truly amazing digital product. We are constantly reevaluating our curriculum to provide curated, relevant content to make our students shine in today’s digital workforce.