Introduction to Computer Science and Programming


Open Educational Resources


Open Educational Resources (OER) are freely accessible, openly licensed documents and media that are useful for teaching, learning, educational, assessment and research purposes.

Reviews (3)

gyvira Odima
Hupen Paija


This subject is aimed at students with little or no programming experience. It aims to provide students with an understanding of the role computation can play in solving problems. It also aims to help students, regardless of their major, to feel justifiably confident of their ability to write small programs that allow them to accomplish useful goals. The class will use the Python programming language.

20 hours of lectures

26 lectures

Exams, quizzes and problem sets with solutions

Course Format

This course has been designed for independent study. It provides everything you will need to understand the concepts covered in the course. The materials include:

  • A complete set of Lecture Videos by Prof. Guttag.
  • Resources for each lecture video, such as Handouts, Slides, and Code Files.
  • Recitation Videos by course TA's to review content and problem solving techniques.
  • Homework problems with sample student solutions.
  • Further Study collections of links to supplemental online content.
  • Self-Assessment tools, including lecture questions with answers and unit quizzes with solutions, to assess your subject mastery.

A textbook for 6.00 is now available. The book and the course lectures parallel each other, though there is more detail in the book about some topics. The book is NOT required. We will not be referring to it in assignments or depending upon it to cover holes in the lectures.

Guttag, John. Introduction to Computation and Programming Using Python. MIT Press, 2013. ISBN: 9780262519632.

If you choose not to purchase this book, you will probably find it useful to buy or borrow another book that covers Python. You might check your local public library's resources, or search online for a free Python text, such as How to Think Like a Computer Scientist or An Introduction to Python.

Online readings will be posted on the appropriate session pages. A more complete list of readings and references (not all of which are specifically assigned during lectures) can be found in the References section.

Other optional textbooks:

Technical requirements

Since one of the goals of this course is to become familiar with programming, you will need to install and use the Python programming language and the interpreter IDLE. Please see the Software section for information and instructions on downloading the required software.

Most lectures involve programming demonstrations, and the code involved will generally be posted twice: once as a handout in PDF format, and again as a code file in .PY (Python) format. Additionally, many problem sets have accompanying code required for completing the assignment, and these are posted as .PY (Python) files. If you do not have the software installed, you will not be able to properly open and use these files.

About the instructor

Professor Guttag received a bachelor's degree in English from Brown University in 1971, and a master's degree in applied mathematics from Brown in 1972. In 1975, he received a doctorate in computer science from the University of Toronto. He was a member of the faculty at the University of Southern California from 1975-1978, and joined the MIT faculty in 1979.

From 1993 to 1998, Professor Guttag served as Associate Department Head for Computer Science of MIT's Electrical Engineering and Computer Science Department. From January of 1999 through August of 2004, Professor Guttag served as Head of that department.

Professor Guttag currently co-heads the Computer Science and Artificial Intelligence Laboratory's Networks and Mobile Systems Group. This group studies issues related to computer networks, applications of networked and mobile systems, and advanced software-based medical instrumentation and decision systems. Professor Guttag's current research is centered on the application of advanced computational techniques to medicine. Current projects include prediction of adverse medical events, prediction of response to therapies, non-invasive monitoring and diagnostic tools, and tele-medicine. He has also done research, published, and lectured in the areas of sports analytics, software defined radios, software engineering, mechanical theorem proving, and hardware verification.

Professor Guttag is a Fellow of the ACM and a member of the American Academy of Arts and Sciences

His recent publications can be found from here

Source: John V. Guttag in CSAIL.


We would like to thank course TAs Mitchell Peabody, Gartheeban Ganeshapillai, and Sarina Canelake for their participation in filming 6.00 recitations for OCW Scholar, and Niki Castle and Elaina Cherry for their work and dedication adapting the 6.00 materials for Scholar students. We would also like to thank Eric Grimson for his role in the development of 6.00 teaching material over the years, and for allowing us to record a guest lecture.


Creative Commons License
6.00SC Introduction to Computer Science and Programming, Spring 2011. (MIT OpenCourseWare: Massachusetts Institute of Technology) by Guttag, John. is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. Based on a work at

Course content

  • Lesson 1. Software

  • Lesson 2. References

  • Lesson 3. Breadth-First and Depth-First Searches

  • Lesson 4. Unit I. Introduction to 6.00

  • Lesson 5. Unit I. Core elements of a program

  • Lesson 6. Unit I. Problem solving

  • Lesson 7. Unit I. Machine interpretation

  • Lesson 8. Unit I. Objects in Python

  • Lesson 9. Unit I. Recursion

  • Lesson 10. Unit I. Debugging

  • Lesson 11. Unit I. Efficiency and Order of Growth

  • Lesson 12. Unit I. Memory and Search Methods

  • Lesson 13. Unit I. Quizz 1

  • Lesson 14. Unit II. Part I. Hashing and classes

  • Lesson 14. Unit II. Part II. OOP and Inheritance

  • Lesson 15. Unit II. Introduction to Simulation and Random Walks

  • Lesson 16. Unit II. Some Basic Probability and Plotting Data

  • Lesson 17. Unit II. Sample and Monte Carlo simulation

  • Lesson 18. Unit II. Statistical thinking

  • Lesson 19. Unit II. Using Randomness to Solve Non-random Problems

  • Lesson 20. Unit II. Curve fitting

  • Lesson 21. Unit II. Optimization Problems and Algorithms

  • Lesson 22. Unit II. More Optimization and Clustering

  • Lesson 23. Quiz 2

  • Lesson 24. Unit III. More clustering

  • Lesson 25. Unit III. Using Graphs to Model Problems, Part 1

  • Lesson 25. Unit III. Using Graphs to Model Problems, Part 2

  • Lesson 26. Unit III. Dynamic programming

  • Lesson 27. Unit III. Avoiding Statistical Fallacies

  • Lesson 28. Unit III. Queuing Network Models

  • Lesson 29. Unit III. What do computer Scientists do?

  • Lesson 30. Final exam

Interested? Enroll to this course right now.

There is more to learn