University of Michigan Computer
Science and Engineering DiVISION
EECS 182 (SI 182): Building Applications for Information
Environments
Syllabus
|
Term: |
Fall 2011 |
|
Lectures: |
Mon-Wed, 3:30 – 5:00 PM (Note: we changed the
timing to help make both labs adjacent to the lecture) |
|
Programming Lab: |
Mon-Wed 2:30 PM – 3:30 PM and
5:00 PM – 6:00 PM |
|
Location: |
1250 USB |
|
Instructor: |
Prof. Atul Prakash |
Are
you interested in learning how to extract useful data from the web or
spreadsheets and automatically analyze it? Or how to build interactive games or
write programs to solve puzzles quickly? Last year, by the end of the course,
students were writing programs to solve Sudoku puzzles, to find the nearest
Starbucks to your computer's location, to develop fractal animations, to
analyze data from spreadsheets, to explore Google AppEngine,
and to visualize correlations between stock market prices and U.S. election
results. In other semesters, students have written programs to analyze social
network data on twitter and Facebook.
To
do the above, we will work together to learn some fundamentals of designing
software in the Python programming language and, at times, in C++. Python is
free software, and you will install it on your computer to keep and use during
the course and beyond. This course has been designed for students with no prior
programming experience. We will learn the basics of programming taking our time
to understand the basic concepts of programming and revisiting topics as
necessary. Weekly assignments will be key, as they will provide a venue for
applying programming concepts. We will look at a number of data applications
and use our programming skills to solve interesting problems in various
domains.
Python
is a wonderful language for general applications and prototyping. It is one of
the three languages used at Google. In fact, Google hired the developer of
Python! It has extensive libraries for mathematical and data analysis, data
plotting, 2D and 3D visualizations, scraping web sites, text processing, etc.
Below are some examples where Python is used:
We will look at a
few interesting Python packages during the course that you will be able to your
current and future courses. Many students find that they are able to do
information processing tasks in Python very quickly that would be very hard to
do with plain spreadsheets or standard software tools.
This
semester, this course is not going to be entirely about Python, but becoming
comfortable with different computing environments as well as different
programming paradigms, with Python being a major component. To achieve that, we
will also expose you to a different computing environment than you are probably
used to. We will give you software
so that you can install a pre-packaged operating system, along with all the
Python software, in the form of what is called a virtual appliance. You should
be able to run it on your Windows, Linux, or Mac OS laptop or desktop computer.
The pre-packaged operating system is called Mint.
It is a flavor of Linux. There is going to be a learning curve and some initial
discomfort, but we hope that it will be short. The advantage is that the entire
class will have a standard computing environment and software for the course
and we will be able to update it as needed throughout the semester.
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) 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.
In
our past experience, some students who go to EECS 280 after 182 had a bit of a
disadvantage as compared to students from 183 in having to pick up C ++ and Linux very
quickly. This semester, we hope to remedy that by exposing you to Linux early on
and even have you develop a few C++ programs along the way. That way, you will come
out of the course knowing an additional operating system (Linux), some tools on
that (e.g., Emacs and how to work in a terminal), as
well as two programming languages (Python and C++), with Python being more
in-depth.
If
you enjoy this class, I encourage you to continue on to either EECS 282 or EECS
280. If you are planning to take both, take EECS 282 first, though they can be
taken in either order.
1. Slides/notes handouts from the lectures: Generally
made available via the web.
2. Textbooks: You need one Python book as a reference.
Either of the following can be used:
a. Charles Severance, Python for Informatics. Available
for free at http://www.py4inf.com/. Can be printed at the Espresso Book Machine
at the Shapiro Library.
b. Alen Downey, Python for Software Design: How to think like
a computer scientist. Can be downloaded for free at
http://greenteapress.com/thinkpython/ or purchased from a bookstore, including
Amazon.
(We will refer to the
books as Think Python books).
The
two books have a great deal of overlap in chapters since Severance's book is a
based on the Downey's book, which gives permission to modify and use.)
Recommended
(Optional): It is a good read. We
may get to it or we may not.
1. Charles Severance, Using Google App Engine. http://oreilly.com/catalog/9780596800697/. It is available in hard copy from bookstores and in electronic form from Safari Books. For online version, first check the University of Michigan library. It is available for free as a safari ebook there. I suggest holding back on purchasing this for now till you require it, though it is an excellent read for learning how to apply Python to building a web site and deploying it on Google infrastructure for free.
2. Another free online book Learning to Program by Alan Gauld. [pdf]
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.
It
is highly recommended (almost essential) that every participant in the course
own and bring a laptop to each class session. If you have a desktop machine in your dorm room or home, you
may be able to set it up for remote access and access it via a cheap netbook computer. You will need at least 8GB of disk space
to install the software from the class. If for some reason, you have difficulty
with the software we provide (this is the first semester we are trying it out),
talk to us. We may be able to suggest a few alternatives to get you started
without the software till we figure out a more permanent solution.
For
backup purposes I suggest you buy a 4-8GB 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. We will talk about a few other backup methods in the class,
such as using your ITD umich account for backing up
your files.
We are fortunate to be able to have excellent teaching staff
this semester. We will have three teaching assistants who are available to help
you throughout the semester. Below are the office hours and contact information
for the Professor and the TAs. Though we have given individual email IDs, it
will be better to send email to eecs182@umich.edu,
which will reach all the teaching staff and any of us can then respond.
|
Prof. Prakash |
TA: Alexendra
Burrell |
TA: Yi Wang |
|
Email ID: aprakash
AT umich.edu Phone: 734-763-1585 Office hours: TBD. Initially, they will be on Mon. and
Wed. 1/ 2 hour before or after lecture time in the USB near the elevators on
1st floor. |
Email ID: burell.alexandra
AT gmail.com Cell: 616-901-2822 Office hours: 12-2 PM Thursdays. Location: Berts
Cafe area, UGLI Alex is a senior in the Computational Informatics program. |
Email ID: haidixiansheng
AT gmail.com Cell: 734-355-5473 Office hours: Either Sunday sometime
or Friday morning. To be decided. Yi is a computer engineering student. |
IMPORTANT: Please let us know
during the class, by phone, or drop an email request to eecs182@umich.edu at least 30 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. We will try to set up a signup
system for office hours. If we do not receive a request, we may not be there.
The
public page for
the course is at http://www.eecs.umich.edu/~aprakash/eecs182. 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 request 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
(though that may change during the semester). Also see A Crash Course on Ctools
The
best way to get help during the course will be via a forum. There is a link at ctools. We will keep a track of questions posted there and
attempt to reply. We also encourage students to reply to posted questions.
You
can send email to eecs182 AT umich.edu to reach all three teaching staff
members.
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 any assignment
must be in your own words.
If
you receive significant assistance on an assignment, please specify the nature
and the amount of assistance you received and from whom. If the help is in the
form of computer code, add a comment indicating who helped you and how. 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 discussion forum, 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 offered by the College
of Engineering. It applies to you even if you are not an Engineering student or
taking the course as SI 182.
Basically,
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. 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. If
we find too similar submissions, we may investigate it to determine if the
assignments are in your own style and words, you understand what you submitted,
and whether proper attribution was done.
Often, same bugs in the code and similar coding style will trip things
up. Copying code from the web
without rewriting it in your own style and without understanding it is also
considered cheating. So, the fine line here is that it is OK to get help and
provide help, but then you must write the code, comments, and any other
documents in your own style and words.
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.
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 of the assignments during a lecture,
though you will submit it later.
The
labs are a good time to do the assignments and get help. The teaching staff
will be there. During the labs, we will also share tips and tricks that can
help you do work more efficiently. The labs will generally consist of 15-30
minutes of tips or tricks and the rest of the lab will be primarily you
finishing up or starting your programming assignment.
Assignments
will have a specific due date and time. You can submit late
assignments in order to get feedback.
But, late submissions may be marked down at the discretion of the
TA (usually no penalty for one
late submission, 10% markdown on the second late submission, and 20% on all
subsequent late submissions). You
will have at least 24 hours to submit a late submission. Beyond that, we may
give a zero if the graded assignments have already been returned to the
students or deduct arbitrary penalty, depending on the circumstances, if we
choose to accept it.
There
will be a midterm and a final exam. Each exam will consist of two parts. The
first part is a traditional written exam intended to measure mastery of the
course material, including programming knowledge; the second is a practical
exam, intended to measure programming skills. The exams are administered during
a 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.
Often,
during a lecture, I will assign a mini programming exercise from the textbook
or on the board. The expectation
is that you will do it on your laptop or on a piece of paper and we will discuss
them right then in the class. Such exercises will be only coarsely graded and
submitting them is basically free points since we discuss the solution in the
class. You simply have to submit a solution, even a partially working one that
shows some effort. Their primary purpose for me is to help convey concepts to
you by trial and demonstration and to make sure you are doing active learning.
You will usually
submit these via ctools as well. Do not worry about
copying and pasting only working stuff – non-working attempts are OK to
submit. If you do not get it to us during the class (e.g., no network), send it
in later the same day for credit. Submissions beyond the date of assignment are
not counted, unless an exemption is announced in the class.
Class
participation, helping others, interacting on phorum
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. These are totally at the discretion of the
instructor. Awarding of these points is rare and for exceptional participation.
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%):
|
Programming Assignments |
45% |
|
Exams: |
50% (Midterm: 25% and Final: 25%) |
|
Mini-exercises (during lectures): |
5% |
|
Class Participation: |
up
to 2% bonus points |
Grades
will be awarded as follows:
A+ 97% ←
You have to work really hard to get this
A 92%
A-
87%
B+
82%
B 77%
B-
72%
C+ 67%
C 62%
C- 57%
D 52% ←
You also have to work really hard to get this
D-
47% ←
Or this
E
< 47% ←
Or this
We reserve the right to relax the grade
boundaries, grading on a curve instead,
if the difficulty on the exams or programming assignments is more than we
expect. But, if we choose to do that, you are still guaranteed that you will
receive at least the grade indicated by the above thresholds.
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 data analysis and other applications.
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 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!
Tentative
Course Schedule and Important Dates
(Topics and readings are subject to Change. Check slides and announcements for the latest updates)
|
WEEK |
DATE |
TOPIC |
READINGS |
|
1 |
Sept. 7 |
Introduction to the Course and Computers. There will be a lab. |
Chapter
1, Think Python. |
|
2 |
Sept. 12, 14 |
Computers and Programs – A whirlwind tour of Python Types, Operators and Expressions |
Lecture slides primarily. Also read Ch. 4 to get an idea of functions. Ch. 2;
Variables, expressions, and statements. Parts of Ch. 6, 7, and 8 on lists and strings. |
|
3 |
Sept. 19, 21 |
Booleans and Conditional Statements Introduction to loops. |
Chapter 3: Conditional Execution, except for tryÉexcept. Ch. 4. Read as necessary to understand how we are using
functions. Ch. 5: Iteration. |
|
4 |
Sept. 26, 28 |
Nested loops for iterating over 2-dimensional data Tuples Example use: Working with images in Python |
Ch. 10.1 to 10.3: Basic of tuples. Online resources to be provided on image handling in Python. Also,
see examples In eecs182_demos/imaging/ folder in Mint |
|
5 |
Oct. 03, 05 |
Functions and Modules Local and global variables Organizing larger programs into functions and modules |
Chapter 4 |
|
6 |
Oct.
10, 12 |
Dictionaries. |
Chapter 9 |
|
7 |
Oct. 17 |
Fall study break |
|
|
8 |
Oct. 19 |
Review |
|
|
9 |
Oct. 24 |
Midterm exam. 2:30
– 5:00 PM |
|
|
10 |
Oct. 26th, Nov. 2 |
Introduction to C++ |
Lecture notes, online refs. |
|
11 |
Nov. 7,9. |
C++ continued |
Lecture notes, online refs |
|
12 |
Nov. 14, 16 |
Interfacing Python with C++ |
Lecture notes, online refs |
|
13 |
Nov. 23 |
Thanksgiving break starts. Lab and review only. |
Lecture notes, online refs |
|
14 |
Nov. 30 |
TBD |
Lecture notes |
|
15 |
Dec. 7 |
TBD |
Lecture notes |
|
16 |
Dec. 16th |
2nd
exam: 1:30-3:30 PM |
|