CIS 120
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. Here's a more detailed syllabus, which may change as the class progresses.
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. However, we do not assume you know Java. Basic experience with any programming language (for instance C, C++, VB, PHP, Perl, or Scheme) will be sufficient. A quiz will be given in the second week of class to test your programming knowledge so that you can decide whether the class is for you. If you have never programmed before, you should take CIS 110 first. We will mainly use Java and the DrJava programming environment, but we will also explore higher-level languages (Python).
Textbook
We find the Java Backpack Reference Guide (Java 5 edition) by DePasquale, Addison-Wesley very useful as a reference when reading or writing Java programs. If you like to have a concise, handy reference always handy, you should definitely get this. This book is the only reference allowed during exams.
No existing textbook fits the requirements of this course closely. The one that comes closest is An Introduction to Programming and Object Oriented Design by Niño and Hosch (second edition), Wiley. Students who like to study with a textbook may find this book useful, but we do not require it, because there are too many divergences in approach to programming, order of topics, and presentation between the course and the book.
For Python we rely on online resources, listed here.
Grading
The course grade will determined as follows:| Homework | 20% |
| Labs | 14% |
| First midterm | 12% |
| Second midterm | 12% |
| Third midterm | 12% |
| Final exam | 30% |
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 bulletin board
- Grading of a homework: Post an online Regrade Request (see the Homework page)
- Grading of an exam:
- Go to 502 Levine to review your exam (they can not be taken away)
- If you still have a question, fill out a paper regrade form (found in 502 Levine)
- The graders will send you an email about the decision.
- The curriculum, e.g. becoming a CSE major/minor, submatriculating in to a masters program: Email jfinley@seas.upenn.edu
- AP credit, waiver exam, prerequisites for upper level courses: Email jfinley@seas.upenn.edu
- Matters that can't be resolved by the means listed above: Email the professor
Lab Grade
Attendance of labs (recitations) is required. When you arrive, make sure to sign the attendance sheet. Some labs will have assignments that need to be submitted, for example "competency" exercises in the form of java programs, due a few days after the lab meets.If there is no lab assignment
lab grade = 100% attendance/participation
Otherwise
lab grade = 50% attendance/participation, 50% assignment grade
- focusing on coursework
- not distracting others by im'ing, net surfing (other than course-related), etc.
- taking turns when working with a partner
- Note: Helping each other during the lab is encouraged
- 100/100: shows up and works on coursework as good citizen; 1st or 2nd missed lab
- 80 (60/40/20): late (really late)
- 80 (60/40/20): disruptive; won't take turns in partner work (repeatedly)
- 0/100: no show for 3+ time
Submitting Homework
Homework is submitted online via a link on the Homework page. You may submit homework problems multiple times. For example, you may realize after submitting work that it contained an error. You can resubmit it and the most recently submitted work will be graded.Late Homework Policy
Homework submitted after it is due but within 24 hours will be accepted and all problems will be graded with a 20% penalty.Regrade Policy
Unless otherwise announced, you will have one week after a grade is emailed to you to request a regrade.Honesty Policy for Homework
- 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
- Regarding the ethics of what you may or may not discuss with other
students:
- "High level" discussions are fine.
For example, discussions about the problem statement. - "Low level" discussions are fine.
For example, discussions about Java syntax, understanding compiler error messages, understanding the mechanics of the Java language. - "Mid level" discussions require discretion. In some CSE courses, discussions at this level are not allowed. In this course, unless explicitly stated otherwise, you may collaborate with classmates at this level, provided that you cite at the top of the submitted homework the names of the classmates that you worked with and those who helped you. For example:
/** * Chris Brown * Homework 2 * 5/6/2007 * I worked with Pat Smith and Jessie James * I received help from Jo Johnson */There may be some "no collaboration" homeworks, or ones in which collaboration with only with a few specific people is allowed.
- "High level" discussions are fine.
- You can ask and answer high level questions as described above.
- You can ask and answer low level questions as described
above. However,
- A student who needs help with debugging a program may show another student his/her code.
- A student who is helping someone else may not show his/her code.
- Use your best judgement to protect both yourself and your friends. In Penn Engineering, typically if a professor suspects unwarranted collaboration, all participating parties are penalized (both helpers and helpees).
- Use your best 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.