University of Michigan

SI 182 (EECS 182): Building Applications for Information Environments



Winter 2009


Tues/Thurs. 1-2:30


Thurs. 2:30-4


1250 USB


Prof. Paul Resnick


Course Description

Are you interested in learning how to extract useful data from the web and automatically analyze it? Or how to build interactive games or write programs to solve puzzles quickly? In previous semesters, by the end of the course students were writing programs to solve Sudoku puzzles, to create a web-based hangman game, to find the nearest Starbucks to your computer's location, to develop fractal animations, to visualize correlations between stock market prices and U.S. election results, and to display the current weather forecast using images taken from FlickR. This semester you’ll be writing programs to analyze and display data from Twitter and then you’ll have a chance to define your own project. In the process of doing those fun things, you will learn the fundamentals of computer programming.


Where this course fits in the curriculum

We recommend this course to all students who want some exposure to computer programming and software design skills. In the information age, these skills are essential, irrespective of the degree you plan to pursue.  More specifically, this course is an appropriate prerequisite to EECS 282 (required course for Informatics concentration) or EECS 280 (required course for CS concentration). Furthermore, students in other concentrations where data analysis is required (e.g., statistics, economics, business, political science) are likely to pick up valuable life-long skills.


EECS 183 and Engin 101 are alternative programming courses to 182 – they are interchangeable as far as subsequent computer science courses are concerned.  Good programmers can pick up new languages easily (usually a few weeks of effort), once they know basic principles of programming.  EECS 182 is a new effort with Python as the first programming language. EECS 183 and Engin 101 use a more traditional language, C++, which has more pitfalls for first-time programmers.


Python is a wonderful language for general applications and prototyping. It has been used extensively for data analysis (more flexible than spreadsheets), data plotting, building dynamic web sites, games, etc. It is one of the three languages used at Google. (In fact, Google hired the developer of Python!).


If you want to learn C++ later, you can take EECS 280 after 182. Alternatively, you can go on to take EECS 282 (in Java) followed by EECS 382 (in C++). While all computer languages can largely do all tasks that other computer languages can do, sometimes one language is better than another for a specific task (e.g., C programs often provide better performance but Python programs take less time to write and can be more reliable). Thus, it is useful to be exposed to multiple languages if you are going to take multiple computer science classes. Recruiters often look for experience in a variety of languages.  If you plan to take just one programming course, Python is a great language to learn. You will find it to be a very versatile language and similar in spirit to other popular languages, such as Perl, Ruby, and Javascript.

Learning Objectives

At the end of this course, students should be able to:

·         Understand the following programming concepts:

o    Data types

o    Variables

o    Functions

o    Conditional statements

o    Iteration

o    List and dictionary data structures

o    Mapping a function onto a list

o    APIs

·         Write programs in python that demonstrate understanding of all of the above concepts and that use the following features:

o    File operations

o    String processing operations

o    An XML processing library

·         Manipulate data to

o    Extract and summarize desired elements

o    Output the processed data in .csv and HTML formats

·         Create a web site that generates pages by running python programs

Required Resources

Textbooks and Notes



Use the two Python books as references.  Zelle is better to get a quick overview of the language. Downey’s book is better when it comes to understanding the details. We will refer to both books during the course and point to the readings from the two books. In general, there is significant overlap in the material between the books. We will generally have required reading from one book and optional reading from the other one. We’ll be using parts of the Severance book later in the semester when we start doing web programming.

Software Required for Assignments and Class Work

Students in the course will use a number of tools including Python and a text editor. It is possible to complete all the work in the course using 100% free tools. There are sufficient free tools to do the work on a PC or a Macintosh. We will talk about these tools and their installation in the labs. These include JEdit for editing Python programs (alternative editors, such as IDLE, vim, or Emacs are also fine) and the Python 2.6 interpreter. Standard text editors, such as Notepad or TextEdit, are not good, though they can be used in a pinch.

