Protein design opens new ways to probe the determinants of folding, to facilitate the study of proteins, and to arrive at novel molecules, materials and nanostructures. Recent theoretical methods for identifying the properties of amino acid sequences consistent with a desired structure and function will be discussed. Such methods leverage concepts from statistical mechanics and address the structural complexity of proteins and their many possible amino acid sequences. Computationally designed protein-based systems will be presented that have been experimentally realized, including novel proteins tailored to accommodate nonbiological cofactors.