Lecture/Lab Schedule

ICS-33: Intermediate Programming

Course Expectations

Lectures and Labs

Learning to program well is an intensive activity. We will have class every day of the week: MWF lectures and TuTh labs. By staying on task 5 days per week, learning and practicing what we learn, we are more likely to master programming in Python. One learns programming by practicing programming.

Work Before, During, and After Lecture

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. 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. Lecture mottos: "Those who are ashamed of asking are ashamed of learning." and "The only stupid question is the one left unasked."

Carefully read the lectures and examine the code they contain. Test and explore this code in Eclipse/Python to verify that you understand the material both theoretically and practically. Try to work out solutions to the assigned lecture 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 code that solves problems". If you have difficultly with a problem, it indicates that you should probably go back over the related reading -or certainly ask a question about it on the MessageBoard Forums. One of the few advantages of a big class like this is the potental for peer-teaching.

Because these lecture 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 weekly take-home quizzes, on which collaboration is NOT allowed. Don't cheat yourself in this aspect of the course by failing to do the appropriate work.

Lecture Attendance and Decorum

I expect students to attend class daily, arriving on time, and settling down when class starts: I will wait until there is silence before starting class. The announcements made at the start of class are often very important. I expect students to neither carry on private conversations, nor use their computers to answer e-mail, surf the web, day trade stocks, or perform any other activities unrelated to this course. Do not use your personal media in any way that would disturb students sitting near you.

Someone once said, "Distance education begins in the 8th row of the classroom": once you are that far back, it is easy to stop paying attention. So, I recommend that students sit in the rows that are at the front of the room. More than once I have had a comment like the following on my final teaching evaluation, "Write bigger: I could never read what you wrote on the whiteboard from my seat in the back of the class." I have many deficiencies as an instructor; students should help themselves get what they need out of this class -like by sitting near the front if necessary.

I am frequently busy before class setting up for lecture: if you need to talk to me, please come up after class rather than before. 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 and you decide you must answer the call, please leave the class, with a minimum of disruption to the rest of the students. If your cell phone rings audibly in class, you will be asked to leave class for that day. Finally, if you know that you must leave early, please sit by a door, so that you can exit quietly and without disturbing others in the class.

Overall, please strive to be a considerate class member, both to me and to your fellow students; doing so is especially important in large classes.

If you elect not to attend lectures, the notes that I provide will cover all the important topics (but you have to read them carefully). You will miss general purpose announcements, a small amount of live-coding, picture drawing, and questions/answers. I find only the most mature students can skip class and study by themself, but learning how to learn by yourself is an excellent higher-order skill to attain.

Studying for the Midterm and Final Exams

A few days before these exams, students often ask me how to study for them. This reminds me of a marathon runner who asks his/her coach a few days before a race how to prepare for it: by then, it is too late. The best way to study for the midterm and final exams is to keep current on all the readings. By doing so, you will not need to cram for these exams. Often I will suggest that students review the quizzes before these exams (and review the midterm before the final), and lightly review the programming assignments and In-Lab exams.

Schedule, Topics, Readings, and Problems

Week     Activity       Date Topic (read for this date/do problems) Problems
PreLab 3/29 Start Program #0: Python, Eclipse (Debugger Perspective), and Testing  
 Lecture 3/30 Course Overview (all)
A Review of File Reading
#1Lecture 4/2 Review Python I: start - paralle/tuple/list assignment 1-9
 Lab 4/3 Work on Program #0: Python, Eclipse (Debugger Perspective), and Testing  
 Lecture 4/4 Review Python II: iterable - hashable vs. mutable 10-15
 Lab 4/5 Start Program #1: Iteration and Major Data Types  
 Lecture 4/6 Review Python III: comprehensions - trivial things
Parameters: Including * and ** (examples)
#2Lecture 4/9 EBNF: A Notation to Describe Syntax
Typographic conventions for EBNF documenting Python
 Lab 4/10 Work on Program #1: Iteration and Major Data Types  
 Lecture 4/11 Regular Expressions: Patterns
