This document provides an overview of integer programming and the branch-and-bound technique for solving integer programming problems. It begins with definitions and examples of integer programming (IP), mixed integer programming (MIP), and binary integer programming (BIP). It then discusses perspectives on solving IP problems, including the possibility of enumeration and using LP relaxation. The bulk of the document describes the branch-and-bound technique and provides a detailed example of how it is applied to a binary integer programming problem. It concludes by discussing adaptations needed for the branch-and-bound algorithm to solve mixed integer programming problems.