The common thread running through my teaching and research is the use of mathematical methods---especially methods based on logic---in designing and building systems. Interesting systems are too complex to be understood by informal intuitions, and it can be very powerful to use formal tools to help understand whether the system we are actually building really fulfills our ideas about what it is supposed to do. Tools based on logic can help people build things in a way guided by specification, and indeed they can help people arrive at the right formal specification in the first place. My recent research applies these ideas to software security and reliability and in databases. In my undergraduate and graduate teaching I stress these ideas, and I also like to place special emphasis on presenting ideas carefully and clearly. The absolute best way to understand something is to explain it to someone else: this goes for teachers and students alike!