Data Structures Lab
Winter 2007
CIS 323

[Picture of the textbook]
Instructor
Peter Boothe - email, 346-4436, web, AIM, and Google Chat/Jabber
Time/Location
8:30AM - 9:50AM every Thursday / 106 Deady
Office Hours
Tuesday 2-3:30 / Monday 2-4 in Deschutes 254
Credit Hours/Grading
2 Credit hours P/NP
Official Info
CIS 323 at classes.uoregon.edu
Book
The Big Book of Algorithms (not really required for 323, but definitely required for 313 and a good book to have on your bookshelf)

Overview

In 313 you will be learning theory, and in this lab you will be learning how to practice that theory. Kind of like wood-shop class, only with computers. We will be getting our hands a little dirty and actually doing some of the things that we talk about in 313. Think of it as getting good at the vo-tech aspect of computer science and you will be on the right track.

The class will consist of 5 assignments, one due every 2 weeks. Be careful — the first one will be relatively easy, but that's mostly to warm you up. Each will be worth 20% of your overall grade.

Assignments

  1. Linked Lists - Due 5:00 pm Tuesday, January 23rd
  2. Binary Search Trees - Due 5:00 pm Tuesday, February 6th
  3. 2-4 Trees - Due 5:00 pm Tuesday, February 20th
  4. Heaps - Due 5pm Tuesday 6 March 2007
  5. Selection - Due 5pm Tuesday 20 March 2007

Over the first 4 of these 5 assignments, I want you to use at least 2 computer languages. For these assignments you may use Java, C, C++, Perl, Python, TCL, LISP, Scheme, SML, or anything else you clear with me. Extra credit can be garnered for using more languages. Being able to think multi-lingually is an important skill.

You should turn in your assignment using the turnin form on the assignment webpage, and you can resubmit your code multiple times. I will only look at the most recent version.

All the code you give to me should be freshly written for this class. Please don't recycle old code, instead write new stuff.

Breaking News!

The results of your midterm review of me are in. I'm generally very pleased! Some of the freeform comments are a bit more critical, and others are mutually contradictory (proof positive that you can't please all the people all the time). The freeform comments are transcribed below.

Class Speed 0 1 15 3 0
Too Slow12345Too Fast
Difficulty 0 1 13 4 1
Too Easy12345Too Hard
Interest Level 0 0 3 13 3
Bored12345Enraptured
More programming examples would help in advance. Grading is difficult to work with (all or nothing)
right != write
write
I really enjoy the code reviews.
You need better office hours.
I enjoy the CS history type lectures. Very refreshing and new.
I enjoy the code handbacks and exposure to many languages.
Learning lots. Not so sure what I think about the one-way code review thing.
Overall excellent, this is my favorite class. One comment: going through all the program takes a while, and after the first couple most new ones don't add much.
The first few assignments had data structures we've seen and are familiar with. The next ones I hope we get more implementation info on.
You might consider being a little more respectful in your interactions w/ students :)

Some danger signs there. And I'm really sorry about the person who feels I was/am disrespectful. Thank you very much for your feedback, I really do value it all a whole lot. See you next week, and good luck with assignment 3!

Syllabus

There is one class meeting a week, so in total there will be 10 lectures and 5 assignments.

  1. Hello. Class info and policies. How I will test your programs. Multiple language requirement. Assignment 1 gets assigned. What is good code? What do I mean by style and elegance?
  2. Answering questions about the first assignment. How to write good code and how to comment. Reminder about I/O specs. Review of circularly linked lists. Reminder keeping your code to be O(N).
  3. Review of first assignment. Assigning of the second assignment. A brief review of binary search trees.
  4. Answering questions about binary search trees and assignment 2. How to debug. How to use a debugger. DFS and BFS. Memory management and garbage collection. UNIX review session with many digressions about computer history.
  5. Review of second assignment. Assigning of the third assignment. Brief review of the relevant data structure. Doubly linked structure gotchas. Mid-term unofficial teacher evaluation.
  6. Comparing different languages on many axes.
  7. Review of third assignment. Assigning of the fourth assignment. Brief review of the relevant data structure.
  8. Software development methodologies compared.
  9. Review of fourth assignment. Assigning of the fifth assignment. Brief review of the relevant data structure.
  10. Last day of class. Answer questions. Wrap up. Course assessment.

Feedback

If you have any feedback about what is going well and what is going poorly for you, I would love to hear it! Without feedback, my teaching won't improve, and part of why I'm in graduate school is to become good at teaching computer science. Please come and talk to me, send me an email or IM, or if it is something that you are not comfortable signing your name to, you can tell me about it anonymously.

Policies

Late Work

If I haven't started grading the assignments yet, late work is accepted with no penalty. After that it is 10% for every day late. After the assignment has been handed back to everyone, you can't turn it in. All of this can be changed if you get sick or have some kind of emergency. But let me know before you fail to turn in the assignment. If you are wondering whether or not you can still turn it in, you should check this page. The current assignment looks like this, things with a past-due date that look like this can still be turned in as late work, and things that look like this have already been handed back, so you can't turn them in anymore. If you cannot see what I am talking about, enable CSS in your browser.

Grading

This course is a practicum, which is a fancy Latin way of saying that you will be doing more practice than theory. Thus, if your code doesn't compile, then the assignment is ungradeable and you get a 0.

After that initial hurdle, life gets a little more fair. The gist of the grade is 30% correct I/O, 30% correct timing, 20% code style and elegance (!) and 20% documentation. These are not hard numbers, but instead are guidelines for the grader (which is me). Misspellings in your comments and bad grammar in your documentation will drag down your grade, as will hardcoded "magic numbers" and the like. You should understand your algorithm and its implementation, and your code should reflect that understanding, with comments provided to hold the reader's hand through the tricky bits.

Cheating

You've made it this far. By now you either have enough character not to cheat, or you'll do it anyway. But just in case, let me say it right here: DON'T CHEAT. It is completely unacceptable academically and, on a more personal level, totally pisses me off. Anyone cheating will end up getting prosecuted as much as possible. Please don't make me do this. Everyone involved hates it. I could spell out a bunch of rules, but they would come down to: do your own work, and be ethical and honest. If you need any refinements on this, please come and see me, I will be happy to talk to you about the specifics of a particular situation. Err on the side of full disclosure - if you talked with someone about how to solve the problem, a little comment noting that fact is the right thing to do.

Fun

I just looked over this list and realized that it was a totally depressing list of rules. That is not what the class is about. It is about learning a bunch and having some fun doing it. The idea is that, by the end of the 313/323/315 combo, you will be able to abstract your problem into the domain of mathematics, solve it there, and then translate your solution into actual code. It is this last step that 323 emphasizes. This is a pretty fun thing to do, and I hope you will come to enjoy doing it as much as I do!

Questions?

Answers!


Valid CSS! Valid XHTML 1.1!