CIS 120: Programming Languages and Techniques I

Syllabus

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++, 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 programming environment.


Textbook

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:

Grading

The course grade will determined as follows:
Homework 50%
Labs 6%
First midterm 12%
Second midterm 12%
Final exam 20%

 

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.

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.
  • 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.

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.
When in doubt about whether it is ethical to ask or answer a question of another student, ask a TA or the instructor.

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:
    • 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 the professor