01 — What Is Computer Science?

A progressive introduction to computer science, computational thinking, and the process of turning problems into tested, useful computational solutions.

What Studies

studies computation: how information can be represented, processed, communicated, and used to solve problems. It includes both theoretical questions about what can be computed and practical questions about designing systems that compute reliably and efficiently.

The field includes algorithms, programming, data, computer architecture, operating systems, artificial intelligence, networks, security, human–computer interaction, and the social effects of computing. Programming is an important activity within , but the field is broader than learning to use a computer or write code.

Computer scientists also ask:

  • Can a problem be solved by a computer at all?

  • What information must be represented, and how should it be stored?

  • Which method solves the problem accurately and efficiently?

  • How can a large system be divided into understandable parts?

  • How should a computational system affect people, organizations, and society?

A computer follows precise instructions, but creating those instructions requires human reasoning, modeling, testing, and judgment.

Takeaway: combines theory, design, implementation, and evaluation to understand and build computational systems.

Practices

provides a way to express problems and solutions so that a person, computer, robot, or other information-processing agent can carry them out. It is not simply thinking like a computer. It involves identifying relevant information, organizing a problem, creating a procedure, and checking whether the procedure works.

Four closely related practices are central:

  1. breaks a complex problem into smaller problems.

  2. focuses attention on important features while ignoring unnecessary detail.

  3. Modeling creates a simplified representation of a system or process.

  4. design develops a clear sequence of steps that can solve a problem.

Pattern recognition, data analysis, automation, testing, and debugging also support . These practices help turn an unclear goal into a structured problem that can be analyzed and addressed systematically.

Takeaway: is a problem-solving approach built from organizing information, simplifying appropriately, representing systems, designing procedures, and evaluating results.

and

A large task becomes easier to understand when it is divided into smaller parts. allows each part to be designed, tested, and improved separately. It can also allow different people to work on different parts of a system.

For example, a food-delivery application might be divided into these components:

  • creating an account;

  • displaying restaurants;

  • accepting an order;

  • calculating the cost;

  • processing payment;

  • showing delivery status; and

  • sending notifications.

In a , commonly leads to functions, modules, objects, or services. A well-decomposed system is easier to understand, test, reuse, and maintain.

manages complexity by showing only the details needed for a particular purpose. A map application may show roads, destinations, and travel time without exposing the electrical signals, memory locations, or network protocols used to display the map.

A function such as calculate total can act as an . A programmer can use it without knowing every detail of how it adds prices, applies discounts, and calculates tax. The function’s name and expected inputs provide an interface. However, must preserve information that users need to understand a system’s limitations. A map that ignores road closures may be simple but unreliable.

Takeaway: reduces a problem’s size, while reduces unnecessary detail. Together, they make complex systems easier to design and use.

Modeling Systems

A is a simplified representation of a real or imagined system. Models help people examine relationships, make predictions, and test ideas without manipulating the complete real-world system.

Examples include:

  • a weather representing temperature, pressure, wind, and moisture;

  • a graph representing connections between people or web pages;

  • a spreadsheet representing a budget; and

  • a simulation representing traffic moving through a city.

Every leaves something out. This is useful because a is designed for a purpose. A traffic may represent roads and vehicle flow while ignoring the color of each car. The quality of a depends on whether it includes the details needed to answer the question being asked.

Computational models can be executed by programs. A can repeatedly apply rules to a , examine the results, and display patterns that may be difficult to observe directly.

Takeaway: A is not a complete copy of reality. Its value depends on how well its selected details support the intended question or task.

From Problems to Programs

Computational problem-solving is a systematic process rather than a single act of coding. A typical process is:

  1. Define the problem. Identify the goal, inputs, outputs, constraints, and users.

  2. Decompose the problem. Divide the task into smaller parts.

  3. Choose abstractions and representations. Decide what information matters and how to store it.

  4. Design an . Describe the steps needed to produce the desired result.

  5. Implement the solution. Translate the into a programming language or another executable form.

  6. Test and debug. Use examples and unusual cases to find and correct errors.

  7. Evaluate and improve. Consider correctness, speed, memory use, security, accessibility, maintainability, and effects on people.

An is a method, while a is an executable implementation of that method. The relationship can be described as a problem leading to an , an leading to a , and a producing a result when it is executed.

For example, to calculate the average of a set of scores, an can add all scores, count the scores, and divide the sum by the count. A expresses these steps using variables, operators, and control structures. The same may be implemented in Python, Java, C++, or another language, although the implementations may differ in speed, readability, and resource use.

Computer scientists study whether algorithms are correct, how much time and memory they require, and when one is preferable to another. The best solution depends on the data, required accuracy, available resources, and users’ needs.

Takeaway: Effective computational problem-solving continues after coding: solutions must be tested, evaluated, and improved against technical and human requirements.

Applying the Ideas Together

Consider a library system that helps a user find a book.

  • : Separate the task into searching the catalog, checking availability, and locating the shelf.

  • : Represent each book with useful fields such as title, author, subject, and shelf location rather than every physical detail.

  • Modeling: Represent the catalog as records connected to locations and loan information.

  • design: Choose steps for comparing the user’s search terms with catalog records.

  • Programming: Implement the search and display functions.

  • Evaluation: Measure accuracy and speed, test misspelled titles, protect user privacy, and make the interface accessible.

This example shows why is both theoretical and practical. The system depends on formal methods for representing and searching data, as well as design decisions about human needs and real-world constraints.

A useful solution is not merely one that produces an answer. It should also be appropriate for its users, reliable under relevant conditions, understandable enough to maintain, and responsible in its effects.

Final takeaway: connects representations, models, algorithms, programs, systems, and human judgment in order to solve problems effectively.