- Lectures
-
Section A: TR 08:15 - 09:30am
Section B: TR 09:45 - 11:00am
75 Shannon Street room 224 - Labs
-
Section Y: F 08:40 - 09:30am
Section Z: F 09:45 - 10:35am
75 Shannon Street room 224 - Instructor
-
Philip Caplan
- Please call me Philip. My pronouns are he/him/his.
-
75 Shannon Street,
room 219
- (802) 243-5707
- pcaplan@middlebury.edu
- Office Hours:
-
- Mondays: 9:30am - 10:30am
- Tuesdays: 11am - 11:30am
- Thursdays: 1:30pm - 3:30pm
- Fridays: 2pm - 2:30pm
Description
In this course we will study the ideas and structures helpful in
designing algorithms and writing programs for solving large, complex
problems. The Java
programming language and
object-oriented paradigm are introduced in the context of important
abstract data types (ADTs) such as stacks, queues, trees, and
graphs. We will study efficient implementations of these ADTs, and
learn classic algorithms to manipulate these structures for tasks
such as sorting and searching. Prior programming experience is
expected, but prior familiarity with the
Java
programming language is not assumed.
Objectives
By the end of the course, you will be able to:
- Write programs that efficiently implement and use data structures such as arrays, maps, linked lists, stacks, queues, trees and graphs.
-
Design, develop, debug and test a
Java
program that uses appropriate standard libraries to efficiently solve a problem. - Evaluate the time and space complexity of algorithms using empirical and mathematical analysis.
Coursework and Grading
-
Labs: 10 x 1% = 10%
There will be 10 labs during the scheduled Friday lab periods. Lab work is due the following Tuesday. You are expected to attend the labs, which will often be completed in pairs. If you are unable to attend (e.g. illness or scheduled event), please email me before the lab period. -
Homeworks: 10 x 4% = 40%
Homeworks will be released on Sundays and will be due on Fridays at 11:59pm. -
Midterm: 15%
There will be one take-home, open book midterm during the 7th week of classes which will have a written and programming component. The Midterm will be due on Friday 10/25 at 11:59pm. -
Final Exam: 25%
The Final Exam will be scheduled during the Final Exam week. Similar to the Midterm, it will have a written and programming component. -
Exit Tickets: 5%
After every Tuesday and Thursday class, you will submit an Exit Ticket (1 - 2 sentences) describing something new that was covered that day, which will be due at the end of the day (11:59pm). -
Participation: 5%
The participation grade will be self-evaluated at the end of the semester. You should consider whether you regularly attended class and were engaged, and collaborated with your peers during the in-class and lab exercises. Other (optional) factors may include asking questions during class, regularly meeting with a study group, frequently stopping by office hours, responding to peer questions on EdStem, etc.
Late Policy
The following late policy applies to all types of assignments (homeworks, labs, exit tickets):
- 10% deduction if submitted within 24 hours of the due date.
- 25% deduction if submitted within 48 hours of the due date.
- 50% deduction if submitted within 1 week of the due date.
- No credit after 1 week.
Homework Late Passes: For homeworks (only), you can submit two homeworks 24 hours late without penalty. Beyond this 24-hour period, the late policy described above will apply. For example, if someone submits a homework within 48 hours and uses one of their 24-hour late passes, then only 10% will be deducted. Late passes will be tracked in the Homework Late Passes assignment on Canvas. Only 1 late pass can be used per homework.
If you miss class (illness or scheduled event), please submit the exit ticket within 24 hours of the due date (if that's not possible, please let me know).
Extensions for extenuating circumstances such as medical emergencies (in which no late penalty will apply) must be requested before the due date.
Resources
Textbooks
Lectures will reference materials from
Java
Structures ($\sqrt{7}$ Edition)
by Duane Bailey (2007). The Reading column in the
calendar corresponds to the sections in
Bailey's Java
Structures.
The following open-access textbooks may also be helpful:
-
Open Data Structures (in
Java
) by Pat Morin. - Think Java (2nd Edition) by Allen B. Downey and Chris Mayfield.
-
The
Java
Tutorials by Oracle.
VS Code
We will use Visual Studio (VS) Code to do all of our development work in this course. Please see the Setup page for more information about installing VS Code along with certain extensions.
Gradescope
Labs and Homeworks will be submitted on Gradescope. Gradescope will be used to automatically grade your assignments while also checking the style of your code. We will also discuss how to run these tests locally on your computer.
Ed Discussion
We will communicate using the Ed Discussion board - please join here. Please be respectful of your peers on the discussion board - it's sometimes difficult to convey humor in a text message, so please be mindful of how your messages might be interpreted. Any questions you have about the course, or requests for help with bugs should be asked in the appropriate category - there is a very good chance someone else has a similar question or has encountered a similar bug. I will not respond to questions about the course material or bugs in email (email should only be used for personal matters). I will check our Ed Discussion board during regular working hours (M-F 9am-5pm).
Please bring a computer to every class in order to work on the in-class exercises and labs. Please see the policy below about borrowing a laptop from the CS department.
Expectations
How to Approach this Course
The most important thing you should prioritize is attending class. Class time is when we will introduce theoretical and practical (programming) concepts, so attendance is critical.
The next thing I would suggest is to commit yourself to the debugging process. If something doesn't work, try to figure out why. Learning how to debug is one of the most important skills you can develop. Start the homeworks early so you leave plenty of time to catch bugs.
As for the textbook readings (see the calendar): skim them. The readings mostly cover everything we will study, but a lot of what we will do is practical, which is best learned by doing. The slides posted after class should have all the information you need, so be sure to review those. You may want to read the textbook sections in greater detail when we cover theoretical concepts (e.g. complexity).
Environment
My goal is to create an inclusive and welcoming learning experience for everyone. I try to use language, examples and exercises that promote a sense of belonging to the field of computer science, but please let me know if there is anything I can do to improve.
Furthermore, creating such an environment is a team effort, so I expect you to join me in fostering an inclusive learning experience for everyone. Every member of the class is expected to show respect for every other member so that everyone can learn in this space. If you experience or witness any behavior that opposes this idea, it would be helpful for me to know so that I can address it. If you feel comfortable, you can report such incidents in the following ways:
- talk to or email me,
- report the incident to our anonymous CS departmental climate feedback form,
- fill out a Bias Incident Report which goes to the Middlebury Community Bias Response Team.
You belong in this class and in the computer science department. Thank you for being here and for contributing to this course.
Policies
Academic Accommodations
Students with documented disabilities who believe that they may need accommodations in this class are encouraged to contact me as early in the semester as possible to ensure that such accommodations are implemented in a timely fashion. Assistance is available to eligible students through Student Accessibility Services. Please contact the ADA Coordinator Jodi Litchfield, who can be reached at litchfie@middlebury.edu or 802-443-5936 for more information. All discussions will remain confidential.
Title IX
As faculty members and members of the Middlebury community, we are committed to the safety of all students. If we learn of any potential violation of our Policy Against Sexual Misconduct, Domestic and Dating Violence and Misconduct, and Stalking ('SMDVS Policy') or our Anti-Harassment/Discrimination Policy, we are required to notify a member of Middlebury's Title IX team. This ensures that students receive timely care and information about their rights, their choices, and available resources for support. Students who would like to speak with a confidential resource who does not have an obligation to report can contact MiddSafe, the Patron Center for Health and Wellness, WomenSafe (serving individuals of all gender identities), or campus and local clergy and medical professionals. For more information, see go/sexualviolenceinfo.
Borrowing a Laptop
If you ever find yourself temporarily in need of a laptop, the Computer Science department has 10 rotating Dell laptops available to our students. These come pre-installed with software for most of the courses in the major. They are available to be loaned out short-term or long-term based on your need (as determined by you). Feel free to ask me ahead of time if you think you need one for just a class period, or you can send an e-mail to Smith Gakuya: sgakuya [at] middlebury.edu directly. On Long-Term Use: College policy has changed recently to include the expectation that every student have a laptop available. The college provides laptops to those who need them where “need” is based on Student Financial Services calculations. If you anticipate needing a laptop for the whole term, we encourage you to inquire with Student Financial Services and the library first due to our smaller pool of equipment. However, our department commits to meeting the needs of every student, so do not be afraid to reach out if you believe you need one of our laptops for any length of time.
Honor Code
You are expected to maintain the highest level of academic integrity in this course. All assignments should be purely the work of you (for homeworks, exams) or your group (for labs). However, collaboration is not only allowed, but encouraged. You are certainly allowed to map out ideas with others on paper or whiteboards. For homeworks, it's okay to briefly look at each other's code (as long as you are not directly copying it), but you should never write code for someone else, exchange code in email or text messages, or let someone else write code for you. You should never look at someone else's work or share your work (code or written) for exams.
Generative AI
The use of generative AI tools (such as ChatGPT, GitHub Copilot or replit's Ghostwriter, to name a few) is only allowed to assist in your own learning of theoretical concepts and may not be used in a direct manner to complete the assignments in this course. In other words, you may not use a generative AI tool to write any code for you. If you do ask one of these tools a theoretical question while working on the labs or homeworks, please include the following at the top of your code or written work: (1) cite which tool you used, (2) the prompt you entered and (3) the response you received. The use of generative AI tools is not allowed (in any way) for exams.