This is a book about Kolmogorov complexity and algorithmic randomness. The main idea in Kolmogorov complexity, introduced by A. N. Kolmogorov and others in the 1960's, is to use an algorithmic approach to measure the amount of information in finite objects [1]. Kolmogorov wanted to create an information theory that, unlike Shannon information theory, is founded independently from probability theory. This approach results in a notion of randomness that is independent from the notion of probability and is closer to the intuition that "randomness is the absence of regularities" [2, 1]. As authors stated in the introduction, this book is not intended to be comprehensive, especially with respect to the more recent results; However, the authors cover a wide range of topics and results in Kolmogorov complexity theory and whenever a result is not rigorously investigated, sufficient references are provided. The book starts from the basic concepts and builds its way up toward the more advanced concepts and techniques. The progress from the introductory to the advanced topics is seamless which makes the reading an enjoyable experience. Concepts and techniques are explained very well and proofs are rigorous, detailed, and clear. Important and complicated proofs are usually followed by excellent discussions about the main ideas and techniques used in them. The book also contains many interesting and insightful philosophical discussions.