University of Michigan Computer Science and Engineering DiVISION

EECS 282: Information Systems Design and Programming


Term:

Winter 2010

Lectures:

Mon-Wed, 3-5:30 including a 1 hour programming lab MW

Location:

1250 USB

Instructor:

Prof. Atul Prakash

 

Course Description

Prerequisite: EECS 182 or EECS 183 or ENGR 101. II (4 credits)


This course focuses on techniques for algorithm development and programming. You should know some basic programming, as from EECS 182, 183, or Engin 101 in some programming language (e.g., C, C++, Java, or Python). In this course, you will learn additional programming skills. You will learn object-oriented programming concepts, software testing techniques (unit testing) and using a debugger, and the design of common data structures including arrays, stacks, queues, and  search trees. We will explore problem solving techniques, such as recursion. Basic program analysis (big-Oh). Finally,  we will introduce accessing databases from your program using SQL and JDBC.

 

Workload and Teaching Style:

 

This course is attempting to cover a lot of important programming concepts. We will use Java as the programming language.

No prior Java experience is required, though you should have taken a programming class before. Mostly, the assignments will be one to two-week duration. We encourage students to bring laptops to the class. We will try to make the class as hands-on as possible. The class is 4-credits, but has 5-hours of lecture/lab total. The intent is that students are able to complete significant parts of their assignments during the lecture/lab, with help from the TA/instructor. Overall, my hope is that the workload is lower than a typical programming class in EECS, but we are able to do more in less time by going to a lecture/lab model and by providing more online help on programs.

 

Who should take it?

 

If you are a CS student, you can take this class as an elective. Some of the conceptual material will overlap with 280 and 281 – in particular object-oriented programming, recursion, and basic data structures. But, we also do a few different things – learn about unit testing, Java programming, and databases. It can be taken in addition to 280 and 281 if you want to learn these things.

 

For informatics students, this is a required core course. Our plan in designing this course is that after this course, students may be able to take some elective 300-level and 400-level elective courses that are not C++-based, such as EECS 485, bypassing EECS 281.

 

For other majors, you can take this class if you want a 2nd programming class. EECS 280 is an alternative if you prefer C++ programming. EECS 282 is designed to cover a broader range of topics and be more application-focused. If you have never programmed before, we recommend EECS 182.

 

Note: This class is different from EECS 285, which is a 2-credit course in Java. The emphasis in 285 is on learning Java. The emphasis in 282 is in learning concepts, for which Java just happens to be a convenient language. You will learn Java in 282, but the course does not emphasize all aspects of Java, e.g., applet development.

 

Textbooks

 

Required

1.    Downey, How to Think Like a Computer Scientist; Java Edition, 4th Edition. Available in PDF at: http://www.greenteapress.com/thinkapjava/  and for purchase in hardcopy for about  $22.

2.    Online free SQL tutorials. To be decided

3.    Pragmatic Unit Testing in Java with JUnit - Andy Hunt and Dave Thomas. This is an inexpensive book (relatively). $21.86 at Amazon.

 

4.    Slides/notes handouts from the lectures: Generally made available via the web.

 

5.    Free Java Tutorials by Sun.

Optional

Any book on Java would do if you want an additional reference. Here are two popular books. Look for books that use Java 1.5 or later.

a.    Java: How to Program, Dietel and Dietel., 7th Edition is the latest. Prentice-Hall. About $106 at Amazon. OR

b.    Head First Java, Sierra and Bates, O'Reilly Media . 2nd Edition is the latest.  About $30 at Amazon.

 

Software Required for the Class

 

Students in the course will use a number of freely available tools.  You will need to install Java JDK from http://java.sun.com. At the minimum, it is possible to write Java programs using an existing editor (e.g., Notepad, jEdit, emacs, vim) and then invoke java from command line. For example, personally, I often use Emacs as it works on all platforms, for different langauges, and even when I am logging in remotely to a linux machine over ssh. However, many developers find it more convenient to use an Integrated Development Environment that includes a nice editor, execution environment, and a debugger. So, you should also install Eclipse (http://www.eclipse.org), a popular cross-platform IDE for Java.

 

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.

 

If you work on a computer that does not belong to you, make sure you keep a flash drive handy with your files and the required software.

 

 

Getting Help – Resources

 

Teaching Staff and Office Hours

