ICS-33: Intermediate Programming

In reverse-chronological order

#8: 10/16/17
Quiz #1 Graded
I have run the automatic batch self-check tests for Quiz #1 (checking correctness) and the TAs have examined problem 1 and the code (checking requirements: e.g., statements/solution) and the grades are now recorded and posted. See the assignment grades and Grades(zipped .xlsm file) files, whose details are discussed below, in Announcement #7. The class average was about 77% and the median was 88%, meaning that most students correctly solved most problems (43%), and 20% of the class correctly solved all the problems. Overall there were 43% As, 17% Bs, 13% Cs, and 27% Ds and Fs for those students who submitted work; most of the students who scored a 0submitted code that we could not run (see the paragraphs below for possible regrading by your TA). FYI, the previous Fall quarter the grades were 57% As, 11 Bs, 10% Cs, and 22% Ds and Fs for those students who submitted work.

About 44% of the students submitted early (although there are no extra credit points on quizzes for doing so), and these early submitters scored much better than students submitting on the due day (83% compared to 73%): a difference of one full grade (students submitting 2 days early had an average of 92%). I am assuming that some students ran out of time before they finished all the problems, and will plan to get started earlier on later quizzes.

In the assignment grades spreadsheet, Column A contains the ID Hashed of all students (in sorted order) and Column B contains an X if we believe the student submitted work on time. Column C shows deductions for

  • written work submitted late (written work is due at the start of class)
  • not printing a copy of quiz page on which you wrote your answer
Row 1 for Columns D-O shows how many points the problems were worth. Some problems show points in two columns: e.g., Problem #3 has 1 point in Column F (3a/C: produced correct answers according to the batch self-checks) and 1 point in Column G (3a/R: the requirement of 1 assert/return statement, according to the TAs). Any /C column relates to correctness; any /R relates to requirements. Row 2 shows the number of batch self-check tests performed for each problem (for those checked automatically; for the other columns it is just the number of points the problem is worth).

Rows 4 and beyond show the number of failed tests for each student (a blank indicates no failed tests: equivalent to 0 failed tests). To compute the number of points you scored for a problem/in a column, compute the percentage of successful tests and multiply it by the number of points the problem is worth. So for example, if a student missed 2 of 6 tests on a 5 point problem, he/she would receive (6-2)/6 * 5 = 3.3 (actually, 3.333...) points. Columns P-R show each student's cumulative Score, the score Rounded to an integer (that integer is the score entered in the Grades spreadsheet) and Percent, based on the number of points the assginment is worth (here 25).

TAs graded problem 1 and the function requirements for all students in their labs. The TAS will distribute these pages in labs this week only; after that, the papers will be archived in my office. The rubric for this problem was as follows: each part was worth .5 pt.

  1. some names are written inside module objects/ovals, but no m.x/m.y/etc.
  2. boxes are written underneath names
  3. most arrows point from "namey things" to "objecty things"
  4. all "objecty things" appear as ovals
  5. all "object things" are labelled (by str, int, list)
  6. m appearing on left points to m's module object
  7. x appearing on left points to "listy thing"
  8. x appearing on right points to same "listy thing" (as x appearing on left)
  9. x appearing on right (same as 8.) has crossed out arrow pointing to int(1)
  10. y appearing on right points to same int(1) object as remaining arrow in a "listy thing"
  11. only one "listy thing" present, showing its 0 index crossed out and its 1/other index pointing to int(1)
If you lost any points on this problem (most students did) I suggest that you start by comparing your solution to mine.

Requirements points for the functions were deducted only for too many statements. Many students created extra/temporary lists:

  • Lists created by any kinds of comprehensions.
  • Lists for sorting parts two different parts of the parameter, and then another list that was the concatenation of these two lists.
But, I decided to have the TAs not take off points for these deviations from the requirements: if you had these issues, closely look at my solutions to see how to avoid them in future work, where I might deduct points.

