Computer Science Careers


What exactly is Computer Science?
Computer Science is the science of using computers to solve problems. Mostly, this involves designing software (computer programs) and addressing fundamental scientific questions about the nature of computation but also involves many aspects of hardware and architecting the large computer systems that form the infrastructure of commercial and government enterprises. Computer scientists work in many different ways: pen-and-paper theoretical work on the foundations and fundamentals, programming work at the computer and collaborative teamwork in doing research and solving problems.
What Computer Science is not ...
Computer Science is not about using software, such as spreadsheets (like Excel), word processors (like Word) or image tools (like Photoshop). Many software packages are complicated to master (such as Photoshop or Excel) and it is true that many jobs depend on expertise in using such tools, but computer science is not about using the tools. It is not about expertise in computer games, it is not about about writing content in websites, and it is not about not about assembling computers or knowing which computers are best buys. Edsger Dijkstra, a famous award-winning computer scientist once said, "Computer Science is no more about computers than Astronomy is about telescopes". Computer Science is about the principles behind building the above software packages, about the algorithms used in computer games, about the technology behind the internet and about the architecture of computing devices.
What is Information Technology, and how is it different from Computer Science?
While computer science has become a somewhat precise term as a field of study (like geology), information technology (IT) is a somewhat more vague term. The commercial world uses the term IT in a variety of contexts, generally, to mean "anything to do with computers". Many business uses of this term refer specifically to the combination of databases, information processing systems and communication systems (email, web browsing) they have been installing in the 80's and 90's. Thus, an IT job could mean a sales job in a computer company, or a business manager overseeing the installation of software, or it could mean a network technician who installs fiber-optic cable, or of course a software engineer. However, computer science generally denotes a professional with computer science training, one who is involved in the creation of software and software systems. Most educational programs are in computer science, which has a long tradition of accredition, standardized testing (such as the GRE subject test in computer science), prestigious research journals and well-defined curricula. In contrast, while some schools offer IT curricula, these are less well-defined, and probably not as rigorous as computer science curricula and degrees.
What is software?
Computer science is not about building keyboards or monitors or the cables that connect your PC to your printer. While these are important to the functioning of a computer, as is electricity, computer software consists of interacting programs each of which is a collection of instructions capable of being executed on a computer. So, first we need to think of a computer as a "dumb" machine that knows how to execute elementary "instructions" (add this, multiply that). Then, software programs are collections of instructions that achieve higher-level end objectives. In a sense, the "intelligence" lies in the software and it is the difficulty of creating reliable, intelligent software that has made the young discipline of computer science into the large, diverse field it is today. Software systems now pervade almost all aspects of life, including high-end entertainment (such as the computer-generated dinosaurs in Jurassic Park), mission-critical control systems (factories, robots, aircrafts, space-travel), information systems (banks, websites, medical databases, government systems) and research tools (earthquake simulators, drug-design software, astronomy databases).
What is programming?
Programming is the intellectual endeavor of creating individual software programs. Part of it involves thinking (design, analysis), part of it involves coding (translating a design into instructions via a programming languages such as Java or C++) and part of it involves testing (subjecting software to a battery of tests to make sure it works). Programming has been likened to mathematics (analytic thinking) to writing (artfully telling a story), to engineering (building larger software out of smaller software units) and to art (exercising creativity). The part of programming that is most easily identified in Hollywood depictions is coding, the process of typing instructions in a programming language (such as Java or C++); this involves the stereotypical hunching over a monitor, pounding at the keyboard and watching the software execute.
Is Computer Science mostly programming?
Far from it. Initially, it may seem that it is all about programming because it is the skill whose teaching we start with (because it's fun, it's challenging and it's a prerequisite to further computer science). However, most undergraduate curricula devote 3 to 4 courses exclusively to programming, leaving 10-15 other computer science courses. Some of these use a student's programming skills acquired earlier, but most concentrate on some aspect of computer science central to the discipline. So, what are these areas of computer science? You can: learn about how computers are built (architecture), the principles behind important "infrastructure" software systems (operating systems, databases), study classic algorithms and learn to design your own, learn how compilers and language translation is done, study specialized computer science areas such as artificial intelligence, parallel computing, networks, graphics, bioinformatics, robotics, education or multimedia.
What's interesting about Computer Science?
Why do people find computer science interesting? Initially, interest usually begins with programming and mastering the many details and thought processes involved in programming. Later, once programming is "been there, done that", people get interested in designing large software systems, or in computer architecture, or in one of the many specialized areas of computer science. One of the best aspects of a young discipline is that there are many open problems awaiting the next generation of computer scientists. For example, one of the "holy grail" problems in computer science (the P=NP question) is still unsolved. Many people believe that the golden age of computing has just begun.
What kinds of careers are open to me with a degree in Computer Science?
Many people incorrectly believe that a computer science career is all about programming. While it is true that most entry-level jobs after a Bachelor's degree involve programming, most practioners eventually graduate to other responsibilities such as design, coordination, testing, planning and management. Thus, you typically start with a software engineering job after a Bachelor's and move on (after about 5 years of experience) into higher-level positions. With advanced coursework and a Master's degree, you can work in an area of specialization that uses your advanced coursework. For example, working for an animation outfit such as Disney will require at least 2 to 3 courses in computer graphics. Finally, a PhD degree usually finds its recipient in a research environment such as a research lab, research wing of a large corporation or a university.
Are there careers in Computer Science that involve people-skills, or will I be staring at a screen all day?
Most career paths in computer science involve people skills and interacting with people. Beyond an entry-level position as a software engineer, almost any corporate position requires working with people. The creation of software is most often a team effort, and software companies are organizations of people like any other type of company. Thus, if your career path is typical, you will not be alone in your cubicle staring at the screen.
What if I like programming all day?
There is of course a rich tradition of computer scientists who love developing software and who are happy spending most of their time in programming or designing software. Some are so motivated that they often spend hours on programming beyond their time at work. Many of these efforts have resulted in the vast amount of free open-source software available on Linux and other systems.
What are hot topics in Computer Science today?
The core areas of computer science, including software engineering, graphics, networks, databases, multimedia and artificial intelligence remain strong today. At the same time, some of the most exciting new work in computer science is occurring at the intersection between computer science and other fields. For example, computer science is changing the way biological research is conducted in fundamental ways, leading to a new field called bioinformatics at the intersection of biology and computer science. Similarly, computer simulations are making it possible to study problems in physics, chemistry, economics and geology that were difficult without computers.
What are some challenges left open in Computer Science for my generation?
Some people wonder if all the "important" problems in computer science have been solved, leaving only tinkering for future generations. Nothing could be further from the truth. Perhaps the most important theoretical objective in computer science (the P=NP question) remains unsolved to this day. Another seemingly mundane problem shows no sign of being solved: how to rapidly and easily create large software systems without errors. Similarly, applications of computer science to other disciplines have only begun to scratch the surface. Are you interested in these challenges?
Can Computer Science be combined with other fields of study?
Computer science is unlike many other disciplines in that there is a large intersection with other fields. This makes it possible to "dual-major" in computer science and another field in a meaningful way. For example:
Is studying Computer Science useful if I really want to major in something else?
For those disciplines that intersect with computer science (see above), the answer is clear. But what about History or English? An honest answer to this question would have to include a comment from a recent history major: "I really want to study history, but see computer science as a back up in the job market". Fair enough. However, consider that computer science also provides a certain kind of intellectual training, one that is focused on logical thinking, mastery of detail, teamwork and multiple facets of problem-solving. Computer science students, for example, find the logical-thinking tests on the LSAT (Law school exam) and GMAT (Business school exam) quite easy. Many students bound for med school also study computer science. And, yes, it helps to have a backup!
Why is computer science so hard?
Initially, it does seem that way. The reason is that, programming is challenging and is introduced "cold" to students in a first computer science course. Compare this to the study of mathematics: math is with us since Grade 1 and introduced in small steps right through school. Programming is a similar intellectual skill that takes time to master, usually about 4-5 courses. While there are always students to appear to find programming easy and unnecessarily intimidate others into believing they are not suited to computer science, most of us learn skills step-by-step over time. Can anyone with no musical background learn a musical instrument in one semester? Can you learn to speak a foreign language fluently with a single course? Many students tend to give up because of a combination of "others seem to get it and I don't" and "why isn't it coming to me?". Any skill acquisition is hard if viewed negatively. But like any skill acquisition, it can be acquired with patience and persistence. And once the skills are acquired, the supposedly "super-smart" kids who "got it" earlier don't seem that unreachably smart anymore.
What does it take to be successful in Computer Science?
Computer science is about a unique kind of problem-solving: creatively solving problems using computation. If you are creative, if you like puzzles, if you like problem-solving in other domains (engineering, mathematics, sciences), if you are comfortable with abstract thinking, if you like working at the intersection of multiple disciplines - if any of these apply to you, then Computer Science is for you.
What do I do next if I want a career in Computer Science?
In high-school, consider taking a few computer science courses. One advantage of taking the AP exams is that many schools will transfer these if you have a sufficiently high score. It's important to note this fact: you do NOT have to have any computer science in high-school to take it up in college. Universities not only offer courses for the completely uninitiated but also find that those with high-school computer science do not necessarily fare better. Suggested next steps:
Other online resources on this topic:


Department of Computer Science
http://www.cs.gwu.edu

The George Washington University.