Randomness is a powerful phenomenon that can be harnessed to solve various problems in all areas of computer science. Randomized algorithms are often more efficient, simpler and, surprisingly, also more reliable than their deterministic counterparts. Computing tasks exist that require billions of years of computer work when solved using the fastest known deterministic algorithms, but they can be solved using randomized algorithms in a few minutes with negligible error probabilities.Introducing the fascinating world of randomness, this book systematically teaches the main algorithm design paradigms foiling an adversary, abundance of witnesses, fingerprinting, amplification, and random sampling, etc. while also providing a deep insight into the nature of success in randomization. Taking sufficient time to present motivations and to develop the reader's intuition, while being rigorous throughout, this text is a very effective and efficient introduction to this exciting field.