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