This document provides an overview of topics that will be covered in a course on formal methods in software, including finite state machines, stack machines, specification languages, category theory, logic, and more. It discusses the need for formal methods in safety-critical domains like medical devices and aviation but not for applications like social media. As an example, it walks through a proof of the Euclidean algorithm for finding the greatest common divisor. It also covers important concepts in the field like Gödel's incompleteness theorems, the Entscheidungsproblem, the halting problem, and the Collatz conjecture. Finally, it discusses limitations of formal methods and approaches like unit testing.