A garbled circuit (GC) is a way of encrypting a computation in a way that reveals only the final output and none of the intermediate state. In this talk, I'll describe Yao's classical GC construction (1987), and its application to secure two-party computation protocols. Starting in the early 2000s, interest gained in actually implementing secure computation protocols. As a result, garbled circuits became the focus of an interesting line of combinatorial optimizations, which I will present. These works culminated in a recent GC construction that can be proven optimal in some sense. The talk will (hopefully) be understandable to non-cryptographers!