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

 

Course Description

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.

 

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) 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.

 

Required References

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]

 

 

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.

 

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.

 

Getting Help - Resources

Teaching Staff and Office Hours

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.

Course Web Site

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

 

Course  Forum

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.

 

Email to Teaching Staff

 

You can send email to eecs182 AT umich.edu to reach all three teaching staff members.

 

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 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.

 

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.

Work in the Course – Getting a Grade

Assignments

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.

 

Exams

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.

Mini-exercises (Easy points)

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 (Bonus Points)

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.

 

Grading

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.


 

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 data analysis and other applications.

 

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 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