If you stopped someone on the street and asked him “What do computer scientists do?” you would probably get a response along the lines of “They work with computers” – that is, of course, assuming they didn’t tell you to “get lost”[1].  

Most people know that computer scientists work with computers.  Many are less clear when it comes to knowing exactly what computer scientists do with those computers.  Some people believe that computing involves learning to use spreadsheets, word processors, and databases.  The truth is that computer scientists are really no more likely to be proficient with word processors or spreadsheets than any other professionals.  Some people think computer scientists build or repair computers.  While computer scientists do study the physical organization of computers and do help to design them, they are not the people to call when your disk drive won’t work.

Many people know that computing has something to do with writing computer programs.  In fact, it is a commonly held notion that the study of computer science mainly involves learning to write computer programs.  While it is true that computer scientists must be proficient programmers, the field is much broader than just programming.  

Programming is probably best thought of as a skill that computer scientists must master, just as a carpenter must master the use of a hammer.  In the same way that carpentry is about building things and not about simply pounding nails, computer science is not about programming.  Rather, it is about solving problems through the design and implementation of computing systems.  Programming is only one small, rather mechanical, step in this process.

This book is about the science of computing, which is also known as computer science or, more simply, computing.  Computing is a broad topic that combines aspects of mathematics and engineering with ideas from fields as diverse as linguistics, art, management, and cognitive psychology.  The people who work in this field are known as computer scientists.  At the heart of the field is the concept of an algorithm, which is a detailed sequence of steps that describes how to solve a problem or accomplish some task.

Computer scientists are essentially problem solvers.  Although they are capable of writing the programs that perform various applications, such as word processing or data storage and retrieval, that is not their primary function.  Instead, they study problems in order to discover faster, more efficient algorithms with which to solve them.  Computer scientists also study and design the physical machines, called computers, that carry out the steps specified by algorithms.  In addition, they design the programming languages people use to communicate algorithms to computers.  In a very real sense, computing is the study of algorithms and the data structures upon which they operate.  

Students who study computer science in college usually go on to take jobs that require the ability to program.  Some people go into high technology application areas, such as communications or aerospace.  Others end up designing computer hardware or low-level “systems” software.  Still others end up working in computer graphics – helping to develop software for medical imaging, Hollywood special effects, or game consoles.  The possibilities are almost endless.