Students should talk to the TA for their Lab first, if they do not understand why they received the marks they did or dispute any of these marks. The best time to talk with your TA about grades is during one of your Labs, when both student and TA are physically present to examine the submission and the grade, possibly running the solution on a computer they can share.

Students should examine their graded work immediately and get any regrade issues settled as soon as possible (within a week of when the grade is assigned). Show up to lab and settle these issues immediately.

IMPORTANT Information about Student Grades

  • A few students submitted code that extraneous imports or had syntax errors and therefore failed all tests: the TAs are authorized to allow you to fix a few simple syntax errors in the code you submitted and rerun/regrade the code (but, I will deduct some points for submitting unexecutable code). Also see Announcement #5 below.

  • If you submitted an assignment, but the X in column B has the comment TIMEOUT it means that one of your functions contained an infinite loop, and therefore failed all tests: the TAs are authorized to allow you to replace the body of any function by pass and rerun/regrade the code (but, I will deduct some points for not submitting gradable code). Also see Announcement #5 below.
This assignment was designed to provide you with a good grounding in the use of the standard data structures in Python: list, tuple, set, and dict (and the defaultdict variant). It also included practice iterating over such structures, writing comprehensions, and use of the sorted function and lambdas. All these topics will be tested again on the Midterm and In-Lab Exam #1 (along with appearing in Programming Assignment #1 as well). As with all assignments, you should examine my solutions.

#7: 10/9/17
Programming Assignment #0 Graded
The TAs have graded (and I have recorded the grades for) Programming Assignment #0. As with most assignments, there are two files that you should download, unzip, and examine to understand your performance on this assignment, and your cumulative performance in this class.