retester.py (Regular Expression Tester)
Online regular expression tester (for Python)
Click Python in Your regular expression in:
 Lab 4/12 Work on Program #1: Iteration and Major Data Types  
 Lecture 4/13 Regular Expressions: Methods
remethods (Folder with programs illustrating RE methods)
#3Lecture 4/16 Class Review 2,3,5
 Lab 4/17 Start Program #2: Classes, Overloaded Operators, Iterators  
 Lecture 4/18 Class Operator Overloading I 1,2
 Lab 4/19 Work on Program #2: Classes, Overloaded Operators, Iterators  
 Lecture 4/20 Class Operator Overloading II 2,4
#4Lecture 4/23 Iterator Protocol and Examples of Use 1,3,4,7
 Lab 4/24 Practice setting-up for In-Lab Programming Exam (given Thursday)
Work on Program #2: Classes, Overloaded Operators, Iterators
 Lecture 4/25 Iterators in Classes with iter and next 1,2,4,5
 Lab 4/26 In-Lab Programming Exam I: Iteration and Major Data Types  
 Lecture 4/27 Generators (and yield): Functions that Act Like Iterators 2,4,5
#5Lecture 4/30 Recursive Functions 1,3,6
 Lab 5/1 Start Program #3: namedtuple  
 Lecture 5/2 Functional Programming/Combinatorial Computing
Solution to Minimum # of Stamps Problem
 Lab 5/3 Work on Program #3: namedtuple  
 Lecture 5/4 Decorators for Calling Functions (download decorators project) 1
#6Lecture 5/7 Linked Lists (download linked list project) 1,2,4,5
 Lab 5/8 Work on Program #3: namedtuple  
 Lecture 5/9 Trees I (download tree project) 1,3,4,5
 Lab 5/10 Midterm Written Exam (covering Lectures 4/2-5/4) 1,3,5
 Lecture 5/11 Trees II (download tree2 project)  
#7Lecture 5/14 Inheritance I (download counters project) 1-3
 Lab 5/15 Start Program #4: Annotation Checker  
 Lecture 5/16 Inheritance II (download inheritance project) 1
 Lab 5/17 Work on Program #4: Annotation Checker  
 Lecture 5/18 Inheritance III 1-2
#8Lecture 5/21 Analysis of Algorithms and Complexity Classes 1-3
 Lab 5/22 Work on Program #4: Annotation Checker  
 Lecture 5/23 The Complexity of Python Operators/Functions tba
 Lab 5/24 In-Lab Programming Exam II: Classes, Overloaded Operators, Iterators  
 Lecture 5/25 Empirical Efficiency (up to Hashing for sets and dicts)
(download empirical project)
#9Lecture 5/28 Holiday (No Lecture): Memorial  
 Lab 5/29 Start Program #5: Inheritance and Animation  
 Lecture 5/30 UnitTest (download unittests project) (view unittest pictures) tba
 Lab 5/31 Work On Program #5: Inheritance and Animation  
 Lecture 6/1 Finish Empirical Efficiency and UnitTest  
#10Lecture 6/4 Python Machine [Code] (download disassembly project)  
 Lab 6/5 Work On Program #5: Inheritance and Animation  
 Lecture 6/6 Introduction to Java: Static Typing/Collection Classes  
 Lab 6/7 Work On Program #5: Inheritance and Animation  
 Lecture 6/8 Class Wrapup and Quick Review for Final Exam  
Final Exam Week6/13 We will have a comprehensive 2-hour written final exam on Wednesday, June 13: Lecture A from 8:00am - 10:00am and Lecture B from 10:30am - 12:30pm in our classroom, HIB 100 (see the Final Exam Schedule). Bring a photo ID with a legible name and picture (UCI, drivers license, passport, etc).

I will send email when I have computed/entered final grades, which are due to UCI by Thursday, June 21th at 5pm.