Course Syllabus
Learning Outcomes
This course is intended for students who want to transition from being able to program in Java to being able to write "good" code that is correct, efficient, and easy to understand and change.
After completing this course, you will be able to:
- Implement complex software applications in Java using object-oriented techniques
- Understand and analyze the behavior of modern Java code
- Assess and improve the quality of existing software
- Apply best-practice principles and patterns to design and implement a high quality software system
- Employ modern software testing techniques to develop a comprehensive set of test cases
- Use generative AI tools to assess and improve the quality of code
The only prerequisite for this course is COMS W1004 or proficiency in Java; a course in data structures is not required but is strongly recommended.
Topics
Course lectures and assignments are expected to cover the following topics:
- Writing and understanding modern Java
- OOP principles and implementation
- Analyzing behavior of code: correctness, efficiency, security
- Java Collections Framework Lists, Sets, and Maps
- Lambda expressions
- Java Streams API
- Software testing
- Testing concepts and goals
- Writing test cases with JUnit
- Software design “in the small”: methods and classes
- Code readability and understandability
- Code documentation
- Java Generics
- Design patterns: Singleton, Iterator
- Defensive programming and exceptions
- Software design “in the large”: relationships between classes
- UML class diagrams
- Software design principles
- Software architecture
- Design patterns: Factory Method, Strategy, Observer
Instruction Staff
Instructor: Prof. Chris Murphy, cmurphy@cs.columbia.edu
Teaching Assistants:
Class Meetings
Class meetings will be held on Tuesdays and Thursdays from 2:40-3:55pm; the tentative location is Mudd 833.
When possible, lectures will be recorded and notes will be posted in Courseworks. This is not a replacement for attending or being engaged in class, but is intended as a service to students who have legitimate reasons for being unable to make it to lecture, and to provide a resource for students during preparation for exams.
Course Materials
There is no textbook for this course. Background readings and supporting materials will be made available via links on Courseworks.
Students in this course are expected to have regular access to a computer on which they are able to develop and run applications using Java 19 or later. IntelliJ IDEA. Community Edition is the recommended IDE for this course, but IDEs such as VS Code, Eclipse, etc. should be fine as well.
Assessment
Your grade in the course will be based on the following:
- Homework assignments: there will be six assignments in which you will design, implement, test, analyze, and/or modify Java programs. It is expected that you will work on these assignments alone; however, in certain cases you will be permitted to work with another student and/or to use generative AI tools. Some assignments may also ask you to submit written responses based on theories and concepts.
- Project: you will work in a group of 2-3 to develop, test, analyze, and document a large Java program in which you will apply concepts learned over the course of the semester
- Quizzes: there will be four in-class quizzes. These will be closed-notes, no electronic devices, etc.
- There is no Final Exam in this course.
The mapping of numerical grades to letter grades will be determined later in the semester, but the general guideline is that grades in the 90s will be in the A-/A/A+ range, grades in the 80s will be in the B-/B/B+ range, etc. There is not expected to be a substantial curve.
Students must achieve a weighted average of at least 50% in order to earn a passing grade.
Policies and Expectations
The policies described in this section are put in place in an effort to help the course proceed smoothly and fairly, and to create an environment where all students feel welcome and can get the most out of the course as possible. Please reach out to the Instructor if you have any questions or concerns about these policies, or if there are other policies that would better support you this semester.
Course Community Guidelines
Diversity, inclusion, and a mutual sense of belonging are all core values of this course. All participants in this course must be treated with respect by other members of the Columbia Computer Science community. We must all strive, students and faculty both, to never make anyone feel unwelcome or unsafe in any way. Violations of these principles are viewed as unacceptable, and will be taken very seriously.
Class meetings, office hours, group working time, help sessions, and online collaborative platforms (Ed, GitHub, etc.) should be spaces where everyone feels welcome and included. In order to foster a welcoming environment, students of this course are expected to:
- exercise consideration and respect in their speech and actions;
- attempt collaboration and consideration, including listening to opposing perspectives and authentically and respectfully raising concerns, before conflict;
- refrain from demeaning, discriminatory, or harassing behavior and speech.
It is important that we refer to everyone by the name and pronouns that they use. You are invited but not required to share your preferred pronouns, and all students are asked to commit to being attentive to and using each other’s pronouns and, in situations of uncertainty, gender-neutral language. If at any time during the course you would like to change the name or the pronouns that we use for you in class, please contact the Instructor. If anyone is inadvertently misgendered, misnamed, or has their name mispronounced, the suggested etiquette is to correct the error politely and move on.
If you ever feel discriminated against or otherwise excluded, no matter how minor the offense, you are encouraged to reach out to your instructor or to the Office of Institutional Equity: https://institutionalequity.columbia.edu/
Assignment Deadlines and Extensions
Deadlines are put in place so that you have a goal to work toward, so that you know when you’re “done,” and to help the Instructor keep the class moving forward and keep everyone in sync.
However, it is understandable that sometimes life gets in the way and that you need more time in order to complete a task to a level of quality that you are happy with. As such, all students are granted six "late days" to use on individual homework assignments: these are "no questions asked" and you do not need to request them or notify the Instructor that you are using them. However, you may only use a maximum of three late days on any single assignment.
If you need additional time beyond the allocated late days, please request an extension in advance so that we can set a new deadline. Reasonable requests will almost always be granted and you do not need to provide a reason, but you must notify the Instructor in advance.
Please note that consistent, repeated requests for additional extensions and/or requests for lengthy extensions may necessitate a discussion about the reason(s) and/or contacting your academic advisor.
Class Attendance and Etiquette
Although class meetings will be recorded when possible, it is still expected that you will attend lectures so that you can actively engage with the material, participate in class activities, and ask questions.
Because class meetings will typically start with important administrative information and a review that sets the foundation for the lecture, it is important that all students be on time for class. If you arrive after the lecture has started, please take your seat quickly and quietly and with minimal distraction of your classmates.
The use of laptops and tablets is permitted during class meetings for taking notes, referring to electronic copies of supporting materials, and completing in-class activities. So that you will be focused on the course material and not distract your classmates, it is expected that you will not use your laptop or tablet for other purposes during class.
Likewise, so that you can focus on the class and so as to not distract other students, the use of phones is prohibited during class meetings. Please put your phone on silent/Do Not Disturb mode when in the classroom.
Use of Generative AI
The use of Generative AI (GAI) platforms for individual homework assignments is discouraged but not prohibited, meaning that using GAI is not a violation of any policy, but that we highly recommend that you not use it on assignments.
Academic Honesty
All students in this course are expected to abide by the Computer Science Department policy on academic honesty: https://www.cs.columbia.edu/academic/academic-honesty/
In particular, aside from the use of Generative AI, it is expected that the work you submit for individual homework assignments is purely your own, and that you have not received assistance from anyone other than members of the Instruction Staff and have not accessed resources other than those that have been expressly permitted.
This includes but is not limited to:
- sharing and distributing code, e.g. one student writes it and allows other students to see it (even if the other students further modify it)
- co-authoring code, either through pair programming or distributing the work
- sketching out code together on paper, a whiteboard, etc., even if you type it up separately
- reviewing another student's code "just to see how they did it"
- helping another student debug/troubleshoot their code, or receiving such help from another student
Additionally, submitting someone else's work (e.g. something found online, something given to you by a student who took the class in the past, etc.) and claiming it as your own, even with further modification, is pretty much the definition of "plagiarism" and will be treated as academic dishonesty.
Resources
In order to help you succeed in this course, the University has made the following resources available to all students. If you have questions or concerns about utilizing these resources, please speak with the Instructor and he will be happy to help direct you to the resource that will support you best.
Academic Support
Your academic advisor should be your first point of contact for exploring effective techniques for studying, test-taking, note-taking, and time and stress management so that you can feel confident and motivated in your academic work.
The four undergraduate schools also have advising resources available:
- SEAS and Columbia College: Berick Center for Student Advising at https://www.cc-seas.columbia.edu/csa
- Barnard: https://barnard.edu/doas/advising
- General Studies: https://www.gs.columbia.edu/content/academic-advising
Accommodations and Accessibility
If you believe you need accommodations for a disability or a chronic medical condition, please contact the Disability Services office at https://www.health.columbia.edu/content/disability-services to arrange an appointment to discuss your needs. As appropriate, the office will issue students with documented disabilities or medical conditions a formal Accommodations Letter. Since accommodations require early planning and are not retroactive, please contact Disability Services as soon as possible. You are also welcome to contact the Instructor privately to discuss your academic needs. However, all official disability-related accommodations must be arranged, in advance, through Disability Services.
Health and Wellness
Staying healthy is a key factor in having a successful and enjoyable semester. Columbia Health provides medical services and wellbeing-related programming throughout the year; see https://www.health.columbia.edu/ for more information.
Additionally, Counseling and Psychological Services (CAPS) offers resources related to general mental health, substance use issues, family and personal relationship issues, and resources for coping with discrimination, hate, and violence. If you are uncomfortable reaching out to CAPS on your own, the Instructor or your academic advisor will be happy to contact them on your behalf. More information is available at https://www.health.columbia.edu/content/counseling-and-psychological-services
The Instruction Staff recognizes that student life can be extremely difficult, both mentally and emotionally, especially during these unsettled and unsettling times. If you are living with mental health issues such as anxiety, depression, ADHD, or other conditions that may affect you this semester, you are encouraged to discuss these with the Instructor if you are comfortable doing so. Although the details are up to you to disclose, the Instructor will do his best to support and accommodate you in order to ensure that you can succeed in this course while staying healthy.
If you or someone you know is having a medical or mental health crisis and urgently needs assistance, please do not hesitate to contact Public Safety: 212-854-5555.
Last updated: Aug 31, 2026