Skip to content

What is Computer Science?

You've shipped production code. You've profiled slow database queries, argued about architecture in code reviews, and debugged stack traces at 2am. But if someone asked you what computer science actually is β€” not a language, not a framework, not a deployment tool β€” you might reach for a vague answer.

This is the theory you were missing.

Computer science isn't really about computers, any more than astronomy is about telescopes or biology is about microscopes. Computers are tools we use, but the field itself is about something deeper: computation β€” the systematic study of what can be computed, how efficiently, and what it means to solve problems algorithmically.

Learning Objectives

By the end of this article, you'll be able to:

  • Explain what computer science studies β€” distinct from programming languages and frameworks
  • Identify the major subfields of CS and where they intersect your daily work
  • Connect your existing engineering experience (debugging, code review, system design) to formal CS theory
  • Articulate why understanding the theory underneath your tools makes you a more effective engineer

Where You've Already Encountered CS Theory

You don't need a university classroom to have bumped into computer science. You've been applying it all along:

  • Every Python dict and JavaScript {} you've used β€” these are hash tables, a fundamental data structure from algorithms research
  • Every SQL query that times out at scale β€” that's computational complexity in action; some queries are inherently harder to execute than others
  • Every regex pattern you've written for input validation β€” that's formal language theory; regular expressions are a direct implementation of finite automata
  • Your linter that can't catch every possible bug β€” that's not a limitation of the tool, it's a mathematical proof; the Halting Problem tells us no algorithm can ever do this
  • Every time you reached for a binary search instead of a linear scan β€” you were applying algorithmic thinking without needing the formal definition

CS theory is already in your codebase. This site gives you the vocabulary to understand it.

The Classic Definitions

Ask ten computer scientists what CS is, and you'll get twelve answers. Here are some classics:

"Computer science is no more about computers than astronomy is about telescopes." β€” Edsger Dijkstra

"Computer science is the study of the principles and use of computers." β€” Encyclopaedia Britannica (less poetic, more accurate for practical purposes)

"The discipline of computing is the systematic study of algorithmic processes that describe and transform information." β€” ACM/IEEE Computing Curricula (yes, this one's a mouthful, but it's accurate)

The common thread? Algorithms and information. Computers just happen to be really good at executing algorithms on information.

The Core Questions

Computer science asks fundamental questions that would matter even if silicon chips had never been invented:

  • What can be computed?


    Not everything. Some problems are undecidable β€” no algorithm can ever solve them. Alan Turing proved in 1936 that no general algorithm can determine whether an arbitrary program will halt or run forever.

    This sets hard limits on what we can automate. Some tasks require human judgment not because we haven't found the algorithm yet, but because no such algorithm can exist. Math said so.

  • How efficiently can it be computed?


    Even solvable problems vary wildly in difficulty. Sorting a million numbers? A fraction of a second. Finding the best route through 100 cities? Our best algorithms would take longer than the age of the universe. (Pack a lunch.)

    This is computational complexity β€” why your \(O(n^2)\) query times out at scale when an \(O(n \log n)\) alternative flies. See Big-O Notation for the full story.

  • How do we express computation?


    Beneath programming language syntax lies a deeper question: what are the fundamental ways to describe processes? Finite State Machines, RTNs, BNF grammars, lambda calculus, Turing machines β€” all answers to "how do we precisely write down what we want a computer to do?"

  • How do we build reliable systems?


    A modern operating system has tens of millions of lines of code. How do we build systems that work, don't crash, resist attacks, and scale to billions of users?

    This encompasses software engineering, security, and distributed systems β€” the engineering discipline built on top of the theory.

Why This Matters for Production Code

Understanding CS theory makes you a better engineer in concrete, measurable ways:

Complexity theory explains why your code works fine in testing but times out in production. When you understand that hash table lookups are \(O(1)\) while nested loops are \(O(n^2)\), you stop writing code that accidentally scales quadratically.

This isn't abstract β€” it's the difference between a system that handles 10,000 users and one that handles 10 million.

Understanding the theory behind your tools helps you debug them. When a regex engine is backtracking catastrophically, knowing that some patterns cause exponential behavior tells you exactly what to fix. When a recursive function blows the call stack, knowing how stacks work tells you why.

Knowing what's computationally hard versus easy changes how you design systems. Some problems have no efficient general solution β€” knowing this upfront means you can design around them rather than discovering it when the system is down.

