University of Michigan Computer
Science and Engineering DiVISION
EECS 182 (SI 182): Building Applications for Information
Environments
Syllabus
|
Term: |
Fall 2009 |
|
Lectures: |
Mon-Wed, 2:30 – 4:00 PM |
|
Programming Lab: |
Mon-Wed 4:00 PM – 5: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 Javascript. 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:
Note that we will
not be covering these packages specifically, but the course will provide you
the fundamentals to start exploring these and other Python-based systems as
needed in your 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.
At
times, to show you that different programming languages have similar basic
concepts, but are suited for different tasks, we will also talk about Javascript. Pretty much every web page on the Internet
these days uses some Javascript. Knowing Javascript will help you design more interesting web
pages. Once you know a couple of
programming languages, you will find that it becomes easy to pick new languages
in the future.
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.
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.
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.5 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
(www.jedit.org) and Python (http://www.python.org) environment. JEdit is a nice editor because it is cross-platform and can
also be used to edit HTML, CSS, etc. We also show you how to run your Python
programs in a command-line. Our experience shows that you just understand what
is going on much better this way.
You will need Quicktime
(or iTunes) installed on your computer to view the podcasts.
You
should probably download these files to your computer and view/play them
locally as they are rather large files and you will want to move back and forth
as well as start and stop the podcasts so you can perform the steps as
indicated.
It
is highly recommended that every participant in the course own and 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.
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 Macintosh laptop very 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.
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: Carolyn ChÕng |
TA: Tim Diamond |
TA: Kyle Hopper |
|
Email ID: aprakash Office hours: Fri 2:30-4:00 or by
appointment. 4741 CSE Building (North Campus).
Phone: 763-1585 |
Email ID: carollwc Office hours: 4:30-5:30 PM Location: TBD |
Email ID: tdiamond Office hours: TBD Location: TBD |
Email ID: kehopper Office hours: TBD Location: TBD |
IMPORTANT: Please let us know
during the class,
by phone, or drop an email request to eecs182@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 (we will wait up to 20 minutes past
the time you give to allow for unexpected delays, bus delays, etc.) . If we do
not know that you are coming, we many not be there! An email will ensure that
we are around to meet you and we can also try to inform you if there is likely
to be a significant wait.
The
courseÕs public page 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 newsgroup at http://phorum.eecs.umich.edu. This is
preferable for the teaching staff than the use of email because I get a lot of
email and sometimes I miss answering emails. When you go to phorum (the above site), you will
have to authenticate yourself to Wolverine Access using your UM ID and
password. You should then see a
list of newsgroups. If you are unable to get access to EECS 182 group, let me
know so that I can add you to the list of authorized users.
You
should check phorum from time to time. I basically make it my home page (or
one of the tabs in my home page) to make sure that I am answering questions
frequently. On the other hand, you
should not have to check ctools daily. Ctools will
automatically send you an email for any announcements (unless you override the
settings). If I post an important resource, I will also make an announcement so
that you get an email alert. But, whenever you do sign-in, do check the posted
resources as well (e.g., lecture slides) because I will not make an
announcement for every resource if it is not deadline-critical.
First
time you use phorum, you may get a warning from your
browser about an invalid root certificate.
Here
is how to fix it:
Go
to: https://www.eecs.umich.edu/~aprakash/eecs182/loadcert.html
And
follow the instructions on that page.
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 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. 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 phorum newsgroup, 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.
We
will post the specific policy online at the course web site as to what
constitutes acceptable behavior. 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, 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.
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 be scheduled to be due on Mondays
(during the lab). We would
strongly prefer to get the assignments submitted during the lab.
If you are not able to complete an assignment, do submit within a week of the due date.
You can submit late assignments in order to get feedback. Late submissions are marked
down as follows:
There
will be one 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. We will assign you a project that we think will be interesting
to do and help you pick up life-long problem solving skills, which will be
useful even beyond programming. 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. In addition, there are optional
challenge problems at http://www.pythonchallenge.com . The site is not the easiest one to use, but I will show
you the basic steps. I encourage you to try to solve the problems there when
you have time and discuss approaches or even code in Phorum
– that all contributes to class participation points. If you are not able
to solve them initially, do not 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. 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 35% Exams: 50% (Midterm: 25% and Final: 25%) Capstone project: 10% Mini-exercises (during lectures): 5% Class Participation: up
to 2% bonus points Grades
will be awarded as follows:Late Policy:
The late policy is made more generous this semester than usual to allow for potential situations involving flu. No other exceptions, including
for being sick, will be given. Exams
Mini-exercises (Easy points)
Class Participation (Bonus Points)
Grading
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
F
47% ←
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 data analysis and other applications.
Since
this is a new course and the first time I am teaching Python, we will keep some
flexibility in the following schedule.
If it seems like we need to spend more time on a particular topic, we
will shuffle the schedule. It is
important for you to let me know when you are having problems. This will help
me pace the material appropriately and cover some material in greater depth.
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.
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!
Course Schedule and Important Dates (Topics are subject to Change)
|
WEEK |
DATE |
TOPIC |
READINGS |
OPTIONAL |
|
1 |
Sept. 9 |
Introduction to the Course and Computers. There will be a lab on Friday, Sept. 7th. |
Chapter
1, Downey. Page 1-21 Gauld |
|
|
2 |
Sept. 14 |
Quick overview of computing and Python. Basic data types in
Python: integers, floats, string and lists. Variables. Modules. Simple
input/output. Loops |
Lecture slides primarily.
Pages 22-32 Gauld. |
|
|
3 |
Sept. 21 |
Expressions; Operator precedence; Operations on strings and
lists. |
Chapter 2, 8, and 10 Downey. Pages 33-43 Gauld. |
|
|
4 |
Sept. 28 |
Functions. Parameter passing and returning values |
Chapter 3 Downey . Javascript
functions in Gauld: page 111-112 |
|
|
5 |
Oct. 05 |
Booleans, conditionals, and recursion |
Chapter 5 & 6 Downey. pages 93-101 Gauld |
|
|
6 |
Oct.
12 |
Nested conditionals, iteration |
Chapters 6 & 7; Downey . Pages
69-76 Gauld. |
|
|
7 |
Oct. 19 |
Fall study break |
|
|
|
8 |
Oct. 21 |
Data Structures: Dictionaries. and Arrays. |
Chapter 12 and 13 Downey. Gauld: pages
47-53. |
Chapter 11 Zelle |
|
9 |
Oct. 26 |
Midterm exam. 2:30 – 5:00 PM |
|
|
|
10 |
Nov. 2 |
Dictionaries and arrays continued. Defining your own data
types/classes. |
Chapter 15 Downey. Gauld: pages 56-62 |
Chapter 10 Zelle |
|
11 |
Nov. 9 |
Defining your own classes continued |
As needed |
|
|
12 |
Nov. 16 |
Capstone project, Python in practice. |
As needed |
|
|
13 |
Nov. 23 |
Capstone project, discussion of other programming languages.
(Thanksgiving break week) |
As needed |
|
|
14 |
Nov. 30 |
Misc. topics |
As needed |
|
|
15 |
Dec. 7 |
Misc. topics |
As needed |
|
|
16 |
Dec. 14 |
2nd exam:
2:30-5:00 PM |
|
|