This document provides an overview of type theory from a software engineering perspective. It discusses motivations for using type theory like improving infrastructure as code. It then covers learning type theory, building a toy type system for a calculator, type rules and derivations. The takeaways are that type theory is useful for formal specification and writing code in a "proper language" leads to better design. It ends by discussing further topics to learn like effect systems and dependent types.