Electronic References

Electronic References

Below is a loosely-categorized collection of links to CS textbooks in a variety of areas that are freely available online, usually because they are one of the following:

I also include below a list of papers I consider good stand-alone introductions to certain topics, and a list of links to thorough special topics courses.

If you find one of the links below is broken or has moved, feel free to let me know.

Those with time to spare and looking to have less of it may enjoy browsing the QA call numbers in UPenn's extensive listing of online books. Most of those listed here were found independently over the years, but I've just now (June 2020) learned of this excellent repository of links. I'll add to the links below as I find promising books.

Key:

Note: These categories have grown quite unevenly over time, and in a rather ad hoc fashion. I'm planning to overhaul the categorization here in the near future.

Programming Language Theory & Program Analysis (including Automata)

Topics such as semantics, types, abstract interpretation, proof assistants...

Mathematical Logic, Set Theory, Model Theory, Topology

This portion excludes category theory, which is now its own section below.

Software Engineering (Theory and Practice)

Category Theory and Applications

Language Implementation

Systems & Networking (including Security, Architecture)

General CS Theory and Algorithms (including AI, ML, Data Science...)

This section will be split into more categories soon.

Computational Linguistics & Natural Language Processing, General Linguistics

Education

Language-Focused Introductions to Computer Science

Specific Programming Languages

While most of the books on this page are focused on more theoretical/foundational topics, sometimes you just need to learn a programming language or look at some reference on a particular language feature.

Introductions to Programming and/or Computer Science

Some of the books listed in other categories are appropriate for someone looking to get started with programming and/or computer science. I've duplicated those links in this section so they're easier to find if that's what you need.

"Soft" Skills

I think the term "soft skills" downplays how important these skills are and how difficult they are to build, but I'm settling for scare quotes because I can't think of a better concise topic name people will recognize.

Useful Tools

Concise Overview Papers

Paper Reading Lists, Courses, and Miscellaneous