If you have to recommend books for someone who wants to learn more about TCS at the introductory level such as automata theory, algorithmics, complexity theory, etc, what book(s) would you recommend for those who are interested and want to learn more about TCS, but not had any exposure to it?
-
2$\begingroup$ I think this should be a CW question. $\endgroup$– GigiliMar 17, 2012 at 11:34
-
1$\begingroup$ See this meta discussion about how to manage this question. $\endgroup$– Raphael ♦Mar 17, 2012 at 11:46
-
3$\begingroup$ cstheory.SE has an advanced list too $\endgroup$– uliMar 17, 2012 at 14:39
-
1$\begingroup$ @Gigili No, community wiki is not an excuse to let unsuitable questions in. $\endgroup$– Gilles 'SO- stop being evil'Mar 18, 2012 at 2:00
-
2$\begingroup$ @Gigili No. Lists of books used to be CW, but that is no longer done. Please do read the blog post I linked. $\endgroup$– Gilles 'SO- stop being evil'Mar 18, 2012 at 16:33
7 Answers
If you would like to have a general introduction without getting to deep into the technical details, I suggest David Harel's Algorithmics: The Spirit of Computing. After that, this is my favorite list:
- Michael Sipser's Introduction to the Theory of Computation: the best introduction to automata theory, computability and complexity.
- Algorithms by S. Dasgupta, C.H. Papadimitriou, and U.V. Vazirani: the most intuitive introduction to algorithms with stronger focus on intuition than technical proofs.
- Jon Bentley's Programming Pearls: this is not a textbook on algorithms, but it demonstrates beautifully how to use algorithm design techniques to solve real problems that irritated real programmers. :-) This might be a good start if you have some pre-knowledge on programming.
-
$\begingroup$ DPV is not in print yet; is it generally known? $\endgroup$– Raphael ♦Mar 18, 2012 at 2:27
-
$\begingroup$ Due to this answer's score, I included the answers in an aggregate answer. Please consider removing your answer for the sake of clarity. $\endgroup$– Raphael ♦Mar 18, 2012 at 2:41
-
$\begingroup$ @Raphael DPV has been in print for several years, but it's still nicely available online. I tried not to link to commercial website like amazon. $\endgroup$– DaiMar 18, 2012 at 14:50
-
$\begingroup$ @Dai: I see. The page you link to says "This is a penultimate draft of our soon to appear textbook.", therefore my confusion. $\endgroup$– Raphael ♦Mar 18, 2012 at 17:38
- Introduction to Algorithms by Cormen, Leiserson, Rivest, Stein is a popular choice, title speaks for itself.
- Compilers: Principles, Techniques, And Tools by Aho, Ulman and Sethi is a good book about compilers, has some introduction material about automata theory too.
- Principles of Model Checking is a massive book can be used as an introduction to model checking
-
$\begingroup$ I find Clarke's book a bit too heavy for someone without TCS background. I know (in person) PhD students who find the book hard to understand. $\endgroup$– DaiMar 17, 2012 at 8:19
-
$\begingroup$ @Dai, you are probably right, I've changed it to Baier's Principles of Model Checking $\endgroup$– DaniilMar 17, 2012 at 8:51
-
$\begingroup$ Can one understand model checking without basics in logics and/or automata? $\endgroup$– Raphael ♦Mar 17, 2012 at 11:49
-
1$\begingroup$ The Dragon Book is certainly a good reference; is it theoretical enough, though? (I honestly don't know) $\endgroup$– Raphael ♦Mar 17, 2012 at 12:04
-
$\begingroup$ @Raphael "Principles" somewhat gives an introduction to logic (at least some necessary knowledge) and automata. It's a pretty big book too, ~980 pages. As for The Dragon Book, I thought that compilers is a rather theoretical area, isn't it? $\endgroup$– DaniilMar 17, 2012 at 12:12
For the mathematics needed in algorithm analysis, I recommend the one and only GKP:
Concrete Mathematics by Graham, Knuth, Patashnik
A comprehensive, high quality treatment of practically all the math you will need in (basic) algorithmics. It is an entertaining read and includes a wealth of exercises (and solutions).
-
$\begingroup$ I tried reading this book, but I didn't like it, because it all felt very... clumsy and clustered. I just didn't feel the beauty of maths there. Compare that with Sipsers' outline of automata theory or Smullyan's books on logic or even Dummit&Foote's Abstract Algebra. Maybe that's just me, tho. $\endgroup$– DaniilMar 17, 2012 at 15:05
-
$\begingroup$ I second Daniil. It's a collection of excellent tools for theoreticians. But it is too dry and technical to be enjoyable for beginners. I really like the books I mentioned above since they seem to have their own souls. They read as if someone is telling you stories, interesting ones. $\endgroup$– DaiMar 17, 2012 at 15:58
-
$\begingroup$ Unfortunately, it does not cover structural induction, coinduction, domain theory, and all of the stuff needed for Theory B-style TCS. $\endgroup$ Mar 17, 2012 at 20:29
-
$\begingroup$ @DaveClarke: Correct. I am not sure I would expect any math-math book to contain any of that. But then, GKP is supposed to be a cs-math book. It contains no logics, either, so I should rephrase a bit. $\endgroup$– Raphael ♦Mar 18, 2012 at 0:23
-
2$\begingroup$ @DaveClarke can you please recommend us some books on Theory B maths? $\endgroup$– DaniilMar 18, 2012 at 6:05
Algorithms 4. Edition R. Sedgewick
An Introduction to the Analysis of Algorithms P. Flajolet, R. Sedgewick
Introduction to Automata Theory, Languages, and Computation J. E. Hopcroft, J. D. Ullman, (R. Motwani)
The 1979 first Edition has more theoretical results that are missing in the 2001 second Edition. Haven’t look at the third Ed yet.
Introduction to formal language theory M. A. Harrison
It is from 1978 but I still would like to see it on the list.
Logicomix: An Epic Search for Truth A. Doxiadis, C. H. Papadimitriou
Because it is totally awesome!
Again 1979
Garey and Johnson's Computers and Intractability: A Guide to the Theory of NP-Completeness
I’d love to have TAoCP on the list but I fear, that Don Knuth’s meticulous approach is nothing that could be considered as “introductory”. Sadly...
-
$\begingroup$ Logicomix is certainly a gem, not saying that the others aren't. $\endgroup$ Mar 17, 2012 at 14:41
-
$\begingroup$ I don't really like the way Logicomix portrayed Logicians as "insane" sort of people. Ideas in logic when explained in the right way are very down to earth and simple, and not really that "insane". $\endgroup$– DaiMar 17, 2012 at 14:49
-
1$\begingroup$ @Dai Have a look at the lives of extraordinary people like e.g. Gödel, Wittgenstein, Nash, etc. they were ... well extraordinary. $\endgroup$– uliMar 17, 2012 at 15:29
-
$\begingroup$ Which of those are really beginner-proof? $\endgroup$– Raphael ♦Mar 18, 2012 at 2:25
-
$\begingroup$ @Raphael IMHO all of them, otherwise I wouldn’t have posted them here. Some may have a steep learning curve but I think that’s okay. $\endgroup$– uliMar 18, 2012 at 10:11
If you are entirely new to the field of TCS then Sipser's Introduction to the Theory of Computation is definitely the best book to get you started. I have read other introductionary books, and none of them, in my opinion, come close to Sipser's way of bringing the matter.
Other, more specific, good theoretical books are:
- Benjamin Pierce's Types and Programming Languages. This is theoretical computer science and logics from a different perspective.
- Gems of Theoretical Computer Science by U. Schöning and R. Pruim.
-
-
$\begingroup$ @DaveClarke I was planning to add more resources to the list as I did with my edit now, but I also wanted to emphasize how great Sipser's book is by mentioning it again! :-) $\endgroup$– coddMar 17, 2012 at 14:51
-
1$\begingroup$ Pierce's book is a gem. I wish it had been around when I did my PhD (in types). $\endgroup$ Mar 17, 2012 at 14:52
-
$\begingroup$ @DaveClarke I am currently using it for my bachelor thesis by recommendation of my advisor and I am also very impressed by it! $\endgroup$– coddMar 17, 2012 at 14:54
-
1$\begingroup$ Thanks for the reference, I will take a look at it later today. I see that you are a professor at KUL, I am coming there next year to study Secure Software (Veilige software). What a small world. $\endgroup$– coddMar 17, 2012 at 15:15
Some good books covering the Theory B part of TCS:
Logic in CS: Logic in Computer Science: Modelling and Reasoning about Systems By Michael Huth and Mark Ryan.
Broad coverage of various uses of logic in computer science. About 3rd year undergraduate level.The Lambda Calculus: Lambda-Calculus and Combinators. An introduction by J. Roger Hindley and Jonathan P. Seldin.
Introduces the lambda calculus, which is an essential ingredient in the foundations of programming languages. About 3rd year undergraduate level.Lead in to domain theory: Introduction to Lattices and Order (2nd ed.) by Davey, B. A. and Priestley, H. A. Cambridge University Press. (2002).
Covers a very useful topic, especially if you plan to work with semantics. It is a bit more mathematical than the other topics, but the early chapters are certainly at an advanced undergraduate level.Semantics: Semantics with Applications: An Appetizer by Hanne Riis Nielson and Flemming Nielson.
A really nice introduction to programming language semantics. Rather than going deep into any particular formalism, it gives a broad presentation and includes applications generally not considered in other books on semantics. Could possibly be useful for 2nd year undergraduates.
-
$\begingroup$ I don't know any of those even by reputation, so I can't say wether they are any good (even though I am inclined to take your word for it). :/ $\endgroup$– Raphael ♦Mar 18, 2012 at 13:10
-
1$\begingroup$ I've added a description of each book. All are good. $\endgroup$ Mar 18, 2012 at 13:17
This is an aggregate answer that contains books from answers with score at least five. Please discuss its content in the chat.
Algorithms & Data Structures
- Introduction to Algorithms by Cormen, Leiserson, Rivest, Stein (3rd ed 2009)
A comprehensive treatment of basic algorithms and data structures and their analysis without digging too deep. - Algorithms by Dasgupta, Papadimitriou, Vazirani (2006)
The most intuitive introduction to algorithms with stronger focus on intuition than technical proofs.
Computability & Complexity
- Introduction to the Theory of Computation by Sipser (2nd edition 2005)
The best introduction to automata theory, computability and complexity.
Formal Languages & Automata
- Compilers: Principles, Techniques, And Tools by Aho, Ulman and Sethi (2nd ed 2006)
The standard book about compilers; very comprehensive. Touches automata theory, too.
Applied Theory
- Principles of Model Checking by Baier, Katoen (2008)
Massive book that an be used as a comprehensive introduction to model checking. - Programming Pearls by Jon Bentley (2nd ed 1999)
Not a textbook on algorithms but demonstrates beautifully how to use algorithm design techniques to solve real problems. Might be a good start if you have some pre-knowledge on programming.
-
$\begingroup$ This doesn't answer the question, or if it's meant to, it is not a good answer. Do you mean someone starting TCS needs to read all of these books? If not, how would they choose? Keep in mind that by your rule, this answer is likely to grow to contain hundreds of books $\endgroup$ Mar 18, 2012 at 2:46
-
$\begingroup$ @Raphael Are you it's polite to ask someone else to remove his/her own answer? Usually the asker himself/herself can do the job of aggregating his favorite answers by modifying his/her own question text, but I've never seen anyone force another person to delete his/her own post to create his own answer. This cs stackexchange is getting weird with these narcissistic behaviors. $\endgroup$– DaiMar 18, 2012 at 12:46
-
$\begingroup$ @Raphael: Making it a CW doesn't make it right to ask someone to delete his/her own answer. It's like saying I'm gonna writing a book/survey paper (which I will publish online for free), so I go around and ask all authors whose papers I cite to take down their own papers to avoid confusion. $\endgroup$– DaiMar 18, 2012 at 14:47
-
$\begingroup$ @Raphael I don't see any where in the CC licenses saying that my work will be eventually requested taken down by someone else. I don't know what sort of fantasy you have with SE, but it's definitely not Wikipedia. I know you work hard to "moderate" this website, but please also respect someone else's freedom of speech and privacy, and simply let the up/down votes take care of the rest. I think the goal of cs SE is to provide a more friendly forum than cstheory SE to beginners, but the micro level of management you proposed here made it so much worse. $\endgroup$– DaiMar 18, 2012 at 21:55
-