Syllabus

ICS-31: Introduction to Programming


Introduction This page contains material that will be important and useful throughout the entire quarter. I consider it a contract with my students. Please read it once now, and keep it handy for future reference. You can search this page in your browser for specific information by typing Ctrl F (most browsers) or selecting Edit | Find on this page (Windows IE) or Edit | Find in This Page... (Firefox), then entering the text that you want to locate. Many questions that you might have about this course during the quarter are already answered inside this document (so become familiar with its contents and how to search it). It also contains lots of good advice on getting the most out of this course.

Catalog Description "Introduction to fundamental concepts and techniques for writing software in a high-level programming language. Covers the syntax and semantics of data types, expressions, exceptions, control structures, input/output, function, classes, methods, and pragmatics of programming."


Course Philosophy My goal in ICS-31 is for students to begin learning the general principles of programming: how to specify, design, code, document, test, debug, evaluate, and maintain computer software. To make these principles concrete, we will explore them by studying and using the Python programming language. This course assumes no prior programming experience, so it will carefully explain everything that students need to know to understand programming; but, it will move at a quick pace, so be prepared to work hard and struggle a bit with the material. Also, the material we cover needs to be understood so it can be applied in novel situations, not just memorized.

The intellectual content of this course can be neatly divided into three main subject areas: Algorithmics, Abstraction, and Analysis (the triple-As):

  • Algorithmics: tokens, simple types, literals, names/variables, objects, expressions, exceptions, and control structures.
  • Abstraction: functions, compound types (strings, lists, sets, maps, ... classes), methods, modules.
  • Analysis: equivalence, pragmatics, aesthetics (style), correctness (testing/debugging), efficiency (big-O notation), and numerical accuracy.

The main programming methodology that we will learn and employ is iterative-enhancement, which decomposes a large project into a series of mini-projects (each is called a phase). Starting from a kernel, and writing a program for each of these phases in sequence, results in a solution to the original project. Each phase requires repeatedly specifying, designing, coding, documenting, testing, debugging, and evaluating a testable program (or new or enhanced function to use in the program) that is a small extension of the capabilities of the program (or function) produced in the previous phase.

Here is a quick overview of the the three programming class in UCI's three quarter Introduction to Programming sequence. All are taught in Python, and the combined time-on-task studying and programming with this language should make students proficient in using it.

  1. ICS-31: Introduction to Programming. This course introduces the basics of the Python programming language and how to develop programs in an Integrated Development Environment using Python.
  2. ICS-32: Programming With Software Libraries. This course increases students' abilities to write more complicated programs; it focuses on students learning how to read, understand, and employ modules from Python's library.
  3. ICS-33: Intermediate Programming. This course examines Python more carefully, giving students a more unified look at the language and discussing some of its powerful features that make sophisticated programming easier. It also covers some programming related Computer Science topics.
A quick way to analogize these courses is: 31: learning to drive; 32: road trips; 33: car mechanics.

Although we will mostly study programming-in-the-small, we will concentrate on the technical and lingual issues of building large, reliable programmed systems that are constructed from standard components. Expect to cover most relevant Python language features thoroughly, but also to spend much time discussing the less concrete -but ultimately more general and important- aspects of programming. Programming style is a particularly important topic: to understand programming, we really need to develop appropriate aesthetics that allow us to separate "elegant" programs from "hacks". As in any writing activity, we must also learn to be self-critical of our own creations, so that we can continually improve them; this skill is difficult to acquire, and its importance extends well beyond the domain of programming.

Finally, to become an expert in any discipline, we must master its terminology. Fluency with technical terms allows us to communicate -and even to think- more accurately and concisely. Therefore, the materials in this course will define, illustrate, and repeatedly use many important technical terms concerning programming. Take the time required to master them. An old Chinese proverb says, "The first step towards wisdom is calling things by their right names."


.
Textbooks There is no required textbook for this course. The primary sources for ICS-31 will come from materials that I have written (and am continually updating). These materials include readings, problem sets, quizzes, and programming assignments (and a bunch of infrastructure material, like this syllabus). Typically, these materails will be shorter than chapters in a textbook, but they are more densely packed with information; thus, you will still spend about the same amount of time studying my web pages as you would reading a textbook.

