CIS 120: Programming Languages and Techniques I
Spring 2020


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 find their way around 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.


The course grade will be determined as follows:

Homework 50% 60%
Labs 6%
Class Participation (first half of semester only) 2%
First midterm 12% 14%
Second midterm 12% 0%
Final exam 18%



Lecture Attendance

Lecture attendance is required and will be recorded using Poll Everywhere. If you know that you must miss class, submit a Course Absence Report through Penn-in-touch. Such a report does NOT excuse you from lecture, but is informative. Your class participation grade will be based on your lecture attendance; in general, you will be allowed to miss a few classes (for any reason) and still get full credit. However, if you miss many lectures, your grade will be affected.

UPDATE: Lecture attendance is not required for the second (remote) half of the semester. Lectures will be broadcast live via Zoom (links will be posted to Piazza) and recordings will be posted on the course canvas page. We will continue to use Poll Everywhere during lectures and you are encouraged to join the livestream.

Lab Grade

Attendance of labs (recitations) is required. Your lab grade for the semester will be based strictly on attendance and participation during the lab sections.

UPDATE: Recitations will continue online and your TAs will contact you will information on how to join. You will now have two options to receive attendance credit:

  1. Attend your recitation online. Your TAs will take attendance as usual. If you are switching to a new recitation, your new TAs will take your attendance, OR
  2. Email your completed worksheet to your TAs by Thursday, 6pm EDT. These will be graded based on effort and completion, so please don't stress over getting every answer right! Our goal is to provide a flexible way for you to remain engaged with course content even if you can't make it to live recitations.

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. You will receive this feedback separately. Some assignments will be graded completely by hand.
  • 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, 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. This penalty will be deducted from the score of your highest submission, even if it was submitted before the deadline.
  • 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 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 me as they relate to your success in this class, I am happy to meet to discuss. 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 me (set up a meeting by email) with an assurance of full confidentiality.

Questions and Comments

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

For questions about:

  • Course material (concepts, homework, labs, logistics): Post a message on the Piazza CIS120 discussion group
  • Grading of a homework: Post an online Regrade Request (see the Homework page)
  • Grading of an exam: Post an online Regrade Request through Gradescope
  • The curriculum, e.g. becoming a CSCI major/minor, submatriculating in to a masters program: Email Desirae Cesar at
  • AP credit, waiver exam, prerequisites for upper level courses: Email Desirae Cesar at
  • Matters that can't be resolved by the means listed above: Email the professor