An introduction to principles that form the foundation of computer science for students with no prior background in computing. This course is suitable for students with a non-technical background who wish to study the key principles of computer science rather than just computer programming. Topics include the history of computation, writing algorithms and using programming constructs, data organization, the role of the compiler, programming language paradigm, recursion, algorithm correctness and efficiency, limits of computability and the Turing machine as a universal computer, the role of the operating system, an introduction to artificial intelligence, and alternative models of computation including parallel, quantum and molecular computing. Although programming principles and programming languages will be discussed, there will be no significant programming exercises in this class. Students who are interested in learning how to program in a specific programming language such as Java are encouraged to register for 15-100, 15-111 or 15-200 instead, depending on their prior programming background. Students who have completed 15-211 (or higher) are not permitted to register for this course.