I’ve talked for years with students considering majoring in computer science who are curious what it’s about. I really enjoy these conversations, and invariably as the student gets ready to leave I suggest some book that I think might extend our conversation. I’ve always wanted to name a book that explores a wide range of topics while remaining grounded in real and useful programs. I want students to experience first hand the power of computing and gain some appreciation of its many applications. This book was inspired by those conversations and is dedicated to those students.
I couldn’t have written this book without the encouragement and patient feedback of many friends and colleagues. I especially want to thank John Bazik, Roger Blumberg, Tom Doeppner, John Hughes, Philip Klein, Shriram Krishnamurthi, Martha Pollack, Bart Selman, Eli Upfal and Joel Young. Lauren Cowles at Cambridge University Press helped refocus my initial draft and then provided concrete suggestions on how to improve every chapter. And there’s not a paragraph that didn’t benefit from Trina Avery’s careful and insightful editing; Trina made the often tedious process of copy editing mostly interesting and frequently fun.
But most of all, I want to thank my students for their enthusiasm, their creativity and their friendship. I wish I could list them all, but I especially want to thank Kalin Agrawal, Candace Batts, Nick Beaudrot, Sarah Bell, James Brock, Christine Davis, Michelle Engel, Erika Faires, Sam Hazlehurst, Kate Ho, Aron Holzman, Eliot Horowitz, Albert Huang, Danielle Karr, Roger Lederman, Katrina Ligett, Luke Ma, Gideon Mann, Paul Melnikow, Curran Nachbar, Bryant Ng, Brian O’Neil, Leah Pearlman, Ana-Maria Popescu, Brock Pytlik, Seema Ramchandani, Susannah Raub, Jennifer Rosenbaum, Brandon Roy, Maryam Saleh, Gloria Satgunam, Caitlyn Schmidt, Andrew Schulak, Tracy Schultz, Ravi Sitwala, Damien Suttle, Anisa Virji, Stacy Wong and Thomas Wooldridge.