From time to time, I’ve had to explain what I studied in college. I usually threw out the generic, “I’m in computers,” since it’s a safe thing to say to people who don’t know what the field is really about. Very few actually do, including those who still call it their major. I’m here to clarify some of the misconceptions in the hopes it will help correct misguided viewpoints and assist those who are still deciding what to do.
Firstly, let’s go over what it is not. The aim of computer science is not to create a new breed of code monkey button pushers. Unfortunately, most who study this field turn out that way. Computer science is also not playing games all day. Writing games is not the same as playing games. Being good at one does not mean you’ll be good at the other. Computer science most definitely is not doing tech support. You don’t need to spend years at a university to rearrange icons by penis.
Now that’s out of the way, let’s talk about what the field actually consists of. The fundamental goal of computer science is solving problems. That’s why it’s called computer science. I must stress the “science” part because it is frequently overshadowed by the word “computer.” Computers are simply used as tools to solve problems, but without a well designed plan, they are useless.
Freshman are usually taught basics consisting of data structures and algorithms. These are commonly elementary, which lead many people, mostly electrical engineers, to believe that computer science is simply basic programming, since this is the only exposure to computer science they have had. Although these concepts start out basic (sorting algorithms and the like), they develop into harder problems (graph theory, P vs. NP, etc). Common interesting graph theory problems include shortest path algorithms and other similar solutions that are useful for network and telecommunications problems. Studying NP-complete problems is useful for determining what problems are even solvable through the use of computers in the first place (don’t anyone dare say Moore’s law will make the brute force approach practical for all problems).
A common source of befuddlement for freshman is the introduction to formal logic. I know that I thought my first year logic course was simply just a weed out class. That was far from the truth. Every semester, I was introduced to new uses for predicate calculus. You start out with learning how to define problems. Then, you can use the notation to define an algorithm. Finally, you must prove the correctness of your algorithm using the same language used to define the problem and the solution.
Let me explain it this way: Anyone can pick a hammer, nails, and some 2×4s and build a dog house. Does that make them an architect? Would you trust just anyone who could use a hammer to build a house? How about a sky scraper? Suspension bridge? I’d imagine you’d expect someone who does such things know about support structures and weight distribution as well as the tensile strength of all the building materials. The higher up you get, the less you are concerned with whether or not this person can use a hammer.
Likewise, a computer scientist can be thought of in much the same way. Much is the study of computer science is focused on the feasibility of solutions to a problem and the best approach to them. Programming is simply the manifestation of these ideas, but to truly appreciate the solution, you must look past the implementation and more at the design it represents.
Unfortunately, this isn’t necessarily true in the industry. Companies are predominantly driven by time to market. Most executives tend to think of software as something ethereal that can be conjured rather than needing to be produced. The problem is that there are those who will throw something simple together in an effort to build the illusion that software is quick to build. Software thus is poorly designed and must be quickly patched, leading to even more poor design choices, thus starting a vicious cycle.
Beyond industry, computer science also covers research topics related to everything from artificial intelligence to advanced wireless networking protocols. All of these use programming to test theories, but the focus, again, is on solving the problems.
Before entering into computer science, you must ask yourself what you want to do? Push code out? You don’t need go to school for that; you just need passion for the art, much like a carpenter with wood. If you want to design large scale projects, you must appreciate intricacies of software architecture. If you just want to work on interesting research topics not out for mass consumption yet, then staying in school for a long time is the way to go. That’s when you focuse on the “science” aspect.







