Skip to content

Computer science foundations

Build a solid base in computer science, from how machines run programs through algorithms, operating systems and networks, up to the limits of what computation can do.

Beginner 13 steps

Steps

Getting oriented

  1. Map of the fieldSee which core subjects make up computer science and in what order to tackle them, so self-study stays focused instead of scattered.
    • Teach Yourself Computer Science teachyourselfcs.comfree

      A structured study guide outlining essential computer science subjects, recommended textbooks, and video lectures.

  2. Working at the command lineGet comfortable with the shell, files and processes, since nearly every later topic is explored by running tools from a terminal.
  3. Version controlTrack your exercises and experiments with Git, a habit that makes every project and course assignment easier to manage.
    • Git git-scm.comfree

      A free and open-source distributed version control system designed to handle everything from small to large software projects.

  4. Where computing came from (optional)Learn the history of computing machines and ideas, which explains many design choices that still shape today's systems.
    • Computer History Museum computerhistory.orgfree

      A cultural and historical institution dedicated to preserving the stories, computing hardware, and software artifacts of the digital revolution.

Algorithms and data structures

  1. Core data structures and algorithmsStudy arrays, lists, trees, hashing, sorting and searching with working code, the toolkit behind efficient programs.
    • Algorithms, Part I coursera.orgfree

      Fundamental course on essential algorithms and data structures taught by Robert Sedgewick and Kevin Wayne.

    • Algorithms by Jeff Erickson jeffe.cs.illinois.edufree

      Free, open-access textbook covering recursion, dynamic programming, randomized algorithms, graph algorithms, and NP-hardness.

  2. Analysing and designing algorithmsLearn asymptotic analysis, recursion, greedy methods and dynamic programming so you can reason about cost before writing code.

How computers run programs

  1. Computer systemsUnderstand data representation, machine code, memory hierarchy and linking to see what really happens when your program executes.
  2. Operating systemsLearn how an operating system virtualises CPU and memory, handles concurrency and stores data persistently on disk.
  3. Experimenting with emulators (optional)Run and inspect systems inside an emulator or virtual machine, a safe way to try what you read about kernels and hardware.
    • QEMU qemu.orgfree

      A generic and open-source machine emulator and virtualizer used across computer systems research and operating system development.

    • VirtualBox virtualbox.orgfree

      A free and open-source hosted hypervisor for x86 virtualization suited for desktop and server deployment.

  4. Networks and databases in practiceCapture real network traffic and query a small embedded database to connect protocol and storage theory with observable behaviour.
    • Wireshark wireshark.orgfree

      A widely used open-source network protocol analyzer for network troubleshooting, analysis, and protocol communication review.

    • SQLite sqlite.orgfree

      A small, fast, self-contained, high-reliability C-language library implementing a full SQL database engine.

Theory of computation

  1. Automata and formal languagesExperiment with finite automata, grammars and Turing machines to understand the formal models behind parsers and computation itself.
    • JFLAP jflap.orgfree

      Educational software for experimenting with formal languages and automata theory, including finite state machines, pushdown automata, and Turing machines.

  2. Complexity and its limits (optional)Get an introduction to complexity classes such as P and NP, which explain why some problems resist efficient solutions.
    • Complexity Zoo complexityzoo.netfree

      Comprehensive wiki cataloging computational complexity classes and their structural relationships.

    • Computational Complexity Blog blog.computationalcomplexity.orgfree

      Influential academic blog written by Lance Fortnow and Bill Gasarch exploring complexity theory, algorithms, and theory life.

  3. Keep up with the fieldRead accessible summaries of research and the flagship magazine of the profession to see how foundations feed current work.
    • Communications of the ACM cacm.acm.orgfree

      The flagship open-access publication of the ACM covering critical developments in computing, distributed systems, and data.

    • The Morning Paper blog.acolyer.orgfree

      An archival review blog by Adrian Colyer providing practitioner summaries of data systems and algorithmic research papers.

See also

External links, by their respective authors. This path is original IPL content.