EN.601.226kai@cs.jhu.edu)madooei@jhu.edu)This course covers the design and implementation of fundamental data structures, including arrays, stacks, queues, linked lists, binary trees, heaps, balanced trees, hash tables, and graphs. Other topics include basic algorithms (sorting, balancing search trees, graph search algorithms), asymptotic analysis, and programming in Java (object-oriented programming, generics, unit testing). Coursework involves both written exams and programming assignments.
Prerequisites [official]: C+ or better in
EN.600.120OREN.601.220OREN.600.107OREN.601.107OREN.500.112OR (EN.500.113ANDEN.500.132) OR (EN.500.114ANDEN.500.132) OR by permission of instructor.
Prerequisites [in plain English]: Object-Oriented programming in Java!
Upon successfully completing this course, you should be able to:
This course will address the following Computer Science BS Program Student Outcomes:
The lecture meetings will be held in person at Homewood Campus.
All students are expected to attend all course meetings and actively participate in all class activities.
Meetings
Lectures will be not be recorded.
There are detailed lecture notes posted before each lecture on the course homepage.
The notes should be treated as slides/handouts, worksheets, and (assigned pre/post) readings rolled up in a single, organized package.
We use various tools and technologies in this course. For example, we use the Java Development Toolkit (JDK) and IntelliJ for coding. The logistics are described in a separate document and linked to on the course homepage.
There will be four quizzes, a midterm, and a final exam. All these are in-person on the Homewood campus. Please refer to the schedule of topics for dates.
Here is a rough breakdown of the weight of each exam (subject to change at the instructor’s discretion):
Details about the topic coverage of each exam will be posted on the course discussion board closer to the date of each exam.
If you have special accommodations from SDS, you must schedule with them to take the exam at their location. It is your responsibility to do this in a timely fashion.
There will be six coding assignments, each of which will be posted on the course homepage. You will submit your work through Gradescope. Please check the schedule for due dates.
Below is a list of homework assignments with their topics and tentative points that are subject to change at the instructor’s discretion:
Throughout the course, there will be six homework assignments designed to provide a deeper exploration of the topics covered in class. These assignments will often require you to integrate multiple concepts, providing a more comprehensive understanding of the subject. They are a significant component of the course, and consistent performance on them is crucial for achieving a good final grade.
We follow (a modified version of) “Specification Grading” (Nelson, 2015) to evaluate coursework. A specification, or simply “spec,” is a requirement (criteria, expectation) about your submitted coursework. Here is an example of a specification: “The AVLTreeMap correctly applies double rotations after removal.”
Each specification is evaluated on a pass/fail basis (rather than using partial credit). Thus, your submitted coursework either meets a specification or not.
For each assignment, we provide a rubric, a collection of specifications. The rubric will be provided ahead of time, together with each homework description, to set clear expectations.
Specification grading, like many innovative assessment approaches, incorporates a retake system. We embrace this “second chance for redemption” through AutoTest. You can submit your code to Gradescope as often as you wish—from the homework’s release to its due date—to see AutoTest results. (However, don’t use AutoTest passively; relying on it to find errors is not an active development approach.) AutoTest runs a suite of tests against your submission. If all tests pass, it can boost your confidence in your submission’s correctness. (Though this shouldn’t be taken as definitive proof.) Conversely, if any tests fail, it signals an error in your work. (We don’t show you the tests, but the failures can hint at where the error might be.)
Course grades will be based on assignments (programming homework), and exams (four quizzes, a midterm, and a final). Each exam and homework assignment will be assigned a point value; the overall grade will be computed as your total points earned divided by the total achievable points.
We will weight the components as follows: 60% homework, 40% exams.
Letter grades for the course will be subject to the instructor’s evaluation of your overall class performance, generally based on this standard scale:
The cutoff for assigning -/+ to each grade letter is further subject to the instructor’s evaluation of your overall class performance.
You must participate in all graded components. For example, you cannot skip exams and still pass the course based solely on the homework assignments. You must get a passing grade (at least 60%) on exams (quizzes, midterm, and the final, combined), and on assignments (combined). The instructor reserves the right to penalize or even fail you if you do not meet these requirements.
The strength of the university depends on academic and personal integrity. In this course, you must be honest and truthful, abiding by the Computer Science Academic Integrity Policy and Homewood Undergraduate Ethics Policy; please carefully study these resources. In particular, consider the following examples of violations of Academic Integrity:
To clarify, any work submitted to this course must be the student’s own, original work. We understand that “another individual” in the Computer Science Academic Integrity Policy and Homewood Undergraduate Ethics Policy includes artificial intelligence (AI) assistants such as ChatGPT and GitHub Copilot. Therefore, use of such AI assistants is considered a form of unauthorized collaboration and is not allowed in this course. To ensure the integrity of the academic work submitted, we will not accept any assignments that have been written with the assistance of AI.
Please report any violations you witness to your instructor.
We know things can get rough, and we are here to help and support you.
We use a booking software to manage office hours and another one for online discussion. Information about how to use these software will be posted to the course homepage.
You can ask questions and seek help by posting to our discussion board or reaching out directly to teaching staff, on the discussion board, or during office hours.
In addition, every student starts the term with 3 “clue” (💡, 💡, 💡), 3 “debugging” tokens (🐛, 🐛, 🐛), and 5 “late day” (😴, 😴, 😴, 😴, 😴) tokens!
Please note that you are responsible for tracking your token usage. We will track your budget too.
You can use a clue token to get a hint when you are stuck on solving a problem. Here are a few examples of what clue tokens can be used for:
Please note:
Each debugging token gives you a 30-minutes one-on-one debugging session with a teaching staff member. During a debugging session, teaching staff will assist you in debugging your code.
Please note:
You can spend a late day token to extend a homework deadline by 24 hours!
Please inform the instructor as early in the semester as possible about your intention of using (more than two) late days for specific homework.
We are committed to creating a classroom environment that values the diversity of experiences and perspectives that all students bring. Everyone here has the right to be treated with dignity and respect. We believe fostering an inclusive climate is important because research and our experience show that students who interact with peers who are different from themselves learn new things and experience tangible educational outcomes. Please join us in creating a welcoming and vibrant classroom climate. Note that you should expect to be challenged intellectually by your instructor, the TAs, and your peers, and at times this may feel uncomfortable. Indeed, it can be helpful to be pushed sometimes in order to learn and grow. But at no time in this learning process should someone be singled out or treated unequally on the basis of any seen or unseen part of their identity.
If you ever have concerns in this course about harassment, discrimination, or any unequal treatment, or if you seek accommodations or resources, we invite you to share directly with your instructor or the TAs. We promise to take your communication seriously and to seek mutually acceptable resolutions and accommodations. Reporting will never impact your course grade. You may also share concerns with the Department Head (Randal Burns, randal@cs.jhu.edu), the Director of Undergraduate Studies (Joanne Selinski, joanne@cs.jhu.edu), the Assistant Dean for Diversity and Inclusion (Darlene Saporu, dsaporu@jhu.edu), or the Office of Institutional Equity (oie@jhu.edu). In handling reports, people will protect your privacy as much as possible, but faculty and staff are required to officially report information for some cases (e.g., sexual harassment).
Students with disabilities (including those with psychological conditions, medical conditions, and temporary disabilities) can request accommodations for this course by providing an Accommodation Letter issued by Student Disability Services (SDS). Please request accommodations for this course as early as possible to provide time for effective communication and arrangements.
For further information or to start the process of requesting accommodations, please contact Student Disability Services at Homewood Campus, Shaffer Hall #101, call: 410-516-4720 and email: studentdisabilityservices@jhu.edu or visit the website.
The dates for “Assignments” and “Exams” are posted on the course schedule, which can be found on the course homepage. Please note that these dates are subject to change.