Both of these files are sorted by Hashed IDs (which are computed from the 8-digit UCI IDs of all the students in the class). To determine your Hashed ID, see Message #6 below.

  • The first file to examine stores the assignment grades, a zipped Excel file that details how each student was graded on this instrument: what marks were given and why. It is sorted by Hashed IDs (column A). Column B contains an X if the student submitted work (later, if you work in pairs, the X will appear only on the Submitter's cell, not in the Partner's cell, although both will receive the same grade). Column C (for Programming Assignments only) shows extra credit points for early submission: 1 point for submitting 24 hours early; 2 points for submitting 48 hours (or more) early; a blank here means no extra credit/early submission points.

    Columns D and beyond show marks for the various parts of the assignment. The last three columns show your Score, the score Rounded to an integer (see the discussion below) and your Percent, based on the number of points the assginment is worth. If a cell contains a comment (those cells with a red-triangle in their upper-right hand corner) you can hover over the cell and you will see the comment that explains why the marks were given: sometimes you must edit the comment and enlarge its bounding box to see the full comment.

    Students should talk to the TA who graded a question, if they do not understand why they received the marks they did or to dispute any of these marks. For Programming Assignment #0, the grading was as follows

    Part A: Nichola Ceglia
    Part B: Te-Yu Chen
    Part C: Shivani Inamdar
    Part D: Harsha Nadimpalli

    The best time to talk with your TA about grades is during one of your Labs, when both student and TA are physically present to examine the submission and the grade, possibly running the solution on a computer they can share. The same goes for talking to other TAs. All TAs can download your work from Checkmate.

  • The second file to examine stores the cumulative Grades(zipped .xlsm file) -also available as a link on course web- unzip it, and then click the tab labeled Winter 2017. This tab records all the grades for all the testing instruments that you submit during the quarter. It is also sorted by Hashed IDs (column A). You will notice that in this spreadsheet all recorded grades are rounded up to integers: so receiving a 27.5 on the first spreadsheet will translate into a 28 recorded on the second one. We will use this same "round-up" process for recording all grades during the quarter.

    On this spreadsheet, columns B-T contain your scores: for the Quizzes (B-I), Programming Assignments (J-O), In-Lab Programming Exams (P-Q), and Written Exams (R and T: I'll discuss S after the Midterm). Columns U-X contain the sums for all these testing instruments. Column Y contains special extra credit points (for example, submitting the faculty/course evaluation at the end of the quarter; more on this then). Column Z-AD contains your cumulative points (Z), your average (AA), your rank in class (AB: 1 means highest-scoring student), and your current grade (AC is the letter, AD is +/- if appropriate).

    You should check this spreadsheet after every assignment is graded to ensure that your score was recorded correctly. Again, students should talk to the TA for their Lab first, if this spreadsheet contains any errors.

IMPORTANT: Scores wil revert to 0, if I do not receive a signed Academic Integrity Contract from you (we are tabulating them this week). Please come by during my office hours as soon as possible if you need to fix this problem.

This assignment was designed to test you on whether you have mastered the basics of using Python in Eclipse, the Eclipse Debugger perspective, and batch-self-check files in the module (in courselib). It was also designed to see if you could follow instructions and ask questions: more on that below.

The class average was 28 (or about 94%) and the median was 29 (or about 97%). For those students submtting work, there were 82% As, 10% Bs, 2% Cs, and 6% Ds and Fs.

The assignment was not meant to be hard, but it was not trivial either, and there were many opportunities to lose points (and learn from your mistakes). Your work in the Eclipse/Python Integrated Developement Environment (IDE) throughout the quarter will leverage off the understanding and skills that you acquired in this assignment.

Let me talk about what will probably be the most contentious single point of the 1,000 points that this course is worth (thus .1% of the grade): this point was lost by about 14% of the students submitting work. I took off 1 point if you corrected the misspelling Inteprxter (and two points if you didn't have either spelling: in this second case you obvious failed to meet the specifications because you did not print what was required). When some students hear about this point deduction, their heads explode and they cannot believe that I am taking off a point for correcting what you thought was my mistake. But... I am trying to foster an atmosphere where nothing is taken for granted in the instructions that I give: if anything seems confusing or plain wrong, I should be questioned about it -preferably in public, on a MessageBoard forum- so others can learn if there really is a problem, and if so the correction.

  • Some students did ask me outside of class if they should correct the misspelling, and I told them "no"; some students asked me by email if they should correct the misspelling, and I told them "no"; one student asked on a Forum whether they should have corrected the misspelling, and I posted a reply saying that they shouldn't, for all students in the class to see. It is critical for programmers to be sure they know the specifications of the problem they are being asked to solve, otherwise they will solve, test, debug document, etc. the problem incorrectly, and another cycle of development will be needed to fix the misconceptions. The overview lecture included a graph that showed that the later in development a problem is found, the harder/more expensive it is to fix. So if we can find problems at the time we are reading the specification of the problem to solve, that can save us a lot of work/money later.

  • The bottom line is that you are responsible for reading the instructions carefully and reporting any confusion so that I can clear it up (best reported on the MessageBoard Forum for Programming Assignments). Of course, you can freely talk to anyone about the problem specifications, just not the code that you write for your solutions. If you make any assumptions (like the node names in Programming Assignment #1 always being one letter long -that is not part of the specification), they might come back later to haunt you (gradewise). When working with a partner, you'll have two pairs of eyes reading the specifications. I am willing to deduct this one painful point at the start of the quarter, from many students, to get across this perspective, and save everyone grading grief during the quarter. I hope you submitted early so the extra credit erased this point loss.

  • I will not intentionally do anything like this on subsequent assignments; but I can certainly be unclear about the specifications (which have lots of details) or even contradict myself from one spot to the next. It it up to you to clear up the confusion, and best to do it on the MessageBoard forums, so I can clear up the problem once for all students.

Also, some students did not carefully read the instructions in the Debugger Perspective document for the quiz part, which required them to change a line in the craps script before running it with the debugger to gather the required information. With this change in your program, we can check your answers for correctness; without it, we cannot check you answers for correctness.

Finally, about 52% of the students submitted the program 2 or more days early; about 14 submitted the program 1 day early. So, about 66% of the students submitted this assignment early. Keep up the good work: you can earn 12 extra points if you turn in every Programming Assignment 2 or more days early (upping your grade by 1.2%): for some students, this boost will be enough to raise their final grade. Over the course of a two week assignment, it will be to everyone's benefit -students and staff alike- if students try to finish and submit early.

IMPORTANT If you believe that we graded your work correct, please examine the files mentioned above first, then contact the TA who graded it, to discuss the issues with him/her. Such a discussion can have only positive outcomes: either he/she will agree with you that you deserve more credit (and, we do want you to receive all the credit that you are due), or you will come to understand the question, program, or solution better and realize why you lost points. This is certainly a win-win situation. Please read my solution and the assignment grades spreadsheet carefully before contacting your TA; ensure that you understand what is the correct answer and what points were deducted from your assignment and why. If there is a problem, your TA will email me a revised summary about your program, and cc a copy to you. I will update the grades spreadsheet as appropriate (it might take a bit of time for all these events to cumulate in a changed grade) and email you.

If you feel there is still an unresolved problem after talking to your TA, please contact me (but always contact your TA first). Also, because of the size of this class, if you have a grading issue, we will consider it only if you bring it to your TAs attention within a week of when I return the materials. This policy is in place to avoid grade-grubbing late in the quarter.

#6: 9/28/17
Hashed ID
When we grade assignments, we often distribute/update various spreadsheets with the relevant grading information. These spreadsheets are indexed and sorted by each student's Hashed ID. The course web-page has a Find ID Hashed (grade key) link, right below the Grades(zipped .xlsm file) link, which you can use to retrieve your Hashed ID (or click Find ID Hashed). Use the result it shows when examining any spreadsheets of grades; I suggest that you find this number once, and write it down for future reference.

#5: 9/28/17
Submitting Code
without Losing Points
ICS-33 uses software that automatically grades most quizzes and programming assignments; it uses (self-checking) testing cases that we supply with the testing instruments that we distribute. You will learn about these tools in Programming Assignment #0. Here are a few hints to ensure that you will understand the grading process better and minimize your point loss.
  1. Ensure that you submit the code you wrote, not empty files, nor the original files that you downloaded. Be very careful and double-check what you submit to avoid this mistake: if you are not sure that you submitted the correct code, resubmit it.

  2. If you are submitting with a partner, ensure that the Submitter and Partner lines of the program are correctly specified. The names must appear in the exact format required, with no misspellings nor punctuation errors. The student listed as Submitter must be the one who actually submits the code. See the Programming Assignments web page for the exact form required (and you must follow that exact form, with no misspelling nor punctuation errors).

  3. Ensure that you submit your code on time. We can, and mostly do, ignore any work submitted after the deadline (even by a few minutes). It is a fairness issue for other students who do submit on time. The best strategy is to finish the work and submit it well before the deadline (and get extra credit points): you will learn more too, if you aren't rushing to meet a deadline. To ensure that we will grade something, submit partially complete code ahead of the deadline; then, if you miss the deadline, we will still grade the partially complete code. Be warned: Checkmate can get bogged down if many students all try to submit a few minutes before the due time, so do not wait until the last minute to submit your code.

  4. Ensure that you test your code using the self-checks that we provide and use for grading. By using these self-checks, you will know when your code contains errors that will result in point deductions when we grade it.

  5. Ensure that your files...
    1. ...contain no syntax errors.
    2. ...contain only appropriate import statements: typically just the ones provided in the download file(s).
    3. ...contain only functions that execute quickly (typically under a few seconds)

    Any syntax errors, inappropriate import statements, or excessive execution time may cause all self-check tests to fail during automatic grading. For functions that take excessive time, it is best to comment out their bodies, replacing their code with pass, resulting in the function immediately returning None: it will be counted wrong, but doing so will allow other functions to be run and graded for correctness.

    To avoid inappropriate imports and losing points, ensure that in Python have selected Window | Preferences | PyDev | Editor | Auto Imports and unchecked all boxes (illustrated below) and then clicked Apply following by OK.

After an assignment is graded automatically, the Announcement for it will contain a link to an Excel file that you can examine for detailed information about how your score was computed.

If this information does not match your expectations from running the assignment's self-checks while developing your code, contact your TA. It is best to meet with your TA during lab hours: he/she can talk to you about your code and run it while you are present, to help resolve the difference. But, if we have to modify your code to grade it properly (see the typical source of problems above), then we will deduct points. I hope that by students carefully writing/submitting their code, these grading anomalies and point deductions will be minimized during the quarter.

#4: 9/28/17
There are many ways to communicate with me (and other staff and students). Here is a quick overview.
  1. Email: If you send me email, please do it through your UCI email address. Include a well-thought Subject line. Also, please include your full name and the course (ICS-33), and your Lab # (for questions related to grading). I teach many hundreds of students each quarter in multiple courses. Providing this information helps me quickly determine the context of your email, so I can better answer it. Finally, when I respond to your email, please do not send a "Thank you" acknowledgement. Such niceties are not necessary for work-related email. For me, it just increases the number of emails that I must read.

Note that for questions that are not specific to you -questions that are relevant to the entire class- it is best to ask them on the appropriate Message Board Forum.

  1. Message Board Forum: Post on the forum most closely related to your question. Include a well-thought Title line that clearly identifies the issue you are asking about; doing so helps me and other students who are deciding whether to read your message and the response(s). If you discover the solution to your own question, revisit the Forum and explain (without supplying code) any useful information that you learned that might help other students with the same problem. Avoid a post that says just, "Never mind: I figured it out myself."

  2. Course Email ( Mostly this is for me to use to communicate with all the students in the class. But, there are instances (very rarely) for students to use it: the best example is that if Checkmate appears to be down. Sending a Checkmate down email to this address tells me that it is down, and tells all the other students that (a) it is down and (b) I have been informed it is down. FYI, we rehosted Checkmate on a new computer a few quarters ago, and it is now much more reliable and rarely down.

#3: 9/28/17
First Lab
I expect students to attend all their scheduiled labs (unless they have already finished the current programming assignment). Programming Assignment #0 is assigned before the first lab of the quarter; so if you have not already finished it, I expect you to attend your first lab and work on it there.

Generally, you can get invaluable help from the TAs and Tutors for understanding Python and debugging your code: don't expect them to debug your code for you, but instead expect them to help you learn how to debug your own code in general, using your current problem/code as a concrete example.

#2: 9/28/17
Install Course Software
All students with computers should download and install the course Software: Java (to run Eclipse), Python, and Eclipse. All three products are available for free on the internet. Students can view instructions for downloading and installing this software by following the Course Software link. If you are using a Mac there are special instructions for you (e.g., Java is already installed)

If you have installed a version of Python prior to 3.6, you should install the current version of Python 3.6 (and the most up-to-date version of Eclipse as well).

Although students can work on their programming assignments on the computers in the UCI labs, I expect students with computers to download and install this software by the end of the first week of the quarter. If you are having difficulty with this task, the TAs and Lab Tutors will help you during the first Lab meeting (or beyond, if necessary: bring your computer to the lab). If you have successfully downloaded and installed this software, please help other students do so too. Finally, you can also use the class MessageBoard Forums to ask questions about installing this software and help other students install it.

I strongly suggest that you BACKUP YOUR WORK daily: computers can malfunction, break, or be stolen.

#1: 9/28/17
First Message
Welcome to ICS-33. I am going to post and archive important messages about the class in this announcements web page: each entry will be numbered, dated, and labeled. The entries will appear in reverse chronological order. Whenever you follow the link to this page, scan its top for new announcements; scan downward for older announcements. This message will always appear at the bottom of this file. I will never remove a message from this page

I have already posted some important messages before the start of the quarter. Expect a few new messages to be posted here each week, mostly regarding returned and graded work.

Check this Announcements page, along with your email and the MessageBoard Forums, daily.