Computer Science Education Week - Why Everyone Should Take A CS Class

In honor of Computer Science Education Week, I am doing a series about Computer Science. The first two posts, if you missed them, are How I Got Into The Field and Programming For Fun. Today’s topic is why everyone should take an introductory CS class. Problem solving: Programming is the art of taking a complex problems and breaking […]
Keyboard

In honor of Computer Science Education Week, I am doing a series about Computer Science. The first two posts, if you missed them, are How I Got Into The Field and Programming For Fun. Today's topic is why everyone should take an introductory CS class.

Problem solving: Programming is the art of taking a complex problems and breaking them down into simple step-by-step instructions for the computer to execute. You might have thought Computer Science was very complicated, when essentially it's the art of making things very very simple. Bet you didn't know CS was so zen!

Design usability: Design! See, another thing you didn't think was related to Computer Science! At some point in your Computer Science academic career, you'll end up with a teacher who will ask you to make a program with a user interface but won't give you guidelines for what the interface should look like. At first you don't think much about it and throw your buttons and text fields willy-nilly on the screen because, really, who cares? It's just a homework assignment and no one will see it. Next thing you know, you've spent one hour coding the functionality and 3 hours rearranging the layout because your interface looks awkward. You learn to place yourself in someone else's shoes, to think "how would the user use this?". You might try for years to unlearn an eye for usability design so you can use certain websites which don't appeal to you layout-wise, but in the end it's a good skill to have.

Appreciation: If you never did any programming, you might get the impression that computers are magic. You push a button and they just work, and sometimes they don't because computers are evil little creatures. While I'm a programmer and still complain when a program doesn't just work effortlessly, sometimes I remember to sit back and be grateful for how effortlessly it does work 99% of the time.

Logic and critical thinking: OK, I'm going to cheat on this one. Logic and critical thinking are arguably the most important aspects of Computer Science. Yet the best class for this is not in the CS department, I'm sorry to say, but lies in the Mathematics department. I'm talking about Discrete Mathematics. There's a lot of overlay between Computer Science, Mathematics, English, and Philosophy as far as logic is concerned. Discrete Mathematics in my experience does the best job at covering it without getting lost in the ethical dilemmas of Philosophy, the composition of English, or the programming syntax of Computer Science.

So many times I find myself frustrated with the nonsensical arguments I hear from people who just don't seem to be able to piece an argument together. For example, I was at Home Depot the other day to look at flooring. There were 3 options for hardwood floors: click-and-lock (cheapest), engineered (middle range), solid (most expensive). I knew the basic difference between click-and-lock and engineered, but I wasn't sure why engineered was more expensive so I asked. This was the answer I received: "They are both the same quality, it's just that click-and-lock is faster to install so that makes up for the price difference."

That, my friends, would be a valid argument if click-and-lock was more expensive than engineered. Since click-and-lock is in fact cheaper than engineered, being easier to install would do the opposite of making up for the price difference. I don't think the person I was dealing with was less intelligent than me. I think we too often choose to memorize what someone else said and repeat it without thinking, perhaps even jumbling up the original message in the process. This is where a class in critical thinking can reinforce the habit of analyzing a question and forming a thoughtful answer, not just spitting out a memorized spiel.