Computer Science vs Coding vs Software Engineering

Brief thoughts on this distinction:

Also I’m defining these things myself. We can see things like codeacademy aim to teach skills such as development as code, but I’m going to assert that all three of these things are defined by their most common definitions/what I’ve been made to understand over the last few years.

To be fair, I’m not strictly sure if there are formal definitions of the above, but when I talk to people involved in the Computer Science major, the vast majority want to be developers. (I can only assume for monetary reasons).

When you read about code education you see “everyone should be able to code.”

And when people speak of hiring people who code, oftentimes they look for Software Engineers. Sometimes developers. And some people take issue in the distinction (I do see that engineer carries higher status than development, and in some sense one could distinguish development from engineering, but I don’t think in modern layman’s terms there is much of a distinction between the two, for better or worse.

In any case, I think these three terms (Computer Science, coding, and software development/engineering) being confused causes problems at times.

Not everyone should be a computer scientist. (Just as not everyone should be an attorney.) Computer scientists solve all sorts of complicated problems like machine learning.  Notably, there are some real problems we haven’t addressed in the machine learning sphere. For those familiar, examples would be the contours formed by dimensionality reduction. We see they can form portrayable shapes, but what the shapes actually mean we still struggle to understand.

Coding is a skill which can be applied to many things. Coding doesn’t mean developing some sort of fancy website or tool. When it’s said that everyone should be able to code, generally it’s that people should be familiar with concepts like looping, forking, etc. People should be able to understand this, and perhaps apply it for simple purposes like reading the first and fourth line of a file, and then taking their difference.

Then there is development. Though development can be used to solve complicated problems, in general it’s not going to publish academic papers. An employee at Amazon implementing a new shopping cart, or an employee at UPS writing an online login or personnel system is likely a software engineer/developer.

I’d contend the three are pretty distinct. When people switch the definitions of these three separate fields around, it creates confusion and poor messages. A lot of Computer Science in school imparts few of the skills (besides some programming skills) required for software development. Coding is definitely imparted. But everyone being able to code doesn’t mean everyone should be capable of writing complex systems of code or performing cutting edge research in P vs NP or machine learning or algorithms.

One of my frustrations is the statement “everyone should be able to code” when they mean “everyone should be able to do software development”  Most of the ‘learn coding’ initiatives for the youth are centered around learning basic programming/coding skills, not development. In a similar sense, everyone should be able to write, but not everyone should be an author or technical writer.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s