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 Instructional
Aides Vidal Borromeo, Jaclyn Cohen |
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.
This course is recommended for 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.
As a rule of thumb:
·
If you get an A in 182 you
can go on to 280 or 282, whichever you prefer.
·
If you get a B in 182, you
probably should take 282 and then go on to 280 or 382.
·
If you get a C in 182, you
probably should take 183 before going on to any 200-level programming course.
Conversely, if you have already taken EECS 183
or Engin 101, and did well, you should go on to a
200-level course rather than taking 182. If you got a C in one of those
courses, then 182 will give you another chance to learn the fundamentals of
programming more solidly before going on to the 200-level. If you already know
the fundamentals of programming in another language and just want to learn
python, this course will move too slowly for you.
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 modules and APIs
· Manipulate data to
o Extract and summarize desired elements
o Output the processed data in .csv and HTML formats
· Create a web site, using a web development framework, that generates pages by running python programs and gathering input from forms
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.
This semester, the instructional team is
supporting a virtual environment in which you will edit programs and run them.
You will need to install:
·
VMWare Fusion (mac) or VMWare Workstation
(windows or linux)
·
A Mint virtual environment
image that we have pre-configured with all the software you'll need
As an alternative, you may choose to install
python and a text editor natively on your laptop. It's definitely doable:
everyone had to in past semesters. But weeks into the semester we were finding strange
differences in the environments students had set up, and it was very hard to
help them when things didn't work as expected.
The instructional team is supporting only the VMWare/Mint environment this semester. If you try to run
things natively, you're on your own.
If you do decide to do things on your own, we
suggest NotePad++ on Windows and TextWrangler
on Mac for editing Python programs. 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 will show you how to run your Python programs
from a command-line and to edit and debug using Eclipse.
Please check out the resources folder on CTools for handouts on installing and using the software.
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.
Please contact me about making alternative
arrangements if you do not have a laptop.
In addition to the Professor, there will be two
Instructional Aides. Below are the office hours and contact information for us.
The email address SI182instructors@umich.edu,
will reach all the teaching staff. That
group address is preferred over sending email to individuals, unless you have
some reason to keep your message private. It’s helpful if we can all monitor
all the questions that students have, and the responses we're giving.
Professor: Paul Resnick |
Instructional Aide: Vidal Borromeo |
Instructional Aide: Jackie Cohen |
Email ID: presnick Office hours: Wed. 4-5PM Location: 4344 North Quad 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: vidal Office hours: Tuesdays 7-9PM Location: 1277 North Quad |
Email ID: jczetta Office hours: Sundays 7-9PM Location: 1277 North Quad |
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/winter12/SI182/syllabus.html 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 (and I think every student at UM could get an A in
182, with enough work), I encourage you to get help from anyone you like,
especially in the portion of the course before the midterm.
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. You can (and should) bring your laptop to class. 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. 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 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
2-3 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
midterm exam is administered during the regular lecture session and the final
during the final exam period. 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.
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 a 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, and that comes from sustained engagement, not cramming. 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 5 |
Introduction to the Course
and Computers. |
Chapter 1, Zelle. (Chapter 1, Downey) |
HW1 (1/11): SW
installation, writing your first program |
2 |
Jan 10,
12 |
Quick overview of
computing and Python. Operations on strings and lists. Version control. |
Chapter 2 Downey. Chapter 2. Zelle Zelle., 4.1-4.4 and 4.6 Zelle 11.2 – 11.2.2 |
HW2 (1/18): string and
list operations; setting up an svn repository |
3 |
Jan 17,
19 |
File operations; Iteration on sequences Interactive debugging |
Chapter 3 Zelle. Chapter 7 Zelle (Ch. 8 and 10 in Downey.) |
HW3 (1/25): Count chars,
words, lines in a file |
4 |
Jan 24,
26 |
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 |
Jan 31,
Feb 2 |
Functions. Parameter
passing and returning values |
Zelle Chapter 6 (Chapter 3 Downey) |
HW5 (2/8): Refactor HW4
using functions; remove stopwords |
6 |
Feb 7, 9 |
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 14,
16 |
Objects and Classes |
Zelle chapter 10 (Downey chapters 15-18) |
HW7 (2/22): Refactor HW6
using classes—some extra methods needed |
8 |
Feb 21,
23 |
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/23 |
WINTER BREAK |
|
|
||
8 |
Mar 6, 8 |
URL lib; Try/except; JSON processing HTML |
Tutorial on urllib2; |
HW8 (3/14) :
Fetching and processing a live feed |
9 |
Mar 13,
15 |
Tuples Sorting; list comprehensions; enumerate; zip; |
Sorting; |
HW9 (3/21): sorting; more
data processing |
10 |
Mar 20,
22 |
CSS; |
Severance Chapter 2; |
HW10 (3/28): Create a
feed processor that displays a tag cloud as a web page |
11 |
Mar 27,
29 |
Google App Engine |
Severance Chapters 4, 5,
and 10 |
HW11 (4/4): publish feed
processor on Google App Engine |
12 |
Apr 3, 5 |
More on making a dynamic
web site; |
Severance Chapter 4, 11 (Optional: W3Schools tutorial on
HTML forms;) |
HW12 (4/11): skeleton version of project site, using an HTML
form |
13 |
Apr 10,
12 |
Datastore; oAuth |
|
|
14 |
Apr 17 |
Project presentations |
Final projects due 4/17 |
|
Final
Exam April 26 |
April 26, 1:30-3:30PM –
Final exam period |
|
|