The Major Subfields

Computer science is vast. Here's a map of the territory:

  • Theory


    The mathematical foundations:

    Algorithms & Complexity β€” What's the best way to solve this problem? How hard is it inherently?

    Computability β€” Can this problem be solved at all?

    Formal Languages β€” How do we describe and recognize patterns? See also Regular Expressions, RTNs, and BNF

    Cryptography β€” How do we secure information mathematically?

  • Systems


    Building the infrastructure:

    Operating Systems β€” How do we manage hardware resources?

    Networks β€” How do computers communicate?

    Databases β€” How do we store and retrieve information efficiently?

    Compilers & Interpreters β€” How do we translate high-level code to machine code?

    Distributed Systems β€” How do we coordinate many computers?

  • Specialized Domains


    Pushing the boundaries of what computers can do:

    Artificial Intelligence β€” Can machines think? Learn? Reason?

    Computer Graphics β€” How do we generate images and animations?

    Computer Vision β€” How do we understand images and video?

    Natural Language Processing β€” How do we understand human language?

    Robotics β€” How do we build machines that act in the world?

  • Software Engineering


    The art and science of building robust software:

    Software Design β€” Patterns, abstractions, and principles for maintainable code at scale

    Testing & Verification β€” How do we know code is correct? Unit tests, integration tests, formal verification

    Software Architecture β€” Structuring large systems: monoliths, microservices, event-driven designs

    Development Practices β€” Version control, code review, CI/CD, and the processes that make teams ship reliably

  • Human-Computer Interaction


    Designing for people:

    Human-Computer Interaction β€” How do we design usable interfaces?

  • Ethics & Society


    Considering the impact:

    Ethics β€” What should we build? What shouldn't we?

    Privacy β€” How do we protect personal information?

    Fairness β€” Are our algorithms biased?

A Brief History

Computer science ideas predate computers:

  • 9th century: Al-Khwarizmi develops algebra and systematic problem-solving (his name gives us "algorithm")
  • 1843: Ada Lovelace writes the first algorithm intended for a machine
  • 1936: Alan Turing defines computation mathematically; Alonzo Church develops lambda calculus
  • First electronic computers (ENIAC, UNIVAC)
  • First programming languages (FORTRAN, LISP, COBOL)
  • Dijkstra, Knuth, McCarthy lay theoretical foundations
  • The term "software" is coined (1958)
  • Unix and C language
  • Relational databases
  • Personal computers arrive
  • Object-oriented programming emerges
  • The internet (ARPANET) grows
  • World Wide Web
  • Java, Python, JavaScript
  • Open source movement
  • Google, Amazon, Facebook scale to billions
  • Cloud computing becomes dominant
  • Machine learning renaissance (deep learning)
  • Mobile-first world
  • Growing concerns about ethics, privacy, AI safety

CS vs Programming vs IT

These terms are often confused:

Field Focus Typical Questions
Computer Science Theory and foundations "Is this problem solvable? How efficiently?"
Software Engineering Building systems "How do we build this reliably at scale?"
Programming Writing code "How do I implement this feature?"
Information Technology Managing infrastructure "How do we deploy and maintain this?"

A computer scientist might study whether a problem is solvable in polynomial time. A programmer implements a solution. An IT professional deploys it. These overlap, but they're distinct skill sets.

You can be an excellent programmer without knowing complexity theory. You can understand theory without being able to ship production code. The most powerful combination is both.

The Philosophical Angle

