CS 3100: Program Design and Implementation II
Prerequisites: CS 2100 or equivalent
Credits: 4 credit hours
Course Description
Building on foundations introduced in CS 2100, examines program design at increasing scales of complexity. Reviews abstraction, encapsulation, inheritance, and interfaces in statically-typed object-oriented languages. Presents a comparative approach to software design patterns and paradigms, including object-oriented and functional programming. Fosters a deeper understanding of the principles of program design, including interface design, test-driven development, graphical design notations, reusable software components, and open-source ecosystems. Illustrates the impact of design-time decisions on software correctness, including accessibility, changeability, performance, reusability and privacy. Students collaborate throughout the semester to design and implement a large software project.
Course Objectives
Upon successful completion of this course, students will be able to:
- Analyze software requirements and synthesize an object-oriented design utilizing open-source libraries
- Identify the stakeholders of a software module, along with their values and interests
- Utilize the vocabulary of design patterns to compare the impact of design decisions on non-functional requirements such as accessibility, changeability, performance, reusability and privacy
- Given a software module, identify its potential failure modes, the impact of those potential failures for all stakeholders, and propose modifications to the software design to mitigate those risks
- Design and implement an effective test suite for a piece of software
- Implement a software project in the Java programming language
- Work with another student on programming and design activities
Course Structure
The course consists of lectures, labs, assignments, and a semester-long project. The Schedule page contains the specific dates and topics for each lecture and lab. Loosely, the course is organized as follows:
- Module 1 (weeks 1 - 5): Design principles and patterns, Java fundamentals
- Module 2 (weeks 6 - 11): Development practices and user-centered design
- Module 3 (weeks 12 - 15): Design in the large: architecture and distributed systems
Module 1 and 2 are followed by exams, and Module 3 is followed by a cumulative final exam.
Students complete individual programming assignments that build into a larger project. Students will practice design skills by both writing new code and reviewing existing code. Assignments are structured such that, each week, students implement the week's requirements using the solution from the previous week as a starting point. Students complete a self-reflection on each assignment, examining the design decisions they made and the tradeoffs they considered. Early assignments will have students work individually to implement a small feature in the codebase. Later, students will form teams to work on a signficiantly larger feature in the same codebase.
Grading
The table below shows the grading breakdown for the course. (TBD)
If your final exam score is greater than the average of your two first exam scores, it will replace the average of your two first exam scores.
Detailed rubrics will be published with each assignment.
Labs are graded on the "good faith effort" standard: if you attend your lab section and make a submission that demonstrates your effort to complete the lab, you will receive full marks for it.
Grading grievances: If you have concerns regarding the grading of your work, please let us know right away by opening a regrade request in Pawtograder. All regrade requests must be submitted within 7 days from your receipt of the graded work. If your regrade request is closed and you feel that the response was not satisfactory, you may appeal to the instructor via email within 48 hours.
Textbooks and Resources
We do not recommend that you purchase any specific books for this class upfront. The course will refer to several texts, all of which are freely available online via Northeastern's library system.
Academic Integrity
Computer science, both academically and professionally, is a collaborative discipline. In any collaboration, however, all parties are expected to make their own contributions and to generously credit the contributions of others. In our class, therefore, collaboration on assignments is encouraged, but you as an individual are responsible for understanding all submitted material in the assignment. Always strive to do your best, give generous credit to others, start early, and seek help early from both your professors and classmates.
Specifically:
- You are responsible for any material you turn in. The professor reserves the right to ask you to verbally explain the reasoning behind any answer or code that you turn in and to modify your grade based on your answers. It is vitally important that you turn in work that you understand.
- Copying material from another person without their knowledge is not allowed.
- Additionally, sharing solutions in forums (e.g., posting to public questions, posting code online, etc) constitutes an academic integrity violation, as it may make it harder for other students to do work on their own, harming their own learning. The course staff expend a tremendous amount of effort to provide you with high-quality assignments, and in turn expect that you respect this effort and do not share solutions.
- Collaboration is not allowed on exams. Any sharing or receiving information about the content of exams is an academic integrity violation, and may result in failing the class.
We strongly recommend that you write all code yourself. Even if you discuss solutions, or approaches, with others, do the actual typing on your own! And avoid playing games or trying to find loopholes -- i.e., do not merely type what someone says, or type what you see on anothers screen. While we do not consider collaboration a violation, we still encourage following these recommendations-- relying on others for your solutions may result in you not learning the material, and in this class, not learning the material will result in not being able to pass the exams. Even with perfect homework scores, failing to pass sufficient exam topics will result in a failing grade in the course, so take homework for what it is intended: extensive opportunity to practice the skills we are teaching, paired with high quality feedback about the solution you came up with.
The minimum penalty for an academic integrity violation is a zero on the assignment and a report to the Office of Student Conduct and Conflict Resolution (OSCCR). Penalties are increased if there are aggravating factors, such as stealing another student's work, or lying about cheating. Also, see the Official University Academic Integrity Policy.
If you have a question about what is considered a violation of this policy, please ask an instructor.
If you feel that cheating is your only option, please ask for help.
Artificial Intelligence
AI coding assistants like Cursor, Windsurf, and Copilot should not be used in this course. We believe that using an AI assistant is an important skill that should be covered after the basics (which is why there is a different policy in this class compared to CS 2000 and CS 2100). Until you have the ability to design, understand, and review code, using an AI assistant amounts to wandering around in the dark, with no ability to determine if you are getting closer to what you want. (Using these tools to get decent grades while learning nothing is pretty clearly shooting yourself in the foot: you are in college to learn; if you end up unable to do anything but prompt engineer, you will have essentially no skills, given these models are intentionally rendering whatever "skill" underlying prompt engineering obselete in every generation).
The same is true of asking questions of chat models like ChatGPT, Claude, or Gemini. Putting in assignment instructions into such a model and getting out code or test cases amounts to getting the model to do the thinking for you -- and as a result, you will not learn. "Only look"ing at AI-generated solutions "before writing your own" undermines the learning just the same, as you will not be learning to actually solve problems, you will just be copying (and, importantly, never developing the ability to recognize when the AI generated solution isn't what you want).
Emerging research is beginning to show that substituting practice on fundamental skills by delegating that practice to LLMs significantly decreases learning. Whilst using an LLM might reduce the immediate strain of learning something new, it can also diminish the development of critical thinking skills by decreasing engagement and impeding independent problem-solving. Moreover, even the benefits of using LLMs for experienced developers have been questioned. LLMs can be useful useful once you have gained competence in program design and are able to break down a problem and specify it precisely—which is what you should have learned in CS 2100, and will be practicing further in this class.
Each assignment will have a clear indicator at the top indicating the suggested usage of AI assistance, ranging from "Not allowed" to "Required." These suggestions are based on the learning objectives of the assignment.
Part of the reason for these being guidelines, rather than academic integrity policies, is that some interaction with LLMs is now unavoidable -- using a search engine now will give you an AI generated overview, and similar interactions with models (trying to understand concepts) is not necessarily discouraged, though we would always encourage you to bring larger questions to our course staff, who will likely be able to give you better answers, more suited to your background, to our curriculum, etc. Finally, if you do use LLMs for search, you are responsible for validating any information you find.
Make sure to refer to sources of ground truth for reliable information such as the official language documentation, our course textbook, course staff, and the course website. Reading documentation can be challenging at first, but it is an important skill to develop in any technical field. Learning to navigate technical documents helps you develop a precise understanding of how something works—which is a valuable transferable skill that you can use to gain competence with new tools and help you solve problems independently.
Use of Artificial Intelligence by the Course Staff
Some course materials have been developed with the assistance of AI tools. All such content has been reviewed and edited by the instructor for accuracy. The following is a non-exhaustive list of methods used to assist in the development of course materials:
- To expand the learning objectives and summary of some lectures into draft lecture notes
- To draft the project requirements, instructions, reference solutions, buggy solutions, and initial rubrics
- To summarize course content into flashcards
- To create OctoPaws, the PDI/Pawtograder logo
Using AI tools to assist in these tasks has helped us to produce more accurate and engaging course materials, and to focus on the most important aspects of the course that can not be synthesized by an LLM.
Contact
We will be using Pawtograder for discussion and Q&A. We strongly encourage you to post your questions with the "full-course" visibility, so that other students can benefit from the discussion. If you have a private matter, you can post this on Pawtograder with the "staff only" visibility. If all else fails, you can directly email your instructor.
Inclusive Environment
To create and preserve a classroom atmosphere that optimizes teaching and learning, all participants share a responsibility in creating a civil and non-disruptive forum for the discussion of ideas. Students are expected to conduct themselves at all times in a manner that does not disrupt teaching or learning. Your comments to others should be constructive and free from harassing statements. You are encouraged to disagree with other students and the instructor, but such disagreements need to respectful and be based upon facts and documentation (rather than prejudices and personalities). The instructor reserves the right to interrupt conversations that deviate from these expectations. Repeated unprofessional or disrespectful conduct may result in a lower grade or more severe consequences. Part of the learning process in this course is respectful engagement of ideas with others. We believe that diversity and inclusiveness are essential to excellence in academic discourse and innovation. In this class, the perspective of people of all races, ethnicities, gender expressions and gender identities, religions, sexual orientations, disabilities, socioeconomic backgrounds, and nationalities will be respected and viewed as a resource and benefit throughout the semester. Suggestions to further diversify class materials and assignments are encouraged. If any course meetings conflict with your religious events, please do not hesitate to reach out to make alternative arrangements.
Name and Pronoun Usage
As this course includes some discussion, it is vitally important for us to create an educational environment of inclusion and mutual respect. This includes the ability for all students to have their chosen gender pronoun(s) and chosen name affirmed. If the class roster does not align with your name and/or pronouns, please inform us of the necessary changes.
Accommodations
If you have a documented disability, please register with Disability Access Services to get the accommodations that will help you succeed. Please do this even if you are unsure whether you will need accommodations, since there may be a delay if you decide you need them later. Please do not wait until it has seriously impacted your work, as accommodations are not retroactive. See additional information for Oakland students.
Policy on Recording
Massachusetts and California laws prohibit students from recording classes without the consent of all participants, unless a disability accommodation is in place. We encourage you to seek accommodations to which you are legally entitled.
University Resources
Title IX
Title IX of the Education Amendments of 1972 protects individuals from sex or gender-based discrimination, including discrimination based on gender-identity, in educational programs and activities that receive federal financial assistance.
Northeastern’s Title IX Policy prohibits Prohibited Offenses, which are defined as sexual harassment, sexual assault, relationship or domestic violence, and stalking. The Title IX Policy applies to the entire community, including male, female, transgender students, faculty and staff.
If you or someone you know has been a survivor of a Prohibited Offense, confidential support and guidance can be found through University Health and Counseling Services and the Center for Spiritual Dialogue and Service clergy members. By law, those employees are not required to report allegations of sex or gender-based discrimination to the University.
Alleged violations can be reported non-confidentially to the Title IX Coordinator within The Office for Gender Equity and Compliance at titleix@northeastern.edu and/or through NUPD. Reporting Prohibited Offenses to NUPD does NOT commit the victim/affected party to future legal action.
Faculty members are considered “responsible employees” at Northeastern University, meaning they are required to report all allegations of sex or gender-based discrimination to the Title IX Coordinator.
In case of an emergency, please call 911.
Please visit https://www.northeastern.edu/titleix for a complete list of reporting options and resources both on- and off-campus.
International Tutoring Center
The International Tutoring Center (ITC) provides current Northeastern University international and non-native English-speaking students with free, comprehensive English language and academic support. The ITC includes student-centered one-on-one tutoring sessions and workshops on reading, writing, and language and culture. For more on tutoring and workshops, see https://cps.northeastern.edu/academic-resources/global-student-success/international-tutoring.
WeCare
WeCare is a program operated through the Office for Student Affairs. The mission is to assist students experiencing unexpected challenges to maintaining their academic progress. WeCare works with students to coordinate among university offices and to offer appropriate on and off campus referrals to support successfully resolving the issue. WeCare also provides information to faculty and staff to identify Northeastern resources and policies to help students succeed.
For more information see https://studentlife.northeastern.edu/we-care/. Call 617.373.4384 or email wecare@northeastern.edu.
Libraries
Students can access research resources at the F.W. Olin library (Oakland) and through the Snell Library (Boston and online). The Snell Library collaborates with both the First-Year Writing and Advanced Writing in the Disciplines programs to support students’ information literacy. Online research tutorials can be found here: https://subjectguides.lib.neu.edu/researchtutorials/getstarted
Global Learner Support
Northeastern University's Global Learner Support (GLS) offers "language, cultural, and academic support while promoting the development of intercultural competence and global understanding." They offer tutoring, workshops, and much more. Visit https://gls.northeastern.edu/ to learn more.