Below are some links and videos to help you set up the JEdit (  and Python ( environments. JEdit is a nice editor because it is cross-platform and can also be used to edit HTML, CSS, etc. We show you how to run your Python programs in a command-line. Our experience shows that you will understand what is going on much better this way, using a command line rather than an integrated development environment.


Please check out the resources folder for handouts on installing and using the software.

1.       Installing jEdit

2.       Installing Python

3.       Using the command line


It is highly recommended that every participant in the course bring a laptop to each class session. This is not a requirement, and all of the work in the course can be completed on a desktop computer or on lab computers. However, you will find parts of the course more valuable if you can play with code examples as we demonstrate them in class. A laptop will also make it easier for you to work on your assignments and projects in your spare time. You can use a laptop from the cart in the classroom during lecture and lab sessions, but please arrive early to do that, because the laptops are old and take more than five minutes to boot!


For backup purposes I suggest you buy a flash drive. This will also allow you to store applications you use in case you are without a laptop and available computers do not have what you need installed.


While the instructor likes his Windows laptop very much, the GSI likes his Mac laptop at least as much. You can do the course on either a PC or a Macintosh (or even Linux!). All the tools that we will use are portable across all operating systems.

Getting Help - Resources

Teaching Staff and Office Hours

In addition to the Professor, there will be two undergraduate Instructional Aides, and a grader the grader. Below are the office hours and contact information for us. Though we have given individual email IDs, you can also send email to, which will reach all the teaching staff. In fact, that group address is preferred unless you have some reason to address your question to just one of us. It’s helpful if we can all monitor all the questions that students have.


Professor: Paul Resnick

Instructional Aide: Tim Diamong

Instructional Aide: Carolyn Ch’ng

Grader: Jia Jin Kee

Email ID: presnick

Office hours: Mondays 4-5PM in

417B West Hall AND

Tuesdays 2:30-3 in USB Engineering Learning Center (2nd floor)

Email ID: tdiamond

Office hours: TBD

Location: TBD

Emaild ID: carollwc

Office hours: TBD

Location: TBD

Email ID: jiajin



Please send an email request to at least 15 minutes prior to the start of any of the office hours if you are planning to be there and the approximate time you are going to show up.  If there are no such emails or all students who sent emails have been seen, the teaching staff reserves the right to not be there or to leave early! An email will ensure that we are around to meet you.

Course Web Site

The course’s public page is at  The internal site, which is what you will primarily use, is accessed via The site will require authentication using your umich ID and password. If you do not have a umich ID and password, you will need to ask me for guest access.  After that, you should see EECS (or SI) 182 in the list of your sites.  We will demonstrate the use of ctools site to you in the class and point to you where to find relevant information. All the homeworks and announcements will be posted at the ctools site.

You will be submitting your assignments via ctools as well. Also see  A Crash Course on Ctools

Course Email List

The best way to get help during the course will be via email to the whole class via ctools: You are encouraged to respond via email to other students’ messages. Don’t worry about giving wrong information: the instructors will post corrections if necessary.


If you have something of a private nature that you don’t want to share with the other students, feel free to send a message to

Giving and Receiving Assistance

The first time you learn technical material it is often challenging. We are going to cover a wide range of topics in the course and we will move quickly between topics. Because it is my goal for you to succeed in the course, I encourage you to get help from anyone you like, especially in the portion of the course before the midterm and even for the completion of assignments.


However, you are responsible for learning the material, and you should make sure that all of the assistance you are getting is focused on gaining knowledge, not just on getting through the assignments. If you receive too much help and/or fail to master the material, you will crash and burn at the midterm when all of a sudden you must perform on your own. The final submission of each homework exercise must be in your own “words”.


If you receive assistance on an assignment, please indicate the nature and the amount of assistance you received. If the assignment is computer code, add a comment indicating who helped you and how. Any excerpts from the work of others must be clearly identified as a quotation, and a proper citation provided (e.g., in the comments of the code if it is a code fragment you have borrowed). If you are a more advanced student and are willing to help other students, please feel free to do so. Just remember that your goal is to help teach the material to the student receiving the help. It is acceptable for this class to ask for and provide help on an assignment via the email list, including posting code fragments.


The Engineering Honors Code will govern the course.  This code originated in the College of Engineering, and basically says that students are expected to work with honor (i.e., no cheating), according to the course policies. As students, you are expected to follow the code and report any violations of the Honor Code. As instructors, we generally trust that students will follow the code (violations are reported to an Honor Council). For example, during an exam, the instructor may decide to sit outside the classroom, trusting that you will not cheat. We will use the Engineering Honor Code in this class since the class is cross-listed with the College of Engineering. It applies to you even if you are not an Engineering student or are taking the course as SI 182.


To reiterate, the collaboration policy is as follows. Collaboration in the class is allowed (and even encouraged) for assignments – you can get help from anyone as long as it is clearly acknowledged. Collaboration or outside help is not allowed on exams, though you will be allowed to use the book or any other resources (including Google and web). Use of solutions from previous semesters is not allowed. The authorship of any assignments must be in your own style and done by you, even if you get help. Any significant help must be acknowledged in writing.

Classroom Rules

We are all here to learn. I like a relaxed classroom where everyone feels comfortable. You are welcome to bring drinks or snacks to class (assuming it is allowed in the room we are in). You can (and should) bring your laptop to class. I would rather have you come to class and listen with one ear than not come to class at all. As a courtesy to others, be sure to put your PDA and cell phone on silence/vibrate. Coming late to and/or leaving early from class is fine as long as you don't disturb your classmates. I sometimes forget to schedule a break during a long lecture, so feel free to suggest a break if it appears that I have forgotten to do so. Ask questions at any time, and if you have some expertise in a particular topic, feel free to raise you hand and share it with the class. I will not be offended and in fact am here to learn just like you are. Sleeping in class is OK too, but I will do my best to keep you awake for the whole class period.


Our primary purpose in the classroom is to interact and learn from each other. While non-participation (sleeping; checking email) is permitted, I urge you to consider its impact on your fellow students. Class is a lot more fun when everyone is engaged; a few visibly disengaged people can suck the energy out of a room. I reserve the right to ask you a question to try to reengage you if you seem to have checked out—I will try not to do this in an embarrassing way.

Work in the Course – Getting a Grade


There will be assignments throughout the course (pretty much every week and sometimes mini exercises during a lecture). Regular assignments allow you to learn the material in small "chunks" and to keep a close eye on how well you understand the material. In some cases, we will do part or all of the assignments during a lecture, though you will submit it later.


Generally, the Thursday lab time will be a chance to work on the assignments. The teaching staff will be there and will circulate. You can confer with other students and the instructors. If you are not able to complete an assignment in the lab, it will be due by the following Tuesday, at noon (before class, and in time for you to still eat lunch!). The previous assignments are typically discussed in the class on Thursday and we like some time to review your submissions. Late assignments beyond Tuesdays, noon, will receive a zero. You can submit late assignments in order to get feedback, but no points will be given for an assignment that is turned in after that. There will be nine assignments and only your eight highest grades will be counted.


There will be a “capstone” project in the last 3-4 weeks of the semester, where you bring all the skills you have learned on one significant problem solving task. You will learn debugging skills, modularity skills, and testing skills. You will have a chance to pick a project that you find interesting.


There will be a midterm and a final exam. The exams are administered during a lecture/lab session or the final exam period to allow approximately 2 hours. The exam dates are announced well in advance (see the dates at the end of this document). If you have a conflict, please let me know at least 2 weeks in advance so that I can arrange a different time for you.

Resource writeup (Easy points)

Another relatively painless way to get points in the class is to write up a description of an interesting data source that other students might want to use in their final project, or an interesting python module or package. More about this later in the semester. You are free to use any online module or package to talk about, but one list of many of the Python modules can be found at:


Python Global Module Index:

Class Participation (Bonus Points)

Class participation, helping others, interacting on the email list and answering questions, asking good questions that lead to interesting discussions, and pointing out corrections to my lectures or code will contribute to bonus points, which you can use to help boost your grade.


 In addition, there are optional challenge problems at . I encourage you to try to solve the problems there when you have time and discuss approaches or even code on the email list – that all contributes to class participation points. If you are not able to solve them initially, don’t worry. Treat them as optional and fun part of the course. The good thing about the Python challenges is that once you submit a solution to a challenge, you can see several solutions to the previous challenge. It is a learning experience to see how other people approached the same problem.


If you think you need an accommodation for a disability, please let me know at your earliest convenience. Some aspects of this course, the assignments, the in-class activities, and the way we teach may be modified to facilitate your participation and progress. As soon as you make me aware of your needs, we can work with the Office of Services for Students with Disabilities (SSD) to help us determine appropriate accommodations. SSD (734-763-3000; sswd/) typically recommends accommodations through a Verified Individualized Services and Accommodations (VISA) form. I will treat any information you provide as private and confidential.


The graded work in the course will be weighted roughly as follows to determine a final percentage grade. (Note that bonus points could allow you to get above 100%):


Weekly Assignments     



40% (Midterm: 15% and Final: 25%)

Capstone project:


Python module/package or data source writeup               


Class Participation:         

Up to 5% bonus points


Grades will be awarded as follows:


A+          97%        You have to work really hard to get this

A             93%

A-           90%

B+           87%

B             83%

B-            80%

C+           77%

C             73%

C-            65%

D             55%        You also have to work really hard to get this

F              50%        Or this


Course Outline

The course effectively consists of two parts.  In the first part we march through the textbook in quick fashion.  We might even skip bits and pieces here and there so we can move quickly.  In the second part, once we have learned the basics of programming, we will focus on web applications and your projects.


I am perfectly happy to loop back and review material if it appears we went through something too quickly.  Just let me know when you need me to do this.

Success in the Course

This course covers a lot of interesting topics. The course is designed for students with no programming experience. If you stick with the course and invest the necessary time, you will be amazed at how much you will learn in 15 weeks. 


If you do not have any programming experience, some concepts will take some time to sink in. Do not worry too much if you feel like you are in a fog at times. The assignments are the best way to track your progress through the material.


Usually the biggest problem students encounter in the course is trying to do everything in a few hours right before an assignment is due or right before an exam. If you only think about the course a few hours each week, you will get some of the details but they will not mesh together to provide the big picture. Programming is easy once you get the big picture. The textbook will become an easily scanned reference for you once you know what to look for and why you are looking for it.


Cramming does not work very well when dealing with the material in this course. This is because the material in the course is actually very easy once you "get it" – once you understand some basic principles. No amount of memorization will make up for not having the big picture. Try not to get stuck on any one thing – it is all easy once you "get it." If you do get stuck on something and feel like you are going in circles, ask for help, look at something else, or come at the problem from a different direction. Remember that exams are open book. So, understanding the material is more important than memorizing it.


Good luck and welcome aboard!
Course Schedule and Important Dates





(Optional reading in parens)

Homework (due date)


Jan 7

Introduction to the Course and Computers. Quick overview of computing and Python.

Chapter  1, Zelle.


(Chapter 1, Downey)

HW1 (1/12): SW installation; data processing without a computer


Jan 12, 14

Expressions; Operator precedence; Operations on strings and lists; File operations

Chapter 2 Downey. 

Chapter 2. Zelle

Zelle., 4.1-4.4  and 4.6


(Chapter 3 Zelle.

Ch. 8 and 10 in Downey.)

HW2 (1/19): Count chars, lines in a file


Jan 19, 21

Dictionary data structure;
string output formatting; basic graphics output

Zelle 11.6;

Zelle Chapter 7

Zelle 4.5


(Downey chapter 5)

HW3 (1/26): Count words in a file; most frequent contributors


Jan 26, 28

Functions. Parameter passing and returning values

Zelle Chapter 6


(Chapter 3 Downey)

HW4 (2/2): Refactor HW3 using functions; output as .csv files; generate charts in Excel


Feb 2, 4

Objects, XML Parsing with BeautifulSoup

Zelle chapter 10

Beautiful Soup documentation


(Downey chapters 15-18)

HW5 (2/9): objects


Feb 9, 11

URL lib; sorting

Tutorial on urllib2; Sorting

HW6 (2/16): Fetching and processing a live feed


Feb 16, 18

Iteration; the map operator; nested iteration


Zelle Chapter 8

Zelle 7.4

(Downey chapters 6 and 7)

HW7 (2/23): Nested iteration; sorting


Feb 23, 25

Recap week.

Midterm Exam (approx. 30 mins. written and 1.5 hour practical)

Review.  Tuesday we will try out exercises from Downey  (Chapters 1-10) and Zelle (Chapters 1-8) to assess our understanding

Exam in class 2/25





Mar 9, 11


Severance Chapter 2

HW8 (3/16): Create a feed processor that displays a tag cloud as a web page


Mar 16, 18

Google App Engine

Severance Chapters 4, 5, and 10

HW9 (3/23): publish on Google App Engine


Mar 23, 25

More on making a dynamic web site;
HTML forms

Severance Chapter 4, 11

(Optional: W3Schools tutorial on HTML forms;)

HW10 (3/30): add form processing

Project proposal due 3/30;


Mar 30, Apr 1

Javascript; AJAX

Severance Chapter 9

resource writeup due 4/6


Apr 6, 8




Apr 13, 15

Intro to C



Apr 20

Final exam review

Final projects due 4/20

Final Exam

April 27

April 27, 4-6PM – Final exam period