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
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
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++, Java, 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
langauges in the Eclipse
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.
For OCaml we rely on electronic resources:
For Java and OO Programming we recommend, but do not rely on the
following two textbooks:
The course grade will determined as follows:
Attendance of labs (recitations) is required. Your lab grade for the
semester will be based strictly on attendance and participation during
the lab sections.
Homework Submission Policy
- Homework is submitted online via a link on the Homework page.
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 last submission
will be graded for style.
- 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.
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
When in doubt about whether it is ethical to ask or answer a
question of another student, ask a TA or the instructor.
- 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
- 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
- Having someone else debug your code is not allowed.
- You should never email any part of your assignment to
- 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.
Questions and Comments
Your feedback is valuable and we want to do our best to answer your
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
- Grading of an exam:
- See Laura Fox in Levine 308 to review your exam (they can
not be taken away)
- If you still have a question, fill out a paper regrade form
(found with Laura in Levine 308)
- The graders will send you an email about the decision.
- The curriculum, e.g. becoming a CSCI major/minor,
submatriculating in to a masters program: Email Jackie Caliman at
- AP credit, waiver exam, prerequisites for upper level courses:
Email Jackie Caliman at
- Matters that can't be resolved by the means listed above: Email