This book is based on courses that have been offered at MIT since
2006, and as “Massive Online Open Courses” (MOOCs) through edX
and MITx since 2012. The first edition of the book was based on a
single one-semester course. However, over time I couldn't resist
adding more material than could be fit into a semester. The current
edition is suitable for either a two-semester or a three-quarter
introductory computer science sequence.
The book is aimed at 1) readers with little or no prior
programming experience who have a desire to understand
computational approaches to problem solving, and 2) more
experienced programmers who want to learn how to use
computation to model things or explore data.
We emphasize breadth rather than depth. The goal is to provide
readers with a brief introduction to many topics, so that they will
have an idea of what's possible when the time comes to think about
how to use computation to accomplish a goal. That said, this is not a
“computation appreciation” book. It is challenging and rigorous.
Readers who wish to really learn the material will have to spend a lot
of time and effort learning to bend the computer to their will.
The main goal of this book is to help readers become skillful at
making productive use of computational techniques. They should
learn to use computational modes of thoughts to frame problems, to
build computational models, and to guide the process of extracting
information from data. The primary knowledge they will take away
from this book is the art of computational problem solving.