Q1. What’s your life philosophy?

A1. Always teach. Always learn. Think for yourself. Don’t just sit there. Take Gandhi’s advice and become the change you wish to see in the world.

Q2. What two delusions would you most like to disabuse early-career grad students of?

A2.  (1) The belief that you are a good technical writer. Technical writing is more a craft than an art, and your first draft usually won’t be that good. (2) The belief that people care to read about the details of what you did. They only care about your game-changing advance you’ve made. The details are there to convince them that you’ve worked it through.

Q3. What programming language should be the first one we teach non-CS students?

A3. If the goal is understanding “how to think computationally” (to steal and pervert a phrase from Jeannette Wing), I’d say BASIC. It forces you to learn to think straight and provides “baby step” introductions to fundamental concepts like conditionals, iteration, subroutines, and variables.

Q4. What about CS students?

A4. Here the goal is exploring the Big Ideas in CS—abstraction, higher-order programming, modularity, complex data structures. So I’d say Scheme. It can be learned in an hour and elegantly expresses all of these.