I have listed as optional the textbook, Horstmann and Necaise, Python for Everyone, Wiley, 2013.

Recently ICS-31 and ICS-32 classes taught by other instructors have used the following book: Perkovic, Introduction to Computing Using Python: An Application Development Focus, Wiley, 2011. Copies should be available at the bookstore or online at Amazon,

I have used the following books in the more advanced Python classes I have taught. They are difficult reading for a beginner, but the more you learn about Python the easier it is to read these books.

  1. Lutz, Learning Python (Fourth Edition), O'Reilly, 2011. Copies should be available at the bookstore or online at Amazon,
  2. Lutz, Programming Python, O'Reilly, 2009. Copies should be available at the bookstore or online at Amazon,
These books are available new and used on the internet. See DirectTextbook, which crawls the web for cheap prices. Don't forget to account for shipping costs and delivery time if you don't buy from the UCI bookstore.

Finally, there are many Python resources on the internet. One goal of this class is to get you closer towards being able to find and use relevant online information based on questions you have about Python.


Computing Platforms and Programming Environments The standard computing platforms for this course are
  • PCs running the Windows (7 or similar) Operating System (OS).
  • Macintosh PCs running the OS X operating system
  • Either PC running Linux.

We expect that ICS-31 students will use their own computers to complete their programming assignments (sometimes working in groups of two: pair programming). All the software used in ICS-31 is available, for free, on the web.

The programming environment that we will use is Eclipse: it is an Integrated Development Environment (IDE), including a project manager, editor, interpreter, and debugger. We will write all our programs in the Python programming language. To run Eclipse with Python, you must first install Java (to run Eclipse) and Python, and then Eclipse itself. This software, and others useful for the course, are available through the Course Software link (see the heading Main Software, near the top). You should try to follow these instructions, and download and install this software yourself; if you are having difficulty, please bring your computer to lab and ask our staff to help you with the installation.

Typically it takes only a few days before everyone has correctly downloaded and installed the necessary software, and has started to learn how to use it properly. Using this software is integral to every programming assignment during the quarter, so it is best to be aggressive and download, install, and start mastering this software quickly.


ICS Computer Labs We expect students to do much (but not all) of their programming assignments during their labs, which are scheduled for 4 hours per week. These labs are staffed by TAs and Lab Tutors. I encourage all students to ask them questions on a regular basis and generally engage them in a dialog about programming: learning to talk about programming is an explicit goal of this course.

While most students will do their coursework in labs on their own machines, the ICS Labs also provide machines with the correct software loaded. You should follow these Activation Instructions for your ICS Lab Account early in the quarter. Whether or not you plan on doing your homework in a lab, you must activate your ICS account and know how to use it for in-lab programming exams.

During in-lab programming exams, you must write your programs on the PCs in our labs, so you should learn to use these machines, even if you use your own machine for all other coursework. Once you start Eclipse, what computer you are on makes little difference: PCs, Macs, and Linux systems operate similarly.

Although the machines in the ICS labs also provide some external storage space (the H drive on a Unix system), it is an excellent idea to backup your work either electronically or using USB memory, whether you are using your own computer or the computers in our lab.

Finally, the ICS 364 lab is a general purpose lab in which no courses are scheduled. It is open to students on weekdays and weekends: MTuWThT 8:00am - 10:00pm, F 8:00am - 8:00pm, and SaSu 12:00noon - 6:00pm. Here is the most up to date Lab Schedule for all these labs.


Instructor
Office Hours
I welcome students, individually or in small groups, to come by and talk with me during my Office Hours. If we need to talk, but you cannot come during my office hours, please email me so that we can arrange an alternative time to meet; or better yet, maybe we even can resolve the entire issue over email (or using the Message Forums, discussed below, where other students can benefit from questions and answers).

