Course Overview

Course Description

Content
This course will build on your learning in 181 and transition from learning the basics of programming to thinking abstractly about solving programming problems. The focus of the course will be in two areas: data structures and algorithms. You will learn to think about the high-level concepts in representing data as well as designing efficient algorithms.

Structure
Learning is structured in three areas: lectures, labs, and personal practice/reading. Lectures will cover the theoretical material that you need to know and will evaluate your understanding of the content through exams. Labs will challenge you with programming problems, pushing you to really understand the data structures and algorithms. Personal practice will refine the basic understanding of labs and can transform you from an acceptable or good C++ coder into a masterful coder.

Objectives
After successfully completing this course, students should be able to:

Instructor Information

Biography
I'm a PhD candidate in the Computer and Information Sciences Department. My PhD specialization is natural language processing, which seeks to both understand and generate real text/speech/etc using computer software. I remember doing a few programming courses and an internship with Java in high school, then went on to get a bachelor's in computer science at The College of New Jersey, and came to UD for grad school from there.

Teaching Philosophy
Generally speaking, university courses should be difficult. They should push you just outside of your comfort zone and challenge you to learn more than you would by yourself.

When I think about running a class, I think of it as leading a team. And it's really a two-way process. If something doesn't make sense, let us know and we can try to work together to figure it out. Sophie and I are here to help you learn. Since there are so many students and we have so much to do, things are formalized, but really I think of it as mentoring, but with limited time, so that's why there are so many rules, like with grading and office hours.

TA Philosophy
The TA is there to give out, oversee, and grade labs. Sophie will help you if you're stuck, but she isn't there to do your work for you. She is there as a backup help in case you can't figure it out on your own (checking the assignment, checking the book, etc). Part of the point of this course is to get you to the point where you're a knowledgable, self-sufficient C++ coder, and we can't do that if people don't try to be self-sufficient.

Course Requirements

Textbook(s)

Lab assignments

Labs
Labs are designed so that an advanced student can complete them within the lab session, but generally you will have one week to finish them. They will be designed to apply the material covered in lecture.

Projects
Projects are just more involved labs. Typically the code solves a more interesting problem and will require much more code to solve. You'll generally have two weeks to complete projects.

Exams

There will be a midterm and final. I'll try to design them so that someone at the top of the class can finish in abotu half a class period.

Attendance & Participation

Attendance will be taken informally in lecture and lab. Similar story with participation -- all you have to do is get involved in the discussions.

Grading & Policies

Lab policies

How labs will work
You'll be given a new lab at the beginning of every lab section. The intention is that you will have the lab period plus a week, and then turn it in at the beginning of the next lab session. Because sometimes people need extra help, we will accept labs until the end of the lab session without penalty.

The one exception is the first lab, which will be due at the end of the first lab period (since it's a simple "remember how to code" sort of lab).

Late Policy
Labs are due by 12:30pm on the due date (the end of the lab period). Any labs turned in afterwards are late. The late penalty is 10% for the first day, 25% for the second day, and 50% for the third day. After the third day late (at 12:30pm), no late assignments will be accepted; they will be given no credit at all.

Submitting labs and lab grading
Labs will be distributed and submitted via Sakai. We will provide a rough grading rubric as time goes one, sometimes specific to certain assignments. In general, we expect your code to compile and run correctly. In addition, you will also be graded on how clean your code is. For reference, see the style guide to get a sense of what we want.

Lecture attendance and participation

The participation grade is there to make sure you're asking questions if you don't understand something. There aren't any dumb questions; usually if you don't understand something, there are at least two other people with the same question, so it's really in everyone's best interests for me to clarify the problem.

Academic Honesty

You will do all of your own work and none of anyone else's. I take cheating formally and file incidents with the Office of Judicial Affairs, which ensures that students caught cheating in multiple classes receive much more severe punishments.
Student Guide to University Policies: Code of Student Conduct

Grading

Grading breakdown
The course grade is broken down like so:

Final grade rule
The final course grade can't be more than one letter grade over your exam average.

Grade reviews
I'll admit that I'm new to Sakai. If it doesn't give you a suitable display of your grades, I'll do one or two grade reviews throughout the semester.

Grade disputes
If you think that we made a mistake or that you were given an unfair grade, contact the grader within a week of receiving the graded assignment/exam. If you aren't satisfied with the TA's response for labs/projects, you can talk to me after talking to them about it.

How to get an A
I can't say it much better than Terry Harvey: How to Get an "A" in CISC105. You're going to have to pay careful attention to detail, work hard, and ask questions.

Letters and what they mean

Grade
Percentage Required
What this letter means
A
93
mastery of course material; can create new data structures and analyze algorithms easily
A-
90
B+
87
B
83
average understanding, may need some help in a few areas, but can code anything with some help
B-
80
C+
77
C
73
below average understanding, needs a lot of help, but has the potential to handle larger projects with extensive effort and help
C-
70
D+
67
D
63
D-
60
F
below 60