Here's where things get genuinely interesting. Computer science touches deep philosophical questions:

  • What is intelligence?


    AI research forces us to define what we mean by understanding, learning, and reasoning. Turns out it's harder than you'd think.

  • What is information?


    Claude Shannon's information theory quantifies the abstract concept of "information" mathematically. (Yes, you can measure surprise.)

  • What is proof?


    Automated theorem provers and proof assistants are changing how we think about mathematical certainty. Computers now help mathematicians prove theorems humans can't verify by hand.

  • What is a process?


    Algorithms formalize the notion of "a procedure to do something" β€” an idea that seemed obvious until we tried to make it precise. (Spoiler: it wasn't obvious.)

Computer science is philosophy made executable.

How These Subfields Connect: A Google Search

When you type a query into Google and hit enter, you're touching all four areas of CS:

  • Theory: Search algorithms decide which pages match your query; ranking algorithms determine the order using graph theory (PageRank) and complexity analysis
  • Systems: Your query hits distributed databases across thousands of servers, coordinated by networking protocols and operating systems
  • Applications: Natural language processing interprets what you meant, not just what you typed; machine learning personalizes results
  • Human-Centered: The clean, minimal interface hides all this complexity behind a single text box

One search. Four subfields. That's computer science in action.

Technical Interview Context

CS fundamentals appear throughout technical interviews β€” both as explicit theory questions and as the vocabulary behind algorithm and design discussions.

What's the difference between computer science and software engineering?

CS is the study of computation: what can be computed, how efficiently, and what the theoretical limits are. Software engineering is the discipline of building reliable systems from those computational building blocks. CS is the science; software engineering is the application of it.

What is the Halting Problem, and why does it matter?

Turing proved in 1936 that no general algorithm can determine whether an arbitrary program will halt or run forever. It matters because it sets a hard limit on what automated tools can verify β€” it's why linters and static analyzers can catch some bugs but can never catch them all.

Why can't a static analysis tool guarantee it will catch every bug?

Because doing so is equivalent to solving the Halting Problem, which is provably undecidable. Tools like mypy, ESLint, and Rust's borrow checker are useful precisely because they catch a well-defined subset of bugs β€” not because they can catch everything.

What is computational complexity?

The study of how resource requirements (time, memory) grow as problem size grows. This is the formal theory behind Big-O notation β€” it tells you not just how fast your code is, but whether a faster algorithm for the same problem is even theoretically possible.

Practice Problems

Practice Problem 1: Identify the Subfield

For each problem below, which CS subfield would primarily tackle it? (Some might involve multiple!)

  1. Making Netflix recommend shows you'll actually like
  2. Ensuring electronic voting machines can't be hacked
  3. Making a video game run smoothly at 60 frames per second
  4. Determining if two programs do the same thing
  5. Designing an intuitive interface for elderly users
Answers
  1. Machine Learning / AI β€” Pattern recognition from viewing history
  2. Security / Cryptography β€” Protecting systems from attacks, ensuring integrity
  3. Computer Graphics / Systems β€” Rendering efficiently, managing resources
  4. Theory / Computability β€” This is actually undecidable! (Rice's Theorem)
  5. Human-Computer Interaction (HCI) β€” Usability and accessibility
Practice Problem 2: Solvable or Not?

Which of these problems can be solved algorithmically?

  1. Given a number, determine if it's prime
  2. Given a program, determine if it will ever print "Hello"
  3. Given a list of numbers, find the largest one
  4. Given any mathematical statement, prove whether it's true or false
  5. Given a list of numbers, sort them in ascending order
Answers

Solvable:

  • βœ… #1: Prime testing β€” solvable (even efficiently!)
  • βœ… #3: Find largest β€” definitely solvable
  • βœ… #5: Sorting β€” very solvable (many algorithms)

Unsolvable:

  • ❌ #2: Undecidable (related to Halting Problem)
  • ❌ #4: Undecidable (GΓΆdel's Incompleteness Theorem)
Practice Problem 3: CS vs. Programming vs. IT

Classify each task as primarily Computer Science (theory), Software Engineering (building systems), Programming (writing code), or IT (deployment/maintenance):

  1. Proving that no algorithm can solve the Traveling Salesman Problem in polynomial time
  2. Writing a Python script to rename 1000 files
  3. Designing the architecture for a system that handles 10 million users
  4. Setting up backup systems for a company's servers
  5. Implementing a search feature for a website
Answers
  1. Computer Science β€” Theoretical complexity analysis
  2. Programming β€” Straightforward coding task
  3. Software Engineering β€” System design at scale
  4. IT β€” Infrastructure management
  5. Programming (for small sites) or Software Engineering (for large-scale systems)

Key Takeaways

Concept What It Means
Computation The systematic transformation of information
Algorithm A precise procedure for solving a problem
Complexity How difficulty scales with problem size
Abstraction Hiding details to manage complexity
Decidability Whether a problem can be solved algorithmically

Further Reading

On This Site

External


You've been applying CS theory for years without the vocabulary to name it. The hash tables in your code, the complexity in your queries, the automata in your regex β€” it was always there. This site exists to give you the formal foundation that turns a working instinct into a principled understanding.