Rahul Simha
Professor of Computer Science



Home
Bio
Research
Publications
Teaching
Software
Students
Advice
Misc


Department homepage

Answers to some questions asked by freshmen considering CS

Do you have to know a lot of computer languages or just 2 or 3?
What's important isn't how many languages you know, but how well you've learned problem solving through programming. The best programmers very likely know two languages quite well, with passing knowledge of a couple more. In school, you'll start with one language and get to learn that quite well, and add on a second language later. Learning the second language after a few courses in an earlier language is much easier. Some languages and their surrounding tools are complex, so very few people need to know everything about a language, just enough to be proficient in problem-solving.

Does computer science involve a large amount of physics, chemistry or biology?
The reality is, the vast majority of CS majors and graduates never encounter any of these sciences after their last course. That said, for those interested, there is a rich intersection between CS and each of these fields. For example, computational biology and bioinformatics are two areas of both research and commercial software that involve CS and biology.

Is computer science all about programming? How much of computer science is programming? What proportion of computer science is programming? What other topics are covered besides programming? What other aspects of Computer Science are there besides programming? Do you sit in front of a computer all day if you go into CS? What do computer scientist do besides code all day? Will I spend most of my career doing programming?
A popular analogy that's sometimes used to address this question goes like this: computer science is no more about programming than astronomy is about telescopes. In some ways, the analogy works: programming is a central tool in CS, but core intellectual questions of the discipline aren't about programming. I think this analogy is only partly correct because it doesn't address the real anxiety behind the questions: learning to program is decidedly harder than learning to use a telescope. No potential astronomy student worries about the difficulty of learning to use telescopes.

This is an important issue, so let's look a little deeper.

  • Most people with CS degrees aren't programming now. At this very minute, as you are reading this sentence, you could ask: how many CS graduates are programming right now? My guess is, a small fraction. Why is this? First, there are many careers in CS. Let's start with the most common: software engineer. It's fair to say that the first few years in the software industry involve programming. A few years into the job, however, software engineers spend a lot more time on design, dealing with clients, and managing software projects. And many go on to other jobs that are software related but involve no programming at all. As for other careers, such as research or entrepreneurship, there is very little programming (because others do it).
  • Programming is fun and satisfying, so CS folks do program. Now, here's the thing. Once the initial fears about programming are overcome, once programming becomes comfortable ... it's fun! Writing programs and seeing them work is a very satisfying experience. And especially so compared to the drudgery in some other professions. So, many CS graduates choose to program even as their years of seniority accumulate. Probably the most important point to understand here is: once you are comfortable programming, you can choose the degree to which you want to do this.
  • Is there much programming in the CS curriculum? What is certainly true, unlike the one day it takes to learn how to use a telescope, is this: there is proportionally quite a bit of programming to learn in the CS undergraduate curriculum. Let's take a closer look, with an approximate breakdown of the amount of programming in each core course:
          CS-1111   Intro to software development (90%)
          CS-1112   Algorithms and data structures (80%)
          CS-1311   Discrete structures (0-10%)
          CS-2113   Software engineering (90%)
          CS-2312   Discrete structures II (0-10%)
          CS-2461   Architecture (30%)
          CS-2441   Databases (40%)
          CS-3212   Algorithms (50%)
          CS-3313   Foundations (15%)
          CS-3411   Operating systems (80%)
          CS-4243/4 Capstone Design (70%)
       
    That's an average of 47% per course. So, yes, that's quite a bit of programming. But, compare this to the equivalent anxiety-laden questions about math ("how many math courses involve proofs?") or biology ("how courses involve memorizing bio terminology?"). What's important to know is that you get better at it, and even though the challenge level increases, your own ability to rise to the challenge increases.
  • Anyone can surmount the programming hurdle in CS education. Programming is a learned skill. One has to accept that it takes time. What is harder to accept is that skill development occurs quite differently in people. Some take to a skill early and plateau, whereas others struggle initially but take off later. I've lost count of the number of Senior Design award winners who were in the "slow start" category. Similarly, many of our successful entrepreneur alumni that I know were students who really struggled in the early programming courses. There is simply no correlation between quick starts and future success. This type of phenomenon occurs in almost any skill. Just ask the high performers about when they first started. While some will undoubtedly say things like "I started the piano when I was 3", others at the top of their game will be honest about how difficult the early years were. And here's the thing: you don't have to be a top performer to do really, really well in programming.
  • So, should you take on the difficulty of learning to program, especially if you believe you are among the slow starts? The best part about college is that it's hard. (Or should be.) Here's why. If it were easy, then lots of people would coast through and they would be among your competitors the rest of your life. Because CS and programming are hard to learn, if you stick with it, you will be in an elite group. In fact, you should ask yourself the question: if you're not here to learn a hard-to-learn skill, why are you in college? Is any easy-to-learn skill worth learning?
  • Peer pressure. Perhaps the worst part about struggling in programming is watching others "get it". This is true of any skill development - it is torment to see someone else sail through. If you feel this way, you should ask: how did the other "slow starters" get through and go on to great careers in CS? Did they let themselves get overwhelmed by peer pressure? Or did they tough it out, and march on? Here's a secret: the students who toughed it out acquired something the supposedly quick learners do not: resilience.
  • Coping skills. All advice aside, are there practical coping skills to help survive programming courses? Yes. This is a topic by itself.

How hard is it to learn to write code? Only as hard as the negativity you ascribe to it. See the longer response above.

How hard is CS? Is CS hard?
Beyond programming, yes, there are theoretical aspects of CS that are both interesting and challenging. All of this can be learned with sufficient effort and given enough time. What makes it hard is doing everything in the compressed time schedule of four years. So, the real question is: is the CS curriculum at GW hard? Our goal as faculty is to deliver challenging courses and create pathways for success. We want you to succeed in the future and that means giving you a good "workout" now.

What are some of the common applications of CompSci?
No engineering project or piece of technology is without CS these days. It's almost expected. Even battery-operated toys for one-year old babies have some kind of processor with software. This is equally true for the sciences. CS is applied in almost any scientific discipline. A good way to think about it is to compare CS and math. Centuries ago, math was a curiosity, until it became the underpinning for describing the physical world, and then later, economics. In the same way, CS is becoming the second foundational pillar of science and engineering. And a lot of engineering today requires computational skills. That said, there's plenty within CS along ("CS for CS's sake") that's interesting.

How well do computer engineering + computer science intersect? Is there a place in AI for computer engg?
For the most part, computer science and engineering live side by side. They do intersect in some areas and applications, such as embedded systems, where from the CS side, software is written close to the hardware to work with hardware. At this time, I'm not seeing any intersection between AI and computer engineering.

Does everything involve AI?
Not at all. There are many, many areas of CS. Start by looking at the research interests of the faculty in CS here, then the research interests of faculty in other schools ... just to give you an idea.

What is the main focus of CSCI?
I would say it's computational problem solving, which means using computers to solve problems, any kind of problem. Any time you hear something like "somone's written a program to ...", that's an example of software written to solve a problem.

What sort of future does Computer Science see in regards to the evolution of code and its capabilities?
This is an interesting question indeed. Programming languages will change and evolve, of course, but more intriguingly, programs will one day be written by other artifically intelligent programs. It's hard to predict. There certainly are doomsday scenarios (check out, for example, the "stamp collecting AI" in the computerphile series of youtube videos).

Why is MATLAB trying to ruin my life?
For unknown reasons, MATLAB has singled you out for annihilation. Wear a protective helmet.

Are computers going to kill us?
Almost certainly. Probably by next July.

Will I find love?
Yes. But you need to look for it. We call it the "search" problem in CS.

More advice on CS