Instructor
Dr. Ali Darvish
darvish@jhu.edu
https://www.cs.jhu.edu/~darvish
Office Hours: TBD @ Zoom (https://wse.zoom.us/s/5158173954)
Schedule
Click here to see the schedule. The schedule is tentative and it might be updated as we make progress through the semester.
Syllabus
Course Information
This course covers object-oriented software construction methodologies and their application. The main component of the course is a large team project on a topic of students' choosing. Course topics covered include object-oriented analysis and design, UML, design patterns, refactoring, program testing, code repositories, team programming, and code reviews. [Area: Systems or Applications]
EN.601.280 Full-Stack JavaScript or EN.601.290 User Interfaces & Mobile Applications or via instructor approval.
Upon successful completion of this course, you should be able to:
- Explain the client-server model and structure a software system that adheres to this software architecture. (SO6)
- Write a software requirements specification (SRS) document that describes a medium-size software system's functional requirements. (SO3, SO6)
- Prioritize the functional requirements of a software system according to its requirement specifications. (SO6)
- Recognize software process models and distinguish between plan-driven models (such as waterfall) versus incremental development approaches (such as agile). (SO1)
- Follow the agile software development process (short iteration, continuous delivery, etc.) to build medium-size software. (SO5)
- Describe how version control can be used to help collaborative software development. (SO1)
- Demonstrate the capability to use software tools (Git/GitHub, Wireframing tools, build tools like Gradle, dependency management tools like NPM, IDEs, \dots) to support the development of a software product of medium size. (SO6)
- Articulate object-oriented design principles, including separation of concerns, information hiding, coupling and cohesion, and encapsulation. (SO1)
- Use UML to express the design of a simple software system and explain how system design principles have been applied in this design. (SO3)
- Design, implement, document, and test application programming interface (API) for a simple software system. (SO6)
- Design and implement data persistence strategies (such as databases, caching, cookies, and sessions in web applications) for medium-size multiuser software applications. (SO6)
- Describe the SOLID design principles and apply them to the design of small software systems. (SO1)
- Provide examples of creational, structural and behavioral design patterns in the object-oriented programming paradigm. (SO1)
- Within the context of the object-oriented paradigm, describe one or more design patterns that could apply to a simple software system design. (SO1)
- Describe a form of refactoring and discuss when it may be applicable. (SO1)
- Refactor an existing software implementation to improve some aspects of its design. (SO2)
- Write a software component that performs some non-trivial task and is resilient to input and run-time errors (SO6)
- Create and document a set of tests for a medium-size code segment. (SO2)
- Demonstrate through involvement in a team project the central elements of team building and team management. (SO5)
- Demonstrate effective presentation skills through involvement in a team project presentation (SO3)
- SO1: Analyze a complex computing problem and apply principles of computing and other relevant disciplines to identify solutions.
- SO2: design, implement, and evaluate a computing-based solution to meet a given set of computing requirements in the context of the program's discipline.
- SO3: Communicate effectively in a variety of professional contexts.
- SO5: Function effectively as a member or leader of a team engaged in activities appropriate to the program's discipline.
- SO6: Apply computer science theory and software development fundamentals to produce computing-based solutions.
- FA1 Writing and Communication
- FA6 Conceiving of and Realizing Projects
Course Components
This course has a number of homework assignments, a semester-long project along with a final presentation and an individual written quiz.
Homework
There are several mandatory individual homework assignments. These assignments are meant to help with solidifying your understanding of the core concepts in object-oriented software design and engineering. Each homework assignment will be assigned a point value; the overall homework assignments grade will be computed as your total points earned divided by the total achievable points. Each Homework assignment has a deadline that will be enforced.
Project & Presentation
A major component of the course is a semester long term project with (roughly) bi-weekly deliverables (iterations). Each iteration will be assigned a point value; the overall iteration grade will be computed as your total points earned divided by the total achievable points. There will be a final presentation during part of the final examination period. The deliverables for each iteration will generally be based on "students plan" for that iteration; i.e., their progress is measured against their plan/goals.
Quiz
There will be a written individual comprehensive (covering all the materials taught) quiz with a focus on object-oriented software design (tentatively scheduled for Monday 9/26 during the class time.) Students will not be asked to write code. They must, however, be able to e.g. critique a design provided in a UML format. They must also be able to e.g. define (and elaborate on) each design principles/patterns covered in this course. The quiz is individual, timed, closed-book (except for the course website and "Readings" posted on the course website) and closed-note, and proctored.
Grading Scheme
Course grades will be based on homeworks, project and a quiz. (No final exam!)
- 15% - Homework
- 10% - Quiz (Written, individual, timed, closed-book/note and proctored)
- 70% - The semester-long Project
- 5% - Final Presentation
| Cutoff | Letter |
|---|---|
| > 90 | A-, A, A+ |
| > 80 | B-, B, B+ |
| > 70 | C-, C, C+ |
| ≥ 60 | D, D+ |
| < 60 | F |
The cutoff for assigning -/+ to each grade letter is further subject to the instructor's evaluation of your overall class performance.
Attendance
The lecture meetings will be held in person on the Homewood campus. All students are expected to attend all course meetings and actively participate in all class activities.Professionalism & Adequate Contribution/Performance
For most of the semester, you will be working on a group project. The success of the group depends on the participation of the members. Poor team members cause dysfunction and strife. Here are some characteristics of poor team members:
Inconsideration
Missing deadlines; missing or being late to meetings; being unprepared for meetings; not doing what you were supposed to do; not contributing your fair share of the team's workload; being unavailable or unresponsive to communication; etc.
Rudeness
Being disrespectful to advisors/teammates; brashly rejecting the ideas or opinions of others; lack of appreciation for other team members' contributions; etc.
Apathy
Not taking an active role in team discussions; showing little or no interest in the team's activities; relying on others to make decisions and carry out the work; failing to listen, consistently asking teammates to repeat information; lack of focus and disengagement; etc.
Dominance
Dominate team activities and seek control over every aspect; do as many of the tasks as you can without seeking input or support from other teammates; being (over)possessive of your work and refuse to listen to teammates about ways to improve it; take credit for every success of the team without sharing credit with team members; etc.
Irresponsibility
Failure to own a mistake or accept responsibility for a missed deadline; blaming others for an error that occurred due to a decision or activity on the team's part; unwillingness to receive feedback or respond to instruction from advisor/instructor; etc.
Failing to deal with poor members can lead to low morale and, ultimately, team failure. In the work environment, this incompetency will not be tolerated. When a worker displays a poor work ethic or isn't doing their job correctly, an employer will typically call it to their attention through a verbal warning. If that didn't work, the next steps are a written warning (Letter of Reprimand), suspension, and finally, termination.
AI Assist Policy
Students are permitted, at their own discretion, to explore the use of AI-assisted coding tools as part of their software development process. You may NOT use AI Assisst of any sort in the quiz component of the course. These tools can help with brainstorming, boilerplate generation, and learning alternative approaches to coding problems. However, responsibility for all submitted code rests solely with the submitting team and student(s). You must understand every line of code that you submit in assignments, projects, and exams. If you use AI to generate code:- You are expected to review, test, and debug it thoroughly.
- You must be able to explain how and why your code works.
- If your code fails or behaves unexpectedly, it is your responsibility to debug and correct it. The course staff is not responsible for fixing bugs and glitches.
- Blind or uncritical reliance on AI output is not acceptable and may result in penalty on your grades.
Ethics
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; please carefully study it. Please report any violations you witness to the instructor.
Personal Well-being
- All students with disabilities who require accommodations for this course should contact me at their earliest convenience to discuss their specific needs. If you have a documented disability, you must be registered with the JHU Office for Student Disability Services (385 Garland Hall; 410-516-4720; http://web.jhu.edu/disabilities/) to receive accommodations.
- If you are struggling with anxiety, stress, depression, or other mental health-related concerns, please consider visiting the JHU Counseling Center. If you are concerned about a friend, please encourage that person to seek out our services. The Counseling Center is located at 3003 North Charles Street in Suite S-200 and can be reached at 410-516-8278 and online at http://studentaffairs.jhu.edu/counselingcenter/
Classroom Climate
I am 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. I believe fostering an inclusive climate is important because research and my experience show that students who interact with peers who are different from themselves learn new things and experience tangible educational outcomes. Please join me in creating a welcoming and vibrant classroom climate. Note that you should expect to be challenged intellectually by me, 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, I invite you to share directly with me or the TAs. I promise that we will 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).
Late Day Policy
If, for any extenuating circumstances, you (or your team) are unable to meet a deadline, please reach out to the instructor as soon as possible. You may be granted an extension at the instructor's discretion on a case-by-case basis.
Personal Days
Religious holidays are valid reasons to be excused from class. Students who must miss a class or an examination because of a religious holiday must inform the instructor as early in the semester as possible to be excused from class or to make up any work that is missed.
I extend the same courtesy to cultural/national holidays and other engagements that cannot be avoided, such as athletics events, job interviews, etc. Note that personal days (such as religious holidays) are usually not ground for an extension over a homework deadline. It would be best if you planned accordingly to avoid any conflict.
Drop/Withdraw/Incomplete
- Last day to drop:
- Drop before week 6, nothing will show on the transcript.
- Drop between weeks 6 and 9, a `W` will show on the transcript.
- Last day to withdraw: October 31st ('W' on transcripts)
For more info, go to https://ep.jhu.edu/student-services/academic-calendar/
A request for an "Incomplete" grade in this course will not be granted because the project you are working on would have to be completed without you. Therefore, there is no opportunity for "classwork" to be completed later! Exceptions may be made at the instructor's discretion on a case-by-case basis.