We are fortunate to be able to have excellent teaching staff this semester. We will have one teaching assistant who is 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, you should primarily use eecs282@umich.edu, which will reach all the teaching staff. That way, any of us can respond to your query.

 

Prof. Prakash

TA: Vijay Alexander

TA: Scott Reed

Email ID: aprakash

Office hours:  3-4:30 Fridays. 4741 CSE Building (North Campus),

 

Email ID: vjalex

Office hours: 4-5:30 Tuesdays. Location: TBD.

Email ID: reedscot

Office hours: 2-3:30 Thursdays, Undergrad Library.

 

Please drop an email request to eecs282@umich.edu or communicate to us in some other way 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 requests, 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 and we can also try to inform you if there is likely to be a significant wait. It avoids waste of everyone's time.

 

Course Web Site

 

The courseÕs public page is at http://www.eecs.umich.edu/courses/eecs282.  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 282 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.

 

 

Course  Discussion Group

 

Use the EECS 282 discussion group for most of the questions, rather than email. That way, other students will also benefit or can respond to your questions. The Discussion Group is accessible via Ctools. The discussion group is hosted on a different web site.  If you find that you have access to 282 site in ctools, but not to its discussion group, then let us know so that we can fix the problem.

 

An alternative way to get to the discussion group is via http://phorum.eecs.umich.edu. 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 282 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.

 

 

Giving and Receiving Assistance

 

When you try to apply the material in this course to solve problems, it will often be 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 submissions on the assignments must be in your own words an style.

 

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 and report any instances of cheating, as the Honor Code requires. 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.

 

Collaboration in the class is allowed (and even encouraged) for assignments – you can get help from anyone as long as it is clearly acknowledged and the final submission is something you wrote.  Collaboration or outside help is not allowed on exams, though you will be allowed to use the book or any other resources. 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.

 

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 as 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 assignments will have different points and duration, depending on the expected work.

 

The labs are a good time to do the assignments and get help. The teaching staff will be there and we can provide one-on-one help as well.

 

Please submit the assignments on time. On one hand, I like to see you submit an assignment even it is late. See the late policy on the penalty for late submissions.

 

For several assignments, we will use the IMDB movie database files. These files contain information about actors and movies. We will put ourselves in the shoes of someone who wishes to extend the IMDB movie rating web site (http://www.imdb.com) and providing new types of queries on the dataset. We will be primarily doing work that would be done on the backend of a web site rather than designing the front-end.

 

You will find that the dataset is quite large (several Megabytes). To process the data efficiently is going to require learning new tricks from computer science. That includes data structures and using a database to help analyze the data. We will learn those in the 2nd half of the course.

 

 

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.

Exams

 

There will be a midterm and a final exam. The exams are designed to test your mastery of the material, including programming knowledge and skills. Trying to do assignments independently and understanding the lecture notes should be a good way to prepare for the exams. The exams are administered during a lecture/lab session or the final exam period to allow approximately 2-2.5 hours. Exams will be open book/open notes (but no computer) and to be submitted on paper. 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.

 

Bonus Points

 

There will be opportunities for bonus points to help boost your grade or make up for lost points. In addition, if your grade is border-line, we will look favorably at improving performance in the course (especially the final exam). We will also look favorably at class participation and contributions to the discussion group. 

 

 

Late Policy

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:

No other exceptions, including for being sick, will be given. The 2 weeks of grace period is for you to handle exceptional situations, such as sickness and conflict with other courses.

Grading

 

The relative percentage for assignments and exams is as follows.

 

 

Assignments           

45%

Mini-exercises

5%

Exams:

50% (Midterm: 25% and Final: 25%)

                                               

 

Grades are planned to be awarded as follows. Grading is not on a curve, so don't worry if you find that some students are doing much better on some parts of the course. Focus on your own performance. You are not competing against other students.

 

 


A+       98%    ← You have to work really hard to get this

A          93%

A-        88%

B+       83%

B         78%

B-        73%

C+       68%

C         63%

C-        58%

D         53%    ← You also have to work really hard to get this

E         48%   ← Or this


 

 

 

Doing Well in the Course

 

 

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.

 


Course Schedule and Important Dates (THIS IS FROM WINTER 2009. LIKELY TO BE REVISED)

 

WEEK

DATE

TOPIC

Lecture Notes

Assignment

1

Jan. 6

Intro. Write Hello World program in Java. There will be a lab. Introduction to Eclipse, and command-line compiling. Compilers vs. Interpreters.

01-lecture.pdf

 

02-firstprogram.pdf

Write the first program

2

Jan. 11, 13

Defensive Programming:

 

Types, Limitations of numbers, Conditionals, Switch, Assertions, Code Invariants, Defensive Programming Style

 

Defensive Programming continued:

 

For and while loops; pre- and post-conditions; loop invariants; common errors with loops

 

03-lecture-defensive1.pdf

 

04-lecture-defensive-programming2.pdf

 02-assignment.pdf

Ballgame.java

3

Jan. 20

Arrays, Creating 1-dimensional and 2-dimensional arrays, aliasing in array assignments.

 

Defensive programming:

Bound checking

 

Arrays versus Python lists (for 182 students)

 

05-arrays-lecture.pdf

Assignment3.zip

 

03-assignment-classes.pdf

4

Jan. 25, 27

Introduction to classes

 

Why static variables are useful.

 

Constructors

 

Use of ÒthisÓ as self-reference

 

Scope rules: innermost rule

 

Defensive programming:

Class invariants; Need for private versus public variables and methods to help enforce invariants

 

Getters and setters

 

Testing invariants

 

Constant variables

 

Object methods versus class methods (using static); analogy of functions in other languages with class methods

 

main program

 

Javadoc

 

Creating objects; object references and assignment; How all references are really pointers in Java and how assignment causes aliasing of variables.

 

Primitive types versus classes: how assignment differs

 

Arrays of objects

 

Relationship among objects: one-to-one, one-to-many, and many-to-many.  Using pointers and arrays/lists to represent relationships; enforcing invariants when updating relationships

 

06-lecture-classes.pdf

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

07-lecture-relationships.pdf

04-assignment.pdf

 

DuplicateMonkeyException.java

5

Feb. 1, 3

Unit testing using jUnit: junit assertions and tests; running jUnit tests from command line and from Eclipse

 

Exceptions. Raising exceptions using throw and handling them using  tryÉcatch block. Declaring exceptions when exceptions are not caught.

 

Common exceptions: Assertion errors, runtime exceptions, I/O exceptions

 

How exceptions get passed through the call stack

 

08-unit-testing.pdf

 

 

09-exceptions.pdf

 

6

Feb. 8, 10

Lists: building your own lists using arrays; invariants for lists; expanding an array to implement unbounded lists

 

Recursion; divide and conquer strategy for problem solving.

 

Introduction to big-Oh analysis. Why  Tower-of-hanoi blows up for large n.

 

Fractal drawings as another example of recursion. Use the ACM graphics package to demonstrate the drawings.

 

A small example of recursion on inheritance trees

 

 

Parsing input: Scanner class

 

Introduction to the IMDB dataset

 

Working with large datasets: how to handle long execution times and memory problems

 

Measuring execution time in Java.

 

 

 

10-arraylists.pdf

 

11-recursion.pdf

 

 

12-parsing-input.pdf

 

13-imdb-project-time-arrays.pdf

05-assignment-imdb-search.pdf

7

Feb. 15, 17

No lecture on the 15th; only lab.

 

Introduction to queues and stacks. How one data structure, e.g., lists, can be wrapped to create another one, e.g., queues.

 

Why dequeue operation using array-based lists is O(n), but enqueue is O(1).

 

Circular queues to get O(1) enqueue and dequeue operations.

 

14-queues.pdf

 

8

Feb. 22, 24

Linked lists

 

 

9

Feb. 27-Mar. 7

Break

 

 

10

Mar. 8, 10

Midterm: Mar. 8th.

Linked lists. Fast lookups: Using maps instead of lists.

 

 

11

Mar. 15, 17

Capturing hierarchies and relationships (trees and graphs)

 

 

12

Mar. 22, 24

Using a database – Intro to SQL

 

 

13

Mar. 29, 31

SQL continued

 

 

14

Apr. 5, 7

Accessing a database from Java (JDBC)

 

 

15

Apr. 12, 14

Misc. topics

 

 

16

Apr. 19

Misc. topics

 

 

 

Apr. 26

Final Exam. 1:30-3:30 PM