CAT-SOOP is a flexible, programmable learning management system based on the Python programming language.

CAT-SOOP was designed primarily with flexibility, extensibility, and programmability in mind. That is to say, it should be possible to use and adapt CAT-SOOP to subjects with dramatically different structure, technical content, and pedagogy; and while the intention is to "bake in" lots of common pieces, effectively any behavior within catsoop can be overridden. While CAT-SOOP's core functionality is the collection and assessment of online exercises, it has been extended to support a variety of different features including, among others:

• content presentation (via text, video, interactive simulations, etc)
• grade reports and analytics (including fine-grained control over grading, due dates, extensions, and lateness penalties)
• queueing system for managing requests for help in an in-class lab environment or office hours
• real-time analytics for synchronous lab assignments
• timed quizzes
• a variety of subject-specific question types
• group exercises (with randomly-assigned or self-selected groups)
• finely-grained control over release/due dates (by section, or for individuals)
• an interface for online grading of paper exams

### 1.1) History

CAT-SOOP is a descendent of a system called "the tutor," written by Tomás Lozano-Pérez in the early-to-mid 1990's. The tutor was widely used at MIT and other universities. In 2011, CAT-SOOP and another system (Ike Chuang's tutor2, which I understand eventually grew into Open edX) were both developed in parallel as potential replacements for the tutor in MIT's 6.01 (Introduction to Electrical Engineering and Computer Science via Robotics). Despite having been designed with 6.01 in mind, CAT-SOOP was actually first used in the fall 2011 offering of 6.003 (Signals and Systems), while tutor2 was used in 6.01. CAT-SOOP was eventually used in 6.01, though, starting in the spring 2013 semester; and it began to see use in other subjects in later semesters.

While the internal structure of CAT-SOOP has changed a lot since then (including multiple rewrites from the ground up), development is still fairly active (particularly in the time between MIT's semesters).

## 2) Courses Using CAT-SOOP

The following are some of the courses I know of that use (or have used) CAT-SOOP as their main LMS:

• MIT 6.100A/6.100L: Introduction to Computer Science Programming in Python
• MIT 6.100B: Introduction to Computational Thinking and Data Science
• MIT 6.101: Fundamentals of Programming
• MIT 6.121: Introduction to Algorithms
• MIT 6.145: A Brief Introduction to Programming in Python
• MIT 6.190: Introduction to Low-level Programming in C and Assembly
• MIT 6.191: Computation Structures
• MIT 6.901: Interconnected Embedded Systems
• MIT 6.908: Introduction to EECS via Robotics
• MIT 6.200: Circuits and Electronics
• MIT 6.300: Signal Processing
• MIT 6.310: Dynamical System Modeling and Control Design
• MIT 6.340: Introduction to EECS via Communications Networks
• MIT 6.390: Introduction to Machine Learning
• MIT 6.A01: Mens et Manus First-year Seminar
• MIT 6.S092: Crash course in Algorithms (IAP)
• Olin College MTH 2132/SCI 2032: Bayesian Inference and Reasoning
• Olin College ENGR2340: Dynamics
• Olin College SCI2050: The Art of Approximation in Science and Engineering

If you use CAT-SOOP in your class, please let me know via e-mail to hz@mit.edu!