Course Syllabus
Syllabus |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
CSCI-E 97, Fall 2021 Software Design: Principles, Models, and Patterns Last Update: 8/29/2021 AbstractThis course is an introduction to the application of software design principles to the design of applications. This course approaches software design from three perspectives: the software engineering principles that enable the development of quality software, modeling of software elements using the Unified Modeling Language (UML), and the application of design patterns as a means of reusing design models that are accepted best practices. In most IT organizations, software design is a collaborative effort involving software engineers, managers, and other stakeholders in a project. We will simulate that with several sessions devoted to interactive design. The assignments will apply the Design First Agile methodology. See the section Course Logistics for information on textbooks, distance education, and the course meeting schedule. Teaching StaffInstructorEric Gieseke, ALM Software Architect Telephone: 781-330-9835 email: egieseke@g.harvard.edu Teaching AssistantsSimili Abhilash Athittaya Kamlang-Ek Hannah Riggs Course DescriptionThe working assumption for this course is that registered students are proficient in programming. Our goal is to move beyond programming-specific concerns to a point where one can think through a design for a software application without writing code. It might be useful to apply the maxim that "You can't take people from where they're not to where they don't want to go" to yourself in deciding whether you want to take this course. In particular, if you are taking this course with minimal prerequisites, or are taking this course as one of the three courses needed before you enroll in the ALM in IT, my advice is to wait until you have more background. You might be able to meet the requirements for the programming aspects of the course but will struggle through the process of design. We will learn about UML, design principles, design patterns, and how to write a design document, so this course is good to take before the software engineering course where these skills are used. What is Software Design?"Design" can be used as a verb to denote the process of finding a solution to a problem in the form of drawings and plans. "Design" can also be used as a noun to denote the results of that process. To keep things simple, we can categorize software design problems based on the context in which they appear and the scope of the problem to be solved. First, the problem might have a relatively narrow scope and be closely tied to programming decisions. For instance, the problem might be about choosing the right data structure and algorithm to manipulate it to satisfy given functional requirements. We'll refer to this as a "detailed design." Second, the problem might be how best to implement a run-time component that is either a stand-alone application or part of a more extensive system. Here the scope is larger, and one has to think about what software modules will go into the component and how to implement the interactions between this component and other run-time components in the system to meet a given set of functional requirements. We'll refer to this as "component design." Third, the problem might be based on a set of functional requirements and the designer's task is to define a system made up of collaborating components that conspire to satisfy the given requirements. We'll refer to this as "application design" or "system design." We might even refer to it as "architecture." In this course, we focus primarily on component design. We will "do design" by applying principles and patterns and by creating appropriate UML models. A critical aspect of component design that will be an integral part of each assignment is the definition of interfaces that the component makes available so that other components can interact with the component. The term interface here is more general than the concept of an interface defined in Java. PrerequisitesCSCI E-22 (Data Structures) and proficiency in Java (CSCI E-10a and b are not sufficient). If you do not have these prerequisites, do not take this course – take an appropriate prerequisite. Proficiency in other languages, such as C++, Ada, COBOL, FORTRAN, or LISP, is not an adequate substitute for Java. It would be premature for you to take this course without a more substantial background. What I expect you to know about JavaThe proficiency requirement for Java is much stronger than a brief introduction. All examples in the lecture notes and all programming assignments will be done in Java (in particular, JDK 16). You should be competent in the following aspects of Java:
Skills Check Diagnostic Assignment: The first programming assignment, to be given out in week 1 as a warm-up exercise, should help you decide whether you have satisfactorily met the Java prerequisites. Note - While the object-oriented language used in the course is Java, this is not a course designed to teach Java. There are numerous other packages or features of the Java platform (inner classes, threads, RMI, JNDI, JDBC, AWT, Swing, etc.) that are not prerequisites. If we decide to use any of the things mentioned in this paragraph, we will cover them in class first. Writing RequirementsCommunication of design is an important skill to be learned in this course; students are expected to demonstrate not only good analytical skills but also good writing skills. Each of the first four assignments will have a specific writing component in addition to the programming component. The fifth assignment will require writing a design document for a specific application and will not require implementation. Course LogisticsThis section has information about where the course meets, the course website, textbooks for the course, and the schedule of classes. Class MeetingsAttendance is required for lectures and sections. Lectures times: Mondays, 5:50-7:50 pm ETSections: Tuesdays, 7 PM - 8 PMOffice Hours:Feel free to schedule one-on-one meetings with the instructor (Eric) to discuss questions about lectures or assignments. Meetings will be remote using Google Meet. Use Calendly to schedule: Eric: https://calendly.com/eric_gieseke/office-hours Links to an external site. Simili: https://calendly.com/simili_abhilash/office-hours Links to an external site. Hannah: https://calendly.com/riggsh/office-hours Links to an external site. Attendance and participation policy Both the lectures and the in-class sections will be broadcast live, and both will be available on-demand within 24-hours. Due to the pandemic, lectures and sections will be conducted online using Helix. Please do your best to attend the live lecture and section, when you will be able to interact and ask questions, and maximize your learning. Sections provide an opportunity for you to ask questions about lecture material or assignments and practice the art of design with some focused exercises. During sections, we will review lecture materials with examples and review assignments, and address related questions. Attending the sections is required since participating in sections will help you master the course content. Assignments and GradingThere are no exams in this course. Your grade will be based on your performance on the assignments. The assignments will include object-oriented modeling, application of design principles, and sound programming techniques. Students are expected to write a detailed description of the design for each of their programs, incorporating UML models as appropriate. Students implement their programs in the Java programming language. There will be five assignments, each lasting about three weeks. Assignment 1 Implement a solution based on a design document provided to you. This assignment will introduce you to the practice of upfront design, the contents of a design document, and how design can help streamline implementation and improve overall software quality. Assignments 2, 3, 4 In these assignments, you will create a design document, participate in a peer design review, and then implement your solution based on the design. You will be provided a requirements document, architecture overview, and design template. The design document will be graded along with your implementation. It is important to complete the design and peer review before starting the implementation. Note that assignments 2, 3, and 4 will build on each other, as modules that fit together to create a complete solution that will be realized at the end of assignment 4. Assignment 5 The focus of assignment 5 will be a modular design. You will write a complete design document for modular application. You will be provided a requirements document. Due to the larger design scope for assignment 5, an implementation is not required. This course is based on real-world software design and development. We will follow Design First Agile development, a means of integrating software design in an Agile development environment. The inputs to the assignments, primarily requirements and architecture documents are intended to be clear. However, if something is not clear to you, it is up to you to ask questions during class, in sections, or on the Piazza discussion board. Getting clarification of requirements will be part of your responsibility in these assignments. Ask questions when you perceive a requirement to be unclear or incomplete. Each assignment will have a specific set of functional requirements and implementation requirements, and you will receive a grade sheet specifying the grading criteria for each assignment. The assignments will allow you to practice lecture material, including UML, design principles, and design patterns. Distance EducationIn addition to the classroom presentation, each lecture will be available through the Harvard Distance Learning facility. See the website http://www.extension.harvard.edu/academics/courses/types-courses/video-course-guidelines for more details on how distance education is supported at Harvard Extension School. The course website will have links to our course videos. Text BooksThere are two required texts:
Other lecture material will be in the form of notes that will be made available before the lecture. For local students, the textbooks are available at the Harvard Coop. Course WebsiteThe URL for the course Canvas site is: https://canvas.harvard.edu After the first two weeks of the semester, you will need your Harvard ID and PIN to access the site. All lecture slides, assignments, and related course materials, including this syllabus, will be available in pdf format (readable via Adobe Acrobat) through the course website. Accessibility PolicyThe Extension School is committed to providing an accessible academic community. The Accessibility Office offers a variety of accommodations and services to students with documented disabilities. Please visit www.extension.harvard.edu/resources-policies/resources/disability-servicesaccessibility for more information. Plagiarism PolicyYou are responsible for understanding Harvard Extension School policies on academic integrity (www.extension.harvard.edu/resources-policies/student- conduct/academic-integrity) and how to use sources responsibly. Not knowing the rules, misunderstanding the rules, running out of time, submitting the wrong draft, or being overwhelmed with multiple demands are not acceptable excuses. There are no excuses for failure to uphold academic integrity. To support your learning about academic citation rules, please visit the Harvard Extension School Tips to Avoid Plagiarism (www.extension.harvard.edu/resourcespolicies/resources/tips-avoid-plagiarism), where you'll find links to the Harvard Guide to Using Sources and two free online 15-minute tutorials to test your knowledge of academic citation policy. The tutorials are anonymous open-learning tools. Class ScheduleClass meeting dates and assignment due dates are as follows:
Assignments must be submitted by midnight EST on the due date. ReferencesThe books and websites listed here are optional references for your out-of-class reading. References on Design Patterns
References on UML
References on Java
Other Interesting Books
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Course Information |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Course Summary:
Date | Details | Due |
---|---|---|
|