I will be glad to talk with you about any of the ICS-31/-32/-33 courses, Computer Science, UCI, or whatever else you want to discuss. Although UCI is a large school, ICS is a smaller school within it, and ICS promotes opportunities for close faculty-student interaction, especially with instructors who are lecturers. Unfortunately, in my opinion, not enough students take advantage of this opportunity at UCI.

I especially encourage students who are having problems in the course to visit me immediately; I know that this is asking a lot, but the payoff for recognizing the situation and acting on it immediately is tremendous. The primary reason that students fail to thrive in programming courses is that they fall behind in their work -often because of what is initially a small misunderstanding; but, because of the cumulative nature of this course, even a small misunderstanding can quickly grow into a big one. Often, I can quickly diagnose and rectify such a problem one-on-one. Getting help fast can critically affect your overall performance in this course: many times I've seen students start performing one grade level higher after coming in to get help during my office hours.

Unfortunately, I teach ~400 students during a typical quarter, so my time is a bit limited. But please come visit if you need help so we can try to work things out. Of course, you can also talk to your TA and Lab Tutors during your labs, where resources and time are not so tight.


Instructor
Online Hours
I hold online hours every weekday evening before class/lab meets: Monday, Tuesday, Wednesday and Thursday evenings from 9:00pm-10:00pm. I will be logged onto AIM (AOL Instant Messenger) as richardepattis during these times.

If you are not already a member of AIM (or a similar service that can message AIM users) Sign Up for this service (it is free). Using this system, you will be able to Instant Message me, as well as use an audio (voice) connection if you have a headset with a microphone. You can IM me with questions; you can also cut/paste code snippets into your message. Please be aware that I may be having multiple conversations, and therefore react more slowly than you might expect.


Instructor/Course
EMail
If you have a small question (one requiring little back-and-forth discussion), and cannot directly contact me or any of staff, please ask it by sending me email (pattis@ics.uci.edu). It has been my experience that the act of writing a detailed description of a problem (detailed enough so that someone not physically present can understand it) often leads a student to his/her own solution of the problem. Frequently, before I even get a chance to read my email, I receive a second message saying, "Please ignore my earlier message, I solved the problem myself." I believe that the seeds of the solution are sown in the act of carefully composing the first email message. Here is quote on my website about this phenomenon.

Another effective [debugging] technique is to explain your code to someone else. This will often cause you to explain the bug to yourself. Sometimes it takes no more than a few sentences, followed by an embarrassed "Never mind, I see what's wrong. Sorry to bother you." This works remarkably well; you can even use non-programmers as listeners. One university computer center kept a teddy bear near the help desk. Students with mysterious bugs were required to explain them to the bear before they could speak to a human counselor.

- B. Kernighan & D. Pike (in "The Practice of Programming" pp. 123)

Talking about programming is important. One of the reasons that we program in pairs is to always have someone who you can to talk to about your code; unlike the teddy bear, someone who has an interest in getting your code to work, and who might supply relevant feedback.

