Weekly Schedule
ICS-33: Intermediate Programming
Weekly Index
3/21-Week 0:
Starting the Course
3/28-Week 1:
Python Review and Important Details
4/ 4-Week 2:
EBNF and Regular Expressions
4/11-Week 3:
Classes and Operator Overloading
4/18-Week 4:
Iteration and Generator Functions
4/25-Week 5:
Recursion and Functional Programming
5/2 -Week 6:
Introspection, Linear Linked Lists and Binary (Search) Trees
5/9 -Week 7:
Inheritance (Single, Multiple, and Examples)
5/16-Week 8:
Analysis of Algorithms and big-O Notation
5/23-Week 9:
Advanced Classes, Empirical Efficiency, and Testing
5/30-Week10:
Special Topics (Python Virtual Machine, Static Typing/Computability, Review)
6/6 -Week11:
Final Exam (on Wednesday 6/8)
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; although, there are
definitely better/worse ways to ask a question: the better ones supply
context and keep the question focussed."
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
in the Piazza Folders.
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
right before class starts: I will wait until there is silence before starting
class.
The announcements made at the start of class are often 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.
In fact, because I continually receive complaints about this issue, my policy
is "All students who use their computers/personal media must sit
on the right side of the classroom (right as you are facing the front)."
Students not using computers/personal media should not sit in this area.
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, I will ask you 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 and assigned problems.
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.
Another excellent way to learn the material is to create your own "study-guide",
while you are reading the notes and running their code.
By journaling, in your own words, the new/important information that you read
(I estimate producing 1-2 pages for every reading), you will achieve a better
understanding of the material; and, you can then review your journals before
any exam.
- Monday (3/28): Lecture
- Tuesday (3/29): Lab
- Work on
Program #0: Eclipse Python and Debugger Perspective
(due on Thursday 3/31 on Checkmate at 11:30pm)
- Wednesday (3/30): Lecture
- Thursday (3/31): Lab
- Friday (4/1): Lecture
- Tuesday (4/5): Lab
- Work on
Program #1: Iteration and Major Data Types
(due on Tuesday 4/12 on Checkmate at 11:30pm)
- Wednesday (4/6): Lecture
- Thursday (4/7): Lab
- Friday (4/8): Lecture
- Monday (4/11): Lecture
- Tuesday (4/12): Lab
- Wednesday (4/13): Lecture
- Thursday (4/14): Lab
-
In-Lab Programming Exam I: Iteration and Major Data Types
- Note: Quiz #2 is due on Friday 4/15 on Checkmate at 11:30pm
- Friday (4/15): Lecture
Week 4
- Monday (4/18): Lecture
- Tuesday (4/19): Lab
- Work on
Program #2: Classes, Overloaded Operators, Iterators
(due on Tuesday 4/26 on Checkmate at 11:30pm)
- Wednesday (4/20): Lecture
- Thursday (4/21): Lab
- Friday (4/22): Lecture
- Monday (4/25): Lecture
- Tuesday (4/26): Lab
- Wednesday (4/27): Lecture
- Thursday (4/28): Lab
- Friday (4/29): Lecture
- Monday (5/2): Lecture
- Tuesday (5/3): Lab
- Work on
Program #3: namedtuple
(due on Tuesday, 5/10, at 11:30pm)
- Wednesday (5/4): Lecture
- Thursday (5/5): Lab
- Friday (5/6): Lecture
- Monday (5/9): Lecture
- Tuesday (5/10): Lab
- Wednesday (5/11): Lecture
- Thursday (5/12): Lab
-
In-Lab Programming Exam II: Classes, Overloaded Operators, and Iterators
- Friday (5/13): Lecture
- Monday (5/16): Lecture
- Tuesday (5/17): Lab
- Work on
Program #4: Annotation Checker
(due on Tuesday 5/24 on Checkmate at 11:30pm)
- Wednesday (5/18): Lecture
- Thursday (5/19): Lab
- Friday (5/20): Lecture
- Monday (5/23): Lecture
- Tuesday (5/24): Lab
- Wednesday (5/25): Lecture
- Thursday (5/26): Lab
-
In-Lab Programming Exam III: Generator functions, Recursive functions
(possibly using Linked Lists and Trees), Decorators, Inheritance
- Friday (5/27): Lecture
- Wednesday (6/8): Final Exam
- Lecture A: 1:30pm - 3:30pm
- Lecture B: 10:30am - 12:30pm
Students must attend at the correct time for the Lecture they are enrolled in.
- In our classroom HIB 100
- Instructions and seating assignments will be emailed before the exam
- 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, 6/16 at 5pm.