The primary focus of this class is on gaining a strong theoretical and conceptual understanding of common data structures and algorithms as well as how they can be practically applied within larger programming projects.
Specific topics we will cover include:
This course is also designed to have a practical component to help you gain basic familiarity with techniques used within industry. In particular, you'll be asked to:
And finally, this course also emphasizes the importance of making and justifying effective design decision. All of the above skills are those that are traditionally a part of any technical interview, thus this course is typically considered an important pre-requisite when applying for development positions.
Here is how your grade will be calculated:
Grading policies for written assignments: Your written work will be graded based on correctness as well as the quality of the justifications and explanations you provide.
Grading policies for partner projects: Your code will be graded based on the following criteria:
Your projects will be graded automatically by tests the staff runs on your code. This means that occassionally small errors are disproportionately penalized. If you feel you incorrectly lost points on an assignment, please send an email to Kasey with the following details:
There will be 2 timed exams in this course: a midterm and a final exam. These will be written exams and you will be allowed a single sheet of 8.5"x11" paper for notes.
Make-up exams will only be given in case of a serious emergency. If you miss an exam, even if you are sick or injured, you must contact Kasey BEFORE the exam (or arrange for someone to do so). You must show evidence that you are physically unable to take the exam. No make-ups will be granted for personal reasons such a travel or conflicting schedules. No accommodations will be made for students who arrive late to exams. The only accommodations for exams that will be made are those that correspond to the University's official accessibility guidelines, which must be reflected in your student account.
There are two types of homework assignments: solo written assignments and partner programming projects. Homework due dates will be Fridays before 11:59pm to the Canvas turn in system.
Individual Written assignments
There will be 2 written assignments throughout the quarter, each span 1 week in length. These MUST be completed INDIVIDUALLY. See the section on academic honesty and collaboration below.
There will be 4 pair programming projects throughout the quarter. These are meant to be completed in pairs, though you may work on them individually if you so choose. Projects generally span multiple weeks with a checkpoint due once a week. These checkpoints are due at the normal Friday night time.
If you lose points during a checkpoint, you may earn back half the points you lost if you fix and resubmit your work for the next project deadline. For example, suppose you earned 60% for your project 1, part 1 submission. If you fix and submit your part 1 code by the part 2 submission deadline, your part 1 score will be retroactively adjusted to 80%.
Note that your final project submission will not be eligible for this regrade policy.
Each student receives
3 6 late days that may be used for written
assignments, checkpoints, and project due dates. If a team submits a project late, both students
must use a late day. If you (or your partner) have no late days left, you will be deducted 20%
of your overall score per each day late.
We will not accept assignments
two three days after the deadline,
whether you use late days or not. Late days will be applied automatically, except for code
submissions on GitLab, which will require filling in a late-day-usage form. Leftover late days
will have zero impact on your grade.
If unusual circumstances truly beyond your control prevent you from submitting an assignment or attending an exam on time, you should discuss this with the course staff ASAP. If you contact us well in advance of the deadline, we may be able to show more flexibility in some cases.
We take academic honesty very seriously. Cheating not only deprives you of practice and understanding, but is also unfair to the rest of your class. Any assignments that has copied or paraphrased content will receive a zero.
You are still, however, encouraged to discuss assignments and concepts on a high level with your classmates so long as you:
Naturally, when working on a partner projects, you're free to share your code and collaborate in full detail with your partner. However, you should not share your code with other groups.
If you have a specific question about your code or written work, the only person you may show your work is a member of the course staff.
Cheating: If you do not follow these rules, you will be considered to have cheated. Cheating is a very serious offense. If you are caught cheating, you can expect a failing grade and initiation of a cheating case in the University system. Cheating is an insult to other students, to the instructor, and to yourself. If you feel that you are having a problem with the material, or do not have time to finish an assignment, or have any number of other reasons to cheat, we have many mechanisms for getting help. Copying the work of others is not the solution.
For more details, see this Academic Misconduct page. If you're not sure if something constitutes cheating, send the instructor an email describing the situation.
There are two main ways of getting help:
We use Google Group as an online Q&A forum where you may ask questions (both publically and privately). If you have a question, this should be the first place to check & it's often the case that other students may have had the same question.
We also strongly recommend you monitor new questions asked on Google Group semi-regularly: seeing questions other students ask can often be surprisingly enlightening.
Please visit office hours! Answering questions during office hours is often one of the best parts of teaching, so please do us a favor and make use of them.
One additional resource to keep in mind is the resources page on the class website. This page contains links to a variety of guides, tips, and tricks on material we don't have time to fully cover during lecture or section. The resources there might not always be relevant, but they're checking from time to time.
We will offer extra credit from time to time. Completing extra credit will NOT have a major impact on your grade: we will keep track of extra credit independently of your homework and use them to bump up borderline grades at the end of the quarter. This means completing extra credit will not be an effective way of making up for missed/incomplete assignments or boosting your grade.
Rather, the purpose of extra credit is to give you opportunities to engage more deeply in material you personally find interesting or to try implementing more challenging material. They're meant to be fun!
We will use Java 8 on all programming assignments. (Our assignments should also theoretically be compatible with Java 9, but Java 9 is very new, so use it at your own risk).
Our officially supported IDE is IntelliJ. You may use other IDEs like Eclipse or Netbeans if you wish, though the course staff may not necessarily be able to help you with any setup-related questions you may have.
However, you MAY NOT USE jGrasp. (Well, you can try, but it's very likely that jGrasp will not be able to correctly load or run our class projects.)
The textbook for this course is Data Structures and Algorithm Analysis in Java (3rd edition) by Mark A. Weiss. This textbook is OPTIONAL: you should not need it to succeed in this course.
Many of the materials posted here and used in this course have been shared and refined by many other instructors and TAs in previous offerings of CSE 373, CSE 332, and CSE 326. This version of the course was particularly influenced by previous offerings by Shrirang Mare, Michael Lee, Riley Porter, Ruth Anderson, Dan Grossman, Kevin Quinn, Hunter Zahn, Evan McCarty, and Adam Blank.