University of Michigan
SI 182 (EECS 182): Building Applications for Information
Environments
Syllabus
Term: |
Winter 2011 |
Lectures: |
Tues/Thurs.
1-2:30 |
Lab: |
Tues/Thurs.
2:30-4 |
Location: |
1250 USB |
Instructors: |
Professor
Paul Resnick Graduate
Student Instructor Eytan Bakshy Instructional
Aide Matthew Greenbaum Grader
Melissa Arthur |
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 extracted
from a Facebook group 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.
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/SI 182 uses 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 PHP, Ruby, and Javascript.
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 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 External libraries and modules
· 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
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.
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!).
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 NotePad++ on Windows and TextWrangler
on Mac for editing Python programs (alternative editors are also fine but not
supported by the instructional staff) 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. Word processing programs like MS Word will not work because
they add lots of unwanted formatting characters.
We show you how to run your Python programs from
a command-line. There is an interactive GUI that comes with Python, called
IDLE. We recommend that you not use
it. Our experience shows that you will understand what is going on much better
using the command. We will not help you with technical support on using it!
Please check out the resources folder on CTools
for handouts on installing and using the software.
1.
Installing and configuring
NotePad++ (Windows)
2.
Installing and configuring
TextWrangler (Mac)
3.
Installing Python version
2.6 (already pre-installed on Macs of recent vintage)
4.
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. If you do not have a laptop, and are not able to borrow one from a
friend, you may be able to borrow one
from LS&A Instructional Support Services, http://www.lsa.umich.edu/iss/faq.
But it doesn’t look like that’s very convenient.
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 SI182instructors@umich.edu, 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 |
Graduate Student Instructor: Eytan
Bakshy |
Instructional Aide: Matthew Greenbaum |
Grader: Melissa Arthur |
Email ID: presnick Office hours: I will often be available during lab
times as well. Ask me if you’d like to have a private conversation and we can
step outside |
Email ID: ebakshy Office hours: Tuesdays 4:30-6:30 in 1274 North Quad |
Email ID: matgrnbm Office hours: Sundays 7-9PM Location: TBD |
Email ID: mlarthur |
Please send an
email request to SI182instructors@umich.edu
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.
The course’s public page is at
http://presnick.people.si.umich.edu/courses/winter11/SI182 The internal site, which is what you will
primarily use, is accessed via http://ctools.umich.edu.
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
The best way to get help during the course will
be via the Facebook group we have created. You are encouraged to respond to
(comment on) 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
SI182instructors@umich.edu.
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 Facebook group, including posting
code fragments. Just don’t post complete answers. If it seems like you’ve
posted too much, one of the instructional staff will contact you to let you
know, so don’t worry about it.
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). 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 some materials that you bring with you. 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.
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 your hand and share it with the class. I will not be offended and in fact
like to learn new things.
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.
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 Tuesday and Thursday lab times
will be a chance to work on the assignments. Although you may have signed up
for just one lab, I encourage you to make use of both lab times. 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 Tuesday
lab, it will be due the next day (Wednesday), at noon. The previous assignments
are typically discussed in the class on Thursday and we like some time to
review your submissions. Late assignments beyond Wednesdays at 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 12 assignments and only your 10 highest grades will be counted.
There will be a “capstone” project in the last
3-4 weeks of the semester, where you apply all the skills you have learned. 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.
Class participation, helping others, interacting
on the Facebook group 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 http://www.pythonchallenge.com
. 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; http://www.umich.edu/ 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% |
Exams: |
40% (Midterm: 15% and
Final: 25%) |
Capstone project: |
20% |
Class Participation: |
Up to 2% bonus points |
Grades will be awarded as follows:
A+ 98% ← 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
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.
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 14 weeks. Don’t be intimidated by the few students who
already know how to program. They’re welcome in the course, but the course is
not designed for them. The instructional staff is committed to helping every
student get to the point where they are comfortable writing computer programs.
The world looks like a very different place once you can do that, and we look
forward to welcoming you into the club.
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. But do come to office hours or send an email,
so we’ll know you are struggling and can make suggestions. 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
WEEK |
DATES |
TOPIC |
READING |
Homework (due date) |
1 |
Jan 6 |
Introduction to the
Course and Computers. |
Chapter 1, Zelle. (Chapter 1, Downey) |
HW1 (1/11): SW
installation, writing your first program |
2 |
Jan 11,
13 |
Quick overview of
computing and Python. Operations on strings and lists |
Chapter 2 Downey. Chapter 2. Zelle Zelle., 4.1-4.4 and 4.6 Zelle 11.2 – 11.2.2 |
HW2 (1/18): data
processing without a computer; string and list operations; |
3 |
Jan 18,
20 |
File operations; Iteration on sequences |
Chapter 3 Zelle. Chapter 7 Zelle (Ch. 8 and 10 in Downey.) |
HW3 (1/25): Count chars,
words, lines in a file |
4 |
Jan 25,
27 |
Conditionals; Dictionary data
structure; |
Zelle
11.6; Zelle
4.5 (Downey
chapter 5) |
HW4 (2/1): Contributor
counts; output as .csv files; generate charts in Excel |
5 |
Feb 1, 3 |
Functions. Parameter
passing and returning values |
Zelle Chapter 6 (Chapter 3 Downey) |
HW5 (2/8): Refactor HW4
using functions; remove stopwords |
6 |
Feb 8,
10 |
Indefinite iteration;
nested data structure and nested iteration |
Zelle Chapter 8 (Downey chapters 6 and 7) |
HW6 (2/15): Calculate likes
and comment frequencies; Who is the most active liker? |
7 |
Feb 15,
17 |
Objects and Classes |
Zelle chapter 10 (Downey chapters 15-18) |
HW7 (2/22): Refactor HW6
using classes—some extra methods needed |
8 |
Feb 22,
24 |
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/24 |
WINTER BREAK |
|
|
||
8 |
Mar 8,
10 |
URL lib; Try/except; JSON processing HTML |
Tutorial on urllib2; |
HW8 (3/15) : Fetching
and processing a live feed |
9 |
Mar 15,
17 |
Tuples Sorting; list comprehensions; enumerate; zip |
Sorting; |
HW9 (3/22): sorting; more
data processing |
10 |
Mar 22,
24 |
CSS; |
Severance Chapter 2; |
HW10 (3/29): Create a
feed processor that displays a tag cloud as a web page |
11 |
Mar 29,
31 |
Google App Engine |
Severance Chapters 4, 5,
and 10 |
HW11 (4/5): publish feed
processor on Google App Engine |
12 |
Apr 5, 7 |
More on making a dynamic
web site; |
Severance Chapter 4, 11 (Optional: W3Schools tutorial on
HTML forms;) |
HW12 (4/12): skeleton version of project site, using an
HTML form |
13 |
Apr 12,
14 |
Datastore; oAuth |
|
|
14 |
Apr 19 |
Project presentations |
Final projects due 4/19 |
|
Final
Exam April 27 |
April 27, 1:30-3:30PM –
Final exam period |
|
|