I am wondering how to get started in studying theoretical computer science and how to apply it to my programming. I am fairly comfortable with basic programming, having been programming in mainly C++ but also Java for the past couple of years, so I don't necessarily need an introduction to programming.

What I am looking for to start is perhaps something fairly broad, so that it gives a wide overview of computer science, as I don't know exactly where I want to study within it yet. But it could also be nice to have directions of where to look to continue studying a specific aspect of it. However, this is just what I think could be helpful, and I am open to any recommendations.

  • $\begingroup$ I'm sorry for the downvotes. Perhaps the folks at Computer Science Educators would be more accommodating. $\endgroup$ Commented Oct 5, 2019 at 22:58
  • $\begingroup$ About the fact that it was put on hold, I realize the broadness and generality of the problem is not what Stack Overflow is necessarily for, so I may move this post over to Reddit sometime soon. $\endgroup$ Commented Oct 28, 2019 at 3:10

1 Answer 1


Theoretical computer science means different things to different people. However, here are some areas which are commonly taught in undergraduate theoretical computer science classes:

  • Combinatorics and elementary set theory. This serves as prerequisite to all that follows.
  • Data structures and algorithms. One standard textbook is Introduction to algorithms, but it might be too advanced if you're just starting out.
  • Computability and automata theory. One standard textbook is Introduction to the theory of computation by Michael Sipser.

In some places, another core subject is functional programming and labmda calculus.

An undergraduate degree in computer science typically deals with several other topics, such as operating systems, networking, and sometimes compilation.

  • $\begingroup$ Thanks for the good answer. I'll be sure to check out all of those sources. I have heard good things about Introduction to Algorithms, so I'll take a look. $\endgroup$ Commented Oct 6, 2019 at 17:24

Not the answer you're looking for? Browse other questions tagged or ask your own question.