I try to answer email every few hours during the day. I normally will not answer email sent after about 10:00pm until early the next morning (but I'll typically answer it by the next morning). If you have problems late at night that you cannot resolve, please send me email (or post on the relevant forum) summarizing your problems, and then go to work on something else (or if it is really late, go to sleep). By planning to finish assignments early, you can protect yourself against a big problem that arises at night and cannot be fixed until the next day: you really don't want to have to fix such a problem the night that an assignment is due.

For most problems -ones that are of general interest to the class- I would prefer that you ask the question using a MessageBoard forum (see below). In this way, everyone in the class can see the question and its answer (which I might provide, or a a TA/Lab Tutor, or another student). One of the few advantages of a big class is having lots of student activity on such forums, leading to peer-instruction.

Finally, the Electronic Educational Environment (EEE) at UCI creates and maintains course-wide mailing lists. I have created a "merged" mailing list for all my ICS-31 students (which also includes those students signed up for CSE 41, both in the Sammueli School of Engineering and the Donald Bren School of Information and Computer Science). All members of our course (staff and students) can use this mailing list, whose email address is ics31-S14@classes.uci.edu All messages sent via this discussion list are archived: click here or see the Email Archive link on the course website. Mostly student-initiated questions/discussions should use the forums mentioned below, but sometimes students can use this email list to inform the instructor, staff, and other students about some timely issue: e.g., the Checkmate Homework Dropoff system not responding to program submissions.


MessageBoard Forums

If you have a question of general interest (of interest to many students in the course, not just you), then you should post the question on one of the Forums on the EEE MessageBoard. These forums allow students to ask questions (or start discussions) easily, as well as supply answers (or participate in the discsussion further). For example, if a lecture note, programming assignment, etc. contains unclear (or even contradictory) information, post a note about it to the appropriate forum, asking for a clarification. I, or someone from my staff will read and reply to whatever questions are asked. In fact, if you read a question on a forum, and know the answer -or generally have something to contribute to the topic- I encourage you to to post a reply to help resolve the problem even sooner. Thus, you can use the forums to discuss any course materials out-of-class.

Again, forums are appropriate for questions relevant to most students in the course; directly email me (see above) for questions of a more individualistic nature. Obviously students should not use these forums to solicit nor post answers to take-home quizzes, programming assignments, or anything else that would be interpreted as academic misconduct (which is discussed in greater detail below). But general informational questions and answers are fine. I often find that students send me individual email when they should be posting on a forum; think before you decide which to do.

It is an excellent idea to check these forums frequently, to keep up to date on any coursewide discussions.


Staff: TAs, Lab Tutors I will have various UCI graduate and undergraduate staff members to assist me in running this course. TAs will supervise the labs and be assisted by Lab Tutors. In labs, their primary responsibilities are to help you write and debug your programs, backfilling Python material that you might need to know or understand better. You can certainly discuss programming and Python in general with these staff members. TAs will also be responsible for grading programming assignments; if you have a question about how your programs are graded, please see the TA first, and then come to see me if any issues remain. TAs will also grade the weekly quizzes.

While in lab, the TAs and Tutors will help you diagnose any computer/programming problems that you have and guide you toward a solution. They will help you learn how to program by answering your questions; but, do not expect them to write your programs for you. You should approach them with a well thought-out question, and expect to answer questions from them about your state of understanding the issues surrounding the question. Sometimes when you come to the staff with a specific question, they will show you how to solve a more general problem. Be patient; the staff are just trying to teach you how to recognize and solve these problems by yourself.


Classroom Information

Before/After Class I expect students to read the assigned lecture materials, either before class (as a way to preview the lecture) or after class (where the lecture previews the reading), to get the most out of both: cover the material twice. Try to work out solutions to the assigned problems, to prove that you have understood the material; you can often test/verify/explore your solutions on the computer. Here understanding means "be able to use the information operationally to write programs". If you have difficulty with a problem, it indicates that you should probably go back over the related reading -or certainly ask a question about it on the Forum. One of the few advantages of a big class like this is the potental for peer-teaching.

Because these problems are not graded, feel free to discuss them, but don't give away the answers for those still working on them: working on exercises like these builds your programming muscles. Students will be required to solve similar problems on (almost) weekly take-home quizzes, on which collaboration is NOT allowed. Don't cheat yourself in this aspect of the course.

During Class I expect students to attend class daily. During the 35+ years that I have been teaching, I have observed a strong correlation between attending class and understanding the material (which ultimately improves student grades). Having all the course materials online is a great resource, but just as important is coming to class -and paying attention, once you are there- and participating by volunteering information when you know it and asking questions when you are confused.

I will lecture during class, but I prefer discussing the material and answering questions; asking you questions about the material, and amplifying on those topics that need further discussion. I expect most "lectures" to be interactive, with students participating.

I encourage you to participate by raising your hand; sometimes I may finish the point I'm making before calling on you, but please keep your hand up if you want to speak. If you have a question about the material, it typically means that I have explained something incorrectly, poorly, or incompletely, and that other students have (or will soon have, maybe right after they leave the classroom) the same question. So, it would be best for all of us to correct the problem immediately in class by someone bringing it to my attention. If you cannot ask in class, post a question later on a MessageBoard Forum. In summary, this class runs on the Dershowitz principle: "Question authority; but raise your hand first".

Class Decorum I expect students to attend class daily, arriving on time. The announcements made at the start of class are often very important. On Mondays I will collect quizzes at the start of class. I expect students to neither carry on private conversations, nor distract other students by using their computers to answer email, surf the web, day trade stocks, or perform any other activities unrelated to this course.

Ringing cell phones disrupt my lectures. Unless you are responsible for someone's life, your cell phone should be turned off. Otherwise, you should set it to operate in some silent mode (as mine will be set); if it rings silently, please leave the class, with a minimum of disruption to the rest of the students, to answer it. If your cell phone rings audibly in class, you will be charged a 2 pt point deduction the first time, and a 5 point deduction for all subsequent infractions. Finally, if you know that you must leave early, please sit near a door, so that you can exit quietly and without disturbing the class.

Overall, please strive to be a considerate class member, both to me and to your fellow students.


Testing Instruments and Grades

Quizzes I will assign eight take-home Quizes to ensure that everyone is keeping pace learning the course material and is able to express themselves on technical matters both in English and Python. Each will have problems similar to those assigned daily in class (and similar to those on upcomming written exams; working these quizzes is a major way to "study" for these exams). These quizzes will be a take-home instrument: most will be distributed at the end of class on Friday and collected at the start of class on the following Monday. During the weekend, you will have as much time as you need to work on the quizzes.

The quizzes are open-book: you will be able to use any class materials, or any other materials from the web, to answer its questions. But, you may not communicate with anyone about these quizzes nor their solutions; nor should you search for/look at solutions to these specific problems on the web. The quizzes are also open-computer: by that I mean that you may use a computer to check your work.

Programming Assignments I will assign six full programming assignments (and two shorter ones) to ensure that everyone is getting the necessary hands-on programming experience. While working on these programs, you will acquire a solid and fine-tuned understanding of the course material as well as gain important process of programming skills. Programs will typically be discussed and started in Lab on Thursdays, and be due (submitted electronically) the following Thursday evening at 11:30pm (typically 1 week after they are assigned; but Program #0 and #2 are shorter).

Students will often be required to work in groups of two on programming assignments. Such an approach is called Pair Programming. On student from each pair submit all parts of the programming assignment with both their names on it (in the code files). Apart from your pair, you can get general help from anyone (Instructor, TA, Lab Tutors, friends, etc.) on programs. But, the best kind of help to get is oral: where you describe the problem, possibly showing your code briefly, and then get an oral answer that you understand and translate into code. In such instances, you are learning.

You may neither copy nor transcribe (written or orally) any parts of another student's program, nor have another student sit down and systematically correct your program.

When you submit your programs for grading, you are expected to understand all parts of them and have improved your process of programming skills while writing and debugging them. Students who complete their programs in this way will be well prepared for the In-Lab Programming Exams; students who get too much help (on purpose, or accidentally) from their programming partners or others will have a more difficult time on these exams, which can severely impact their grade.

You will submit your solutions to programming assignments through Checkmate, special softare that records the time they are submitted. You can resbumit your programs as many times as you want. We will grade only the final submission. You can read about Submitting Homework using Checkmate and practice using it in Program #0.

To promote good time management skills, if you submit a program at least 24 hours before it is due, you will receive 1 point of extra credit. If you submit a program 48 hours early, you will receive 2 points. You can gain no more than 2 points of extra credit by early submission. For a 45 point assignment, this extra credit is equivalent to almost half a letter grade improvement. In general, it is a bad idea to submit programs more than 48 hours early (typically we will return graded programs on Monday, and you should wait to receive them and see how they are grades before submitting your new program).

I know from long teaching experience that students who work ahead of the deadlines learn more, in a less stressed envrionment: students working right up to a deadline are more concerned with getting the right answer and less concerned with learning anything. On the other side of this coin, I will not accept any late programs. So, you must turn in your work on time: if you turn in a partially working program on time, it will receive partial credit; if you do not turn in anything on time, then I must assume you did no work on the program, and you will receive no credit. Therefore, always turn in whatever work you have finished by the official due time.

Written Exams I will assign one Midterm Written Exam and one Final Written Exam to ensure that everyone is successfully integrating all the material being taught. Its problems will be similar to those assigned on homework, and especially on weekly quizzes. These written exams are closed-book: you will not be able use any notes nor class materials while taking these exams.

The best way to study for these exams is to do all the homework and quizzes (and programs -sometimes material from programming assignments appear on these exams) and review these quizzes (and programs). Cramming will be of little help: we will cover too much material during the quarter. Students are expected to be able to do these problems both quickly and accurately.

The Final Written Exam is comprehensive: it will cover material from the entire quarter (but will concentrate on the material presented after the Midterm Written Exam, which builds on the prior material).

In-Lab
Programming Exams
It looks like I will have time to assign only one in-lab programming exam Spring quarter, 2014.

I will assign two In-Lab Programming Exams (taken during labs) to ensure that everyone can write (and debug) their own programs. The first exam will focus on using functions and control structures; the second on compound data types (lists, dictionaries, sets, and classes). Of course, you will have to know lots of general material about programming in Python to solve all these problems effectively (as well as how to use the Eclipse IDE).

The programming exams themselves will be closed-book; but, you will be able to access a copy of the standard Python library documentation. I will grade these programs 90% on correctness: inapropriate use of Python -e.g., overly complicated or inefficient programs- will be penalized at most 10%.

Solutions and
Returned (Graded) Work
I will create a EEE Drop Box for my solutions to all quizzes, programming assignments and written/programming exams soon after they are due (which is another reason why I accept no late work). I expect that students will carefully examine my solutions for immediate feedback. Note that the best time for you to study my solution is the day that I distribute it, having just spent a good amount of time working on your own solution. The sooner you examine my solutions, the more receptive you will be to learning something. Finally, my solutions sometimes contain mistakes: if you are the first person to post a correction on a MessageBoard forum, I will award you extra credit points: the same number that I would take off for the mistake.

I will return graded quizzes with two class meetings after they are turned in (since they are typically turned in on Monday, I will typically return them on Wednesday). I will return graded programs on Mondays; do not submit new programming assignments until you have received feedback on your previous assignment. Finally, I will return written/programming exams within a week of when they are given.

If you believe that I have graded any of your work incorrectly, I encourage you to see me immediately about the discrepancy (in the case of programming assignments, see your TA first). Such a discussion can have only positive outcomes: either I will agree with you that you deserve more credit (and, I do want you to receive all the credit that you are due), or you will come to understand the question, program, or solution better. This is certainly a win-win situation. In any case, carefully examine my solution before you come to see me.

Final Grades Your final grade is computed from your quizzes, programming assignments, written/programming exams as follows.

Instrument#Points EachPoints Total% of Grade
Quizes82520020%
Programming Assignments2 + 52@25+5@5030030%
Midterm Written Exam115015015%
In-Class Programming Exams115015015%
Final Exam120020020%

Note that 55% of the grade is based on written work and 45% is based on programs; looked at another way, 50% of the grade is based on work done supervised in class and 50% is based on work done in an unsupervised (take-home) environment.

Based on your percentage, your final grade is computed as follows.

PercentageGradeGradiations
90%-100%AA- (<93)
80%-  89%B B-(<83)  or   B+(≥87)
70%-  79%C C-(<73)  or   C+(≥77)
60%-  69%D D-(<63)  or   D+(≥67)
  0%-  59%F

This is straight calculation, not based on a curve. I tend to grade programming assignments liberally, but quizzes, written/programming exams conservatively. As a rule of thumb, I expect about 25% of the student to earn As, about 25% to earn Bs, about 25% to earn Cs, and about 25% to earn Ds or Fs. This course is NOT graded on a curve, so these are only expectations from past course performance, not mandated numbers; your numbers can be higher or lower.

After finishing 4 quizzes, 3 programming assignments, the midterm, and the one in-class programming exam, you have a reasonable indication of your final course grade (which, of course, will still heavily depend on the grades you earn afterward).


Academic Integrity

No one comes into a class expecting to cheat, but I would suggest that you become familiar Bren School of Information and Computer Sciences Academic Honesty policy, which is just one of many of the many Undergraduate Policies with which you should become familiar.

The following information is my own restatement of this policy, as it applies in my courses. You will also be asked to read and sign a handout to acknowledge that you understand the Academic Integrity Contract that applies for this course.

Policy The decision as to whether a student has cheated depends on the intent of an assignment, the ground rules specified by the instructor, and the behavior of the student. The following two guidelines help an instructor decide if cheating has occurred on programming, which is the fuzziest area:
  • Plagiarism will be suspected if an assignment that calls for independent development and implementation of a program results in two or more solutions so similar that one solution can be converted to the other(s) by a series of simple transformations.
  • Plagiarism will be suspected if a student who completed an assignment cannot explain both the intricacies of the solution and the techniques used to generate that solution.
It is unreasonable to expect a complete definition of cheating that would cover all cases, because each situation is important enough to merit careful, individual scrutiny; however, it is helpful to have guidelines and precedents.

Here are some examples that are clearly cheating and clearly not cheating.

Examples of CHEATING:

  • Turning in someone else's work, in whole or in part, as your own (with or without his/her knowledge), without it including a statement of collaboration in the solution.
  • Allowing another student to turn in your work, in whole or in part, as his/her own, without it including a statement of collaboration in the solution.
  • Turning in a completely duplicated assignment. Even if all the comments are changed, all the variables names are changed, all the whitespace is changed, and the code appears in a different order: it is still the same program.
  • Several students/pairs writing one assignment and turning in multiple copies, all represented (implicitly or explicitly) as an individual student's/pair's work, without it including a statement of collaboration in the solution.
  • After receiving graded written work, returning written work, for regrading, which has been altered.
  • Finding a solution to the same problem on the web and submitting it without explicit attribution in the solution.
  • Stealing an examination or solution from the instructor.
Generally, you should NOT EXAMINE, by reading hardcopy or by copying a file, the program of any other student (nor should you let anyone examine or make a copy of your files). Doing so can easily lead to an intended or unintended academic violation.

If you ever feel that after talking to someone about a program, which is legal, your solution will be very similar to theirs, cite the consultation in the header comment in your program. Doing so protects you from University disciplinary action (although the instructor is free to grade the material as he/she sees fit).

Examples of NOT CHEATING:

  • Turning in work done alone or with the help of the course's staff.
  • Submitting one assignment for a group of students if group work is explicitly permitted (or required, as in pair-programming).
  • Getting or giving help about using the computers.
  • Getting or giving help about solving syntax errors.
  • High level discussions of course material to better understand them.
  • Discussing assignments to better understand them.
Again, the key here is not studying, verbatim, someone else's code, and then reproducing it as your own work. It is too easy to copy such code without really understanding it. Technically, for programming assignments, even understanding the resulting code is not enough (if someone else wrote it): you should also play an active role in synthesizing and debugging it. The course is as much about skills as about knowledge.
Automatic Detection of Cheating Recently, various cheating-detection software systems have become widely available. Some use search engines to compare selected portions of submitted papers to content on the web. In the context of programming, they compare each student's program to those submitted by his/her classmates (for this quarter, and any previous quarters if the assignment has been repeated). This software does not compare programs exactly: it ignores format changes, variable name changes, and a variety of well-know transformations that change the look of code but not its underlying logic.

Many courses in ICS use this software to spot potential cheating cases. Once it identifies suspicious behavior, instructors carefully examine the flagged code to make a final determination as to whether students will be prosecuted for cheating. Often instructors can find additional evidence of cheating, once this software points them to the simlar code.

Consequences ICS will not condone cheating by students in its classes. When cheating is suspected, instructors will take reasonable action to establish whether or not it has actually occurred. If, in the instructor's opinion it has, the instructor will apply appropriate disciplinary policy. In my courses, for a typical case of cheating, the student will be awarded negative credit for the assignment (under the precept that not doing an assignment, and receiving no points, is better than cheating on it). For particular egregious forms of cheating (e.g., cheating on exams, stealing another student's work so he/she cannot submit it for credit), harsher consequences may apply (from loss of a full letter grade, through immediate failure of the course, up through suspension or expulsion from UCI).

Instructors must contact the student shortly after investigating evidence of academic dishonesty and evaluating the relevant work. Notice of any action taken by an instructor will also be forwarded to the Associate Dean of Student Affairs (ADSA) in ICS, the ADSA of the student's home school (if different). These offices act as a repository for such information, in case the student commits multiple infractions. While the first infraction often results in just a grading penalty, a second infraction often results in suspension for one or more quarters.

Student Rights Please refer to The UCI Academic Senate Policies on Academic Honesty for all the details.
Final Words:
A Personal Statement
Cheating undermines the fabric of education. The atmosphere at UCI (contrary to whatever opinions, prejudices, or superstitions you hold) is one of fostering cooperation between faculty and students in the pursuit of learning, knowledge, and wisdom. This course, for example, is graded on an absolute scale, not a curve; so, helping other students doesn't affect your grade. And, if a student cheats for a higher grade, other students do not receive lower grades as a result.

Although it is embarrassing to fail an assignment, getting caught cheating is much worse (and some students get caught cheating for very few points). I know, though, that students rarely think about getting caught. But think about it: I often see students break down and cry when they get caught cheating and only then start to realize the consequences of their actions. Their stress level goes through the roof and it immediately affects both the academic and social aspects of their lives. The process is distressing for me too, although I must confess that I have been hardened by the number of times that I have had to go through it (typically multiple times each quarter). Pursuing these cases at the University level takes a lot of my time, and reduces the time that I can spend on more important matters relating to my course and my students. It is definitely a lose-lose situation.

The #1 excuse that I hear for cheating is, "I was pressed for time, so I cheated." By carefully managing your time, you can avoid this problem. If you start working early enough, and run into problems (and you should expect to run into problems), you will have time for the course staff to help you learn to solve them. Also, I understand that some students take this course only because it is a requirement for their major, and that they have little intrinsic interest in the subject area; this is not a valid excuse for cheating either.

I have seen too many instances recently where student A asks a friend, student B, for help; specifically, A asks to see B's quiz or code (on paper or in a computer file). Often, A copies B's code (with or without B's knowledge). I understand that B feels pressure to give A help. But, B is doing A no favor if A's cheating is discovered; B has made a bad situation (A would receive no credit) worse (A receives negative credit and is reported to the Dean of Student Affairs). And, according to UCI's rules, B is violating the Academic Integrity policy by these actions too. I have seen friendships shattered because A copies B's code without telling B what was done, and then both get prosecuted under UCI's rules.

A similar situation arises with cheating on quiz questions. I have seen too many students cheat on one question on a quiz and receive a negative score for the whole quiz (and letter to the Dean of Student Student Affairs), when leaving the question blank would result in a small point deduction and no university action.

In my final statement here, I ask you to pause and reflect on the consequences of choosing to cheat at UCI: this includes the impacts that it will have on you, your parents, your siblings, your friends, and your fellow classmates at UCI. Cheating is invariably the wrong decision.


Exceptions to Policies I have strict policies regarding attending classes, taking quizes, submitting programs, and taking in-class exams; but, there are exceptions. Exceptions to these policies include valid medical excuses (if documented by your Doctor or Health Care Provider), or any other officially excusable absence: emergencies, family problems, religious observances, job interviews or sports-related trips, etc. (if documented by the Office of the Dean in your College, a Coach, etc).

If you need such an exception, bring a copy of the required documentation to me as soon as possible: beforehand if you know about the problem in advance, on the next day that you are able to attend class at the last minute (or during my office hours) if you do not have advance warning. I will need to keep the copy for my records. Again, if you have advance notice of a problem, please notify me by email beforehand to discuss any ramifications.