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