The goal of the course is to teach fundamental concepts of programming that will enable you to solve interesting, challenging real-world problems with reliable, modular programs that can be tested, extended, shared with others, and combined effectively with other programs. You will learn about data types and data abstraction, how data is represented in memory, how to decompose complex programming problems into manageable subproblems, how and when to use elementary data structures such as arrays, lists, trees, and maps, different approaches to structuring programs (object-oriented, imperative, functional), communication between programs and their environment (basic user interface, input/output, networked communication), and how to test and fix programs (unit testing, debugging). While this course focuses on the fundamentals of programming, we will use examples and assignments that give you a first taste of important areas of computer science, including computer graphics and multimedia – how to process and present images and sounds; databases and search – how to organize and search complex data; networking – how to manage communication among computers; artificial intelligence – how to write programs that generate language and learn from experience; and games and simulation – how to model a complex world.

CIS120 students are not expected to have any prior experience with OCaml (or even Java). We assume some previous programming experience at the level of a high school computer science class. If you got at least 4 in the AP Computer Science A or AB exam, you will do great. Basic experience with any programming language (for instance C, C++, Python, VB, or Scheme) will be sufficient. If you have never programmed before, you should take CIS 110 first.

We will mainly use OCaml and Java programming languages in the Codio and Eclipse programming environments.


There is no required textbook for this course – no existing textbook fits the requirements of this course closely. Instead, we provide lecture notes tailored for this class.


Homework 57%
Recitations 6%
Content Quizzes 2%
First Midterm 10%
Second Midterm 10%
Final Exam 15%

Asynchronous Course Material

The course material will be presented in the form of lecture recordings and supplemental videos available on the web site. These videos will be released in advance of the scheduled “lecture” meeting times, and students are expected to watch these them ahead of time so that they can actively participate in the synchronous section discussion and demonstrations.

Weekly “content quizzes” will stand in for course attendance, and they will follow the topics covered from week to week. You should watch the lecture content before taking each quiz.

Synchronous “Lecture” Content

The scheduled lecture times will be used to hold interactive sessions where students are encouraged to ask questions about the course material. These sessions will also be used for live coding demonstrations, examples, and homework discussions.

Recitation Credit

Recitations (sometimes referred to as labs) are weekly review and problem-solving sessions for groups of ten to twenty students led by two TAs. Recitation attendance is strongly encouraged, both to find a community within CIS 120 and to review the course concepts in a small group environment.

In order to accommodate time zone differences, you have two ways to earn recitation credit each week:

  1. You may attend your live recitation. In order to receive credit, you must keep your camera on and actively participate in your recitation. If you are unable to keep your camera on during your recitation, please email

  2. You may complete the weekly recitation worksheet and email it to your TAs by 23:59 AoE (Anywhere on Earth, UTC-12h) each Thursday. These will be graded based on effort and completion, so don’t stress over getting every answer right! You are welcome to come to office hours or post on Piazza if you have any questions about the worksheet.

Homework Submission Policy

  • Homework is submitted online. Feedback on the correctness of your homework submission will be given immediately by an automatic grading script. A small part of the homework grade will also be derived from the code style and design and the implementation of test cases. You will receive this feedback separately. Some assignments will be graded completely by hand, but the grading policy will be made clear when the homework is distributed.

  • Your homework submission must compile for you to receive credit on the assignment. If it does not, you will be assigned a zero for the assignment.

  • You may submit the same assignment multiple times without penalty up to a limit that will be announced for each assignment. Additional submissions beyond this limit will cost a number of points per submission, which is also indicated on the assignment. Only the submission with the highest auto-graded score will be graded for style.

Homework Late Policy

  • Late submissions are allowed within 48 hours of the deadline. Submissions within the first day after the deadline will be penalized 10 points. Submissions within the second day after the deadline will be penalized 20 points.

  • Individual homework assignments may override this policy.

  • If you have an extremely unusual circumstance, such as a serious and extended illness, contact the course instructor for special consideration.

Code Reviews

Some homeworks will have code reviews (meetings with your recitation TA in which your TA goes over your code with you and gives you feedback). Attendance of code reviews will factor into your homework grade. To reschedule a code review, you must contact your TA at least 24 hours before your code review time.

Regrade Policy

Unless otherwise announced, you will have one week after you receive the grade for your assignment or exam to request a regrade.

Honesty Policy for Homework

This course will abide by the University’s Code of Academic Integrity.

  • You must type in and edit your own code.

    • Copying someone else’s file is not allowed.
    • Allowing someone else to copy a file of yours, either explicitly or implicitly by leaving your code unprotected, is not allowed.
    • Editing each other’s files is not allowed
  • You may not show your code to others

    • Showing your code to someone else who is having trouble is not allowed.
    • Having someone else debug your code is not allowed.
    • You should never email any part of your assignment to another student.
  • Use your best judgement.

    • Protect both yourself and your friends. In Penn Engineering, in cases of unwarranted collaboration all participating parties are typically penalized (both helpers and helpees).

    • Use judgement about asking or answering questions of other students. For example, if you are supposed to implement Algorithm X that is described in the book, and you don’t understand Algorithm X, then you can ask another student to explain it to you. However, if you are supposed to come up with your own algorithm to solve a problem, then you can not ask another student to tell you their algorithm.

Please see the Rules about acceptable behavior in the CIS 120 FAQ for more clarification.

When in doubt about whether it is ethical to ask or answer a question of another student, ask a TA or the instructor.

Inclusion and Diversity

At Penn, we value the backgrounds and identities of all students (including but not limited to country of origin, race, class, religion, ethnicity, gender, sexual orientation and identity, and disability status), and are committed to providing an inclusive climate. If there are elements of your experiences, culture or identity that you would like to share with us as they relate to your success in this class, please feel free to reach out (anonymously on Piazza, or by email to []). Likewise, if you have any concerns in this area or are facing any special issues or challenges, you are encouraged to discuss the matter with the course staff (set up a meeting by email) with an assurance of full confidentiality.

Recording Policy

To facilitate access for all class members, the synchronous sessions, including your participation, are being recorded and the recordings will be made available to the class, for the duration of this course. These recordings, as well as previously recorded lectures and other course materials, are made available solely for your personal, educational use and may not be shared, copied or redistributed without the permission of Penn and the instructor. You are also not allowed to record class sessions yourselves. Unauthorized sharing or recording is a violation of the Code of Academic Integrity.

Questions and Comments

Your feedback is valuable and we want to do our best to answer your questions! For questions about: