Although I am its author, this dissertation is really a joint e ort. First and foremost, I would like to thank my advisor Jan Ho mann for his unwavering support. Jan, thank you for your patience with me while I learned the basics of programming language theory. Your vision, not just about PL, but about success in research will always stay with me. And a special thanks for your constant guidance during my job application process. I also want to express my sincere gratitude to Frank Pfenning who, despite not being my o cial advisor, always treated me like his student. Frank, your vast experience and clarity of thought has taught me so much about PL research. I really enjoyed my collaborations and pair programming experiences with you; we have created some really impressive so ware together! Before anyone else, I would like to take this opportunity to thank my partner Dr. Shrimai Prabhumoye. Without you, I would not have been able to successfully complete my PhD. e life principles I have learned from you have made me, not just a be er researcher, but a be er person.I would also like to thank my commi ee members: Andrew Miller for introducing me to the world of security, privacy, and applied cryptography; Bryan Parno for providing amazing feedback on my application materials and dissertation; and especially Shaz Qadeer for enabling an awesome internship experience and teaching me how to become an independent researcher. I'd also like to thank all my collaborators: