University of Michigan Computer Science and Engineering DiVISION

EECS 282: Information Systems Design and Programming


Term:

Winter 2010

Lectures:

Mon-Wed, 3-4:30 followed by 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. This is especially true if you also took EECS 182. This will require some changes to prerequisites in selected advanced courses (which currently all require 281), but we are working on that.

 

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. But, 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 jGrasp (http://www.jgrasp.org) and Eclipse (http://www.eclipse.org). jGrasp is easier to use, but Eclipse is more popular. You will probably gravitate to using either jGrasp or Eclipse. So, strictly speaking, only one will be needed. But, you should try out both to see which one you like.

 

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 can also send email to eecs282@umich.edu, which will reach all the teaching staff.

 

Prof. Prakash

TA: TBD

Email ID: aprakash

Office hours:  By appointment. Typically at 4741 CSE Building (North Campus), though I can meet you during the lab or after the lab on Central campus

 

Email ID: TBD

Office hours: See Phorum.

 

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

 

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.

 

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

 

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.

 

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. On the other hand, we reserve the right to not grant points or give reduced points for assignments submitted late.

 

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.

 

 

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 lecture/lab session or the final exam period to allow approximately 2.5 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.

 

Bonus Points

 

There will be opportunities for bonus points to help boost your grade or make up for lost points. We may give you bonus points for exceptional or optional work in an assignment, initiative, class participation, and contributions to the discussion group on phorum.  In addition, if your grade is borderline, we will look favorably at improving performance in the course (especially the final exam).

 

 

Grading

 

The relative percentage for assignments and exams is as follows.

 

 

Assignments           

50%

Exams:

50% (Midterm: 20% and Final: 30%)

Participation:           

3% bonus points

                                               

 

Grade are expected to be awarded as follows. Grading is not on a curve.

 


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


 

 

 

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

SUGGESTED READING (from one of the books)

Assignment

1

Jan. 7

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

Introduction to 282

Writing your first program in Java. IDEs and command-line

Head First Java (HFJ): Chapter 1.

OR

Deitel: Ch. 1 and 2.

 

 

Write the first program in Eclipse, JGrasp, and command-line

2

Jan. 12, 14

Quick Dive into Java.  Variables, loops, conditionals, functions.

 

Objectville: Defining your own object types using classes and methods.

 

Creating multiple objects using arrays.

 

Basic unit testing. Writing a test class before writing code.

 

Extreme programming model.

 

Java langauge features; Comparison with Python and C++. Write tests first; assertions; Extreme programming model

 

Arrays of basic types; object arrays; aliasing with objects/arrays

HFJ: Chapter 1.

OR

Deitel: Chapter 2.

 

HFJ: Chapter 2 and 3.

OR

Deitel: Chapter 3

 

You should read ahead to Chapter 5 in HFJ if possible. Will help with the project.

 

(also see Downey: Chapter 3, 9, and 10.)

 

 

1-Dimensional Spaceship Game and Unit Testing

3

Jan. 21

Scope rules. Static variables and methods, instance variables, and local variables.

 

Assigning and comparing objects vs. primitive types.

 

Java language: loops; parameter passing.

 

 

 

 

Working with classes: class attributes versus object-specific attributes.

 

Advanced loops; parameter passing semantics

HFJ: Chapter 3 has the best treatment.

 

Some material in

Deitel: 6.11

 

Downey: Section 8.9.

 

 

 

 

 

 

2D Spaceship game with multiple ships; Additional Tests; Code Refactoring

4

Jan. 26, 28

Java language limitations:  Passing parameters by reference.

 

Exception handling

 

Inheritance and polymorphism.

Simulating Passing by Reference in Java

 

Exception handling

 

Inheritance

HFJ: Chapter 7

OR

Deitel: Ch. 9

(not covered in Downey)

2D Spaceship game with multiple ships of different shapes. Testing and code refactoring.

5

Feb. 2, 4

When arrays are not adequate. Linked lists;

 

Basic Swing: Adding a GUI: Event-driven programming.

GUI testing. Applets.

 

 

HFJ: Chapter 4 and 5. OR

Deitel: Ch. 4 and 5.

OR

Downey: Chapter 4 and 6.

 

 

 

Polishing up Spaceship Game. Putting it out as an applet.

6

Feb. 9, 11

Introduction to the IMDB set. Estimating performance.  Searching and sorting; Unit testing.

 

Unit testing book. Searching and sorting:

Downey:  Ch. 11 and 12.

(also Deitel: Ch. 16)

 

 

7

Feb. 16, 18

IMDB dataset:

Designing and using linked lists.  Searching.

 

Dietel: Chapter 17.1-17.6

 

Downey:  Chapter 14

 

 

 

8

Feb. 23, 25

Break

 

 

 

9

Mar. 2,

Mar 9

Lists and circular queues

Mar. 9thth: Midterm

 

Chapter 15 and 16 (Downey)

 

10

Mar. 9, 11

Linked lists. Fast lookups: Using maps instead of lists. Midterm: Mar. 9th.

 

Chapter 19 (Downey)

 

11

Mar. 16, 18

Capturing hierarchies and relationships (trees and graphs)

 

Chapter  17 (Downey). Lecture notes.

 

12

Mar. 23, 25

Using a database – Intro to SQL

 

Deitel: Chapter 25 or online sources.

 

13

Mar. 30, Apr. 1

SQL continued

 

Same as above

 

14

Apr. 6, 8

Accessing a database from Java (JDBC)

 

Same as above

 

15

Apr. 13, 15

Misc. topics

 

TBD

 

16

Apr. 20

Misc. topics

 

TBD

 

 

Apr. 24

Final Exam. 1:30-3:30 PM