Software engineers today are less likely to design data structures and algorithms from scratch and more likely to build systems from library and framework components. In this course, students engage with concepts related to the construction of software systems at scale, building on their understanding of the basic building blocks of data structures, algorithms, program structures, and computer structures. The course covers technical topics in four areas: (1) concepts of design for complex systems, (2) object oriented programming, (3) static and dynamic analysis for programs, and (4) concurrent and distributed software. Student assignments involve engagement with complex software such as distributed massively multi-player game systems and frameworks for graphical user interaction.
After completing this course, students will:
- Be comfortable with object-oriented concepts and with programming in the Java or JavaScript language
- Have experience designing medium-scale systems with patterns
- Have experience testing and analyzing your software
- Understand principles of concurrency and distributed systems
See a more detailed list of learning goals describing what we want students to know or be able to do by the end of the semester. We evaluate whether learning goals have been achieved through assignments and exams.
M/W 11:00 - 12:20 p.m. in POS A35
Jeremy Lacomis, TCS 362, office hours: see calendar
Claire Le Goues, TCS 363, office hours: see calendar
Our TAs also provide an additional 15h of office hours each week; see details in the calendar.
The instructors have an open door policy: If the instructors' office doors are open and no-one else is meeting with us, we are happy to answer any course-related questions. Feel free to email us for appointments; we are also available over Zoom.
<iframe src="https://calendar.google.com/calendar/embed?src=c_2a6e790c6ae7fd610c0f21536ff9b4a7447f8d7e24cd18343d59f10af3297ed3%40group.calendar.google.com&ctz=America%2FNew_York" style="border: 0" width="800" height="600" frameborder="0" scrolling="no"></iframe>The schedule below reflects our current plans, but will be updated throughout the semester.
Date | Topic | Reading assignments* |
---|---|---|
Mon, Aug 26 | Intro, IDEs, Build Systems, CI, Libraries | |
Wed, Aug 28 | OO basics, Dynamic dispatch, Encapsulation | |
Fri, Aug 30 | Lab 1 Course Infrastructure Setup | |
Mon, Sep 2 | No Class, Labor Day | |
Wed, Sep 4 | OO Analysis and UML | |
Fri, Sep 6 | Lab 2 Encapsulation | |
Mon, Sep 9 | HW 1 due Flash cards (Intro to OO and Libraries) | |
Mon, Sep 9 | Responsibility Assignment | UML and Patterns, Ch. 9-11, 15-16 |
Wed, Sep 11 | Inheritance and Delegation | |
Fri, Sep 13 | Lab 3 Inheritance and Delegation | |
Mon, Sep 16 | Design Patterns | UML and Patterns, Ch. 17-18 |
Wed, Sep 18 | Design Critique | |
Fri, Sep 20 | Lab 4 Design and UML | |
Mon, Sep 23 | HW 2a due Santorini: Intro to Design | |
Mon, Sep 23 | Refactoring and Anti-patterns | |
Wed, Sep 25 | Midterm 1 | |
Fri, Sep 27 | Lab 5 Refactoring and Anti-patterns | |
Mon, Sep 30 | HW 2b due Santorini: Peer Review | |
Mon, Sep 30 | Specifications and Unit Testing, Exceptions | |
Wed, Oct 2 | Test Case Design | |
Fri, Oct 4 | Lab 6 Unit Testing | |
Mon, Oct 7 | Testability | |
Wed, Oct 9 | HW 3 due Testing | |
Wed, Oct 9 | Introduction to concurrency | |
Fri, Oct 11 | Lab 7 Test Doubles | |
Mon, Oct 14 | No class, Fall Break | |
Wed, Oct 16 | No class, Fall Break | |
Fri, Oct 18 | No lab, Fall Break | |
Mon, Oct 21 | Concurrency and Hazards | |
Wed, Oct 23 | HW 4 due Design and Testability Refactoring | |
Wed, Oct 23 | Java Parallelism | |
Fri, Oct 25 | Lab 8 Java Parallelism | |
Mon, Oct 28 | Concurrency and Asynchrony in TypeScript | |
Wed, Oct 30 | HW 2c due Santorini: Final design | |
Wed, Oct 30 | Concurrency and Patterns | |
Fri, Nov 1 | Lab 9 Concurrency and Promises | |
Mon, Nov 4 | GUIs | |
Wed, Nov 6 | Midterm 2 | |
Fri, Nov 8 | Lab 10 ReactJS/Intro to GUIs | |
Mon, Nov 11 | HW 5 due Concurrency | |
Mon, Nov 11 | Libraries and Frameworks | |
Wed, Nov 13 | API Design | |
Fri, Nov 15 | Lab 11 TicTacToe Client/Server | |
Mon, Nov 18 | API Design II | |
Wed, Nov 20 | HW 6a due Santorini: User Interface | |
Wed, Nov 20 | Design Case Study | |
Fri, Nov 22 | Lab 12 TBD | |
Mon, Nov 25 | DevOps | |
Wed, Nov 27 | No class, Thanksgiving Break | |
Fri, Nov 29 | No lab, Thanksgiving Break | |
Mon, Dec 2 | Designing for Larger Scale: Distributed Systems | |
Wed, Dec 4 | HW 6b due Santorini: God Cards | |
Wed, Dec 4 | Towards Software Engineering | |
Fri, Dec 6 | Lab 13 Design Pattern Review | |
Thu, Dec 12 | Final exam - 1:00pm-4:00pm Locaton TBD |
Instructors: Jeremy Lacomis [jlacomis] and Claire Le Goues [clegoues]
TAs: Connie (Wenjun) Zhou [wenjunz2],
Terry (Jielin) Li [jielinl],
Jeffrey Hanyun Li [jhl4],
Yikang Cheng [yikangc],
Eileen Gu [yingfan2],
John Crawshaw [vcrawsha],
Victor Crawshaw [jccrawsh],
Clement Ou [clemento],
Yibo Ma [yibom]
-
15-122 or 15-211, or equivalent with instructor's permission
-
The equivalent of 2 semester-long programming classes
- Ability to write small programs in C (or Java, C#, or other imperative languages with pointers or references)
- Ability to reason about programs using preconditions, postconditions, and invariants
- Familiarity with a basic set of algorithms and data structures (linked lists, simple graph and sorting algorithms)
-
15-151 or 21-127, or equivalent with instructor's permission
- Sound foundation of mathematical concepts; ability to reason formally
Evaluation will be based on the following percentages:
- 50% assignments (1000 total points, each assignment has a different weighting)
- 30% exams (7.5% for each of 2 midterm exams and 15% for the final)
- 10% labs
- 10% participation and quizzes
This course does not have a fixed letter grade policy; i.e., the final letter grades will not be A=90-100%, B=80-90%, etc.
Homework grading and regrading. We try to be transparent in our rubrics in our assignments. Feel free to ask instructors or TAs clarification questions about the rubrics before the assignment is due. If you disagree with a grade, please submit a regrade request within 7 days on Gradescope. Regrade requests need a justification, explaining why our assessment is inconsistent with the rubric. Regrade requests without such justification will be closed.
Each student can resubmit any one assignment milestone and it will be regraded as if it was the first submission (see below).
Participation and quizzes. You should expect a quiz at the start of nearly every lecture and often additional in-class activities within the lecture. When a reading assignment is given, the quiz will typically touch on the content from the reading material. Otherwise (and sometimes in addition), the quiz centers around the content from the most recent lecture or two. A quiz will typically have 1-2 questions and is graded pass/fail.
Labs. Labs will be graded on a pass/fail basis during recitations. You will have a chance during recitation to improve your solution. See a description here.
Late work. We understand that normal life events, including projects and exams in other courses and technical difficulties out of your control, can interfere with your ability to complete your work on time or attend lectures and recitations. Our philosophy is that our late work policy includes built-in flexibility but that the policy will be uniformly applied to all students in all circumstances. Exceptions to this policy will be made only with explicit accommodations, almost always involving a family or medical emergency with your academic advisor or the Dean of Student Affairs requesting the exception on your behalf.
We provide the following flexibility, no questions asked, no justification needed:
- For quizzes, we will drop up to two missed/failed solutions during the semester.
- For labs, we will drop up to two missed/failed solutions during the semester.
- For homework deadlines you have 5 free late days for the semester. You can exceed each deadline by up to three days (unless explicitly specified otherwise in the assignment, check carefully), for a penalty of 10% per day once you run out of free late days. This policy applies to all homework deadlines except homeworks 2a and 2b.
- For a single homework deadline during the semester, you can redo and resubmit your work after it was graded. It will be regraded as if it was the first submission and you can regain all lost points. Each student can only do this once. We accept resubmissions until December 6th at 11:59pm. (While we do not recommend it, you can use this as arbitrary late days for a single deadline, receiving 0 points for missing the initial deadline and then resubmitting later).
Any work submitted beyond the flexibility provided by these mechanisms will receive feedback but no credit unless explicit accommodations were provided.
This course, including recitations, is marked by the registrar as IPE ("delivered in-person, students are expected to be in the classroom during the course's scheduled meeting time"). We do not plan to make accommodations for remote attendance.
We strongly recommend attending lectures. We have regular in-class activities and quizzes that we expect you to complete in class. Attending recitations is required for grading labs.
In case of illness, quarantine, or other exceptional circumstances, we may be able to share recordings of lectures upon request on a case by case basis. Recordings may not be shared to protect the FERPA rights of all students in the classroom.
This course will occasionally assign mandatory readings, from the two text books below. The CMU library has both physical and electronic copies of these books. You can access all of these books for free electronically through the CMU library.
- Larman, Craig. Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development, 3rd Edition. Prentice Hall. ISBN 0-13-148906-2. [CMU Library] This book describes basics of object-oriented design, responsibility assignment, and some design patterns used in the course. We will use the third edition, which covers the course's topics in more details than earlier editions. We will assign select chapters.
- Bloch, Joshua. Effective Java, Third Edition. Addison-Wesley, ISBN 978-0-13-468599-1. [CMU Library] This book covers many aspects of program design, not only those specific to Java. We will assign multiple chapters.
In addition, we list several optional readings that may be helpful with specific topics in the course. Especially if Java/Javascript is new to you, you might want to consider exploring additional books.
-
Object-Oriented Design and Design Patterns
- Alan Shalloway and James Trott. Design Patterns Explained: A New Perspective on Object-Oriented Design (2nd Ed.) [CMU Library]
- Gamma et al. Design Patterns: Elements of Reusable Object-Oriented Software. Addison Wesley. ISBN 0-201-63361-2 [CMU Library] (this is an excellent book, but more of a reference text than the Design Patterns Explained book. In addition, because it was the original patterns book, the examples are in C++ and Smalltalk, not Java)
-
Java
- Note: Here are some popular textbook and online resources for learning Java.
- Sestoft. Java Precisely. MIT Press, 2016. [2nd edition in the CMU library] (this is a very concise reference with many good examples; it assumes that you already know other programming languages)
- Introduction to Programming Using Java (free online textbook)
- Blue Pelican Java (free online textbook)
-
Javascript/Typescript
- Douglas Crockford. JavaScript: The good parts. O'Reilly, 2008. [CMU library]
- Boris Cherny. Programming Typescript: Making Your JavaScript Applications Scale. O'Reilly, 2019. [CMU library]
This is a 12-unit course, and it is our intention to manage it so that you spend close to 12 hours a week on the course, on average. In general, 4 hours/week will be spent in class, 1 hour on labs, and 7 hours on assignments. Please feel free to give the course staff feedback on how much time the course is taking for you.
For this class, we are conducting research on teaching and learning. This research will involve some student work. You will not be asked to do anything above and beyond the normal learning activities and assignments that are part of this course. You are free not to participate in this research, and your participation will have no influence on your grade for this course or your academic career at CMU. If you do not wish to participate, please send an email to Chad Hershock (hershock@andrew.cmu.edu). Participants will not receive any compensation. The data collected as part of this research will include student grades. All analyses of data from participants’ coursework will be conducted after the course is over and final grades are submitted. The Eberly Center may provide support on this research project regarding data analysis and interpretation. The Eberly Center for Teaching Excellence & Educational Innovation is located on the CMU-Pittsburgh Campus and its mission is to support the professional development of all CMU instructors regarding teaching and learning. To minimize the risk of breach of confidentiality, the Eberly Center will never have access to data from this course containing your personal identifiers. All data will be analyzed in de-identified form and presented in the aggregate, without any personal identifiers. If you have questions pertaining to your rights as a research participant, or to report concerns to this study, please contact Chad Hershock (hershock@andrew.cmu.edu).
The usual policies apply, especially the University Policy on Academic Integrity. We expect that your work on assignments, projects, and exams will be your own work. The key guiding principle of academic honesty in this course is: "You may not copy any part of a solution to a problem that was written by another student (in this or prior iterations of the class), or was developed together with another student, or was delegated to another person. You may not look at another student's solution, even if you have completed your own, nor may you knowingly give your solution to another student or leave your solution where another student can see it." Note that this implies that you cannot publicly post your solutions on GitHub (e.g., as part of a portfolio during job applications). We also expect and respect honesty when communicating with the course staff.
Any violation of this policy is cheating. We use automated systems to detect software plagiarism. These automated systems are highly effective and, so far, have detected software plagiarism almost every semester. The minimum penalty for cheating will be a zero grade for the whole assignment. Cheating incidents will also be reported through University channels, with possible additional disciplinary action (see the University Policy on Academic Integrity).
For labs and homeworks you are allowed to use various tools and help available to professional programmers, such as online documentation, online tutorials and support forums like Stackoverflow, and AI assistants like Copilot and ChatGPT. You are allowed to post technical questions about aspects of the homework elsewhere, as long as you do not ask other humans to complete the work for you. Whenever you use external resources like this, you are still fully responsible for the correctness of your solution and complying with licenses. Note that content generation tools often create plausible-looking but incorrect answers, which will not receive credit.
When you use AI assistants in homework, some assignments may require you to briefly describe their use and your experience with the homework submission.
Here are some examples of behavior that are inappropriate:
- Copying (or retyping) files, parts of files (such as source code, written text, or unit tests), quiz solutions, or exam solutions from another person or source, either in draft or final form, even if the file permissions are incorrectly set to allow it. This behavior is still clearly inappropriate even if you make modifications (such as style changes or minor logic modifications) from the original source.
- Searching for or viewing a current or past student's homework solution.
- Allowing someone else to view or copy your code, written assignment, quiz, or exam, either in draft or final form.
- Writing, using, or submitting a program that attempts to alter or erase grading information or otherwise compromise security of course resources.
- Lying to course staff.
- Making your work publicly available in a way that other students (current or future) can access your solutions, even if others’ access is accidental or incidental to your goals.
Here are some examples of acceptable behaviors:
- Solve technical problems by searching for the error message with Google or on StackOverflow.
- Copying code snippets from tutorials or StackOverflow into your own code.
- Importing libraries as part of your implementation. Reading documentation and examples of libraries. Copying libraries or utility files into your repository (bad practice to avoid, but not consider cheating).
- Copying code from labs or reference solutions provided in recitations.
- Using GitHub Copilot while writing your solution.
- Using ChatGPT to write or help write justifications in homework assignments, while checking the correctness of the answer.
- Looking at other students' solutions when explicitly instructed by the course staff, for example, as part of peer grading for labs, quizzes, or homework.
There is no statute of limitations for violations of the collaboration policy; penalties may be assessed (and referred to the university disciplinary board) after you have completed the course, and some requirements of the collaboration policy (such as restrictions on you posting your solutions) extend beyond your completion of the course.
If you have any question about how this policy applies in a particular situation, ask the instructors or TAs for clarification.
If you desire to audit the course, our general requirement is that you complete homeworks to achieve at least 50% of the total homework grade. Solutions do not need to be fully complete, but we encourage you to attempt to do so. We additionally encourage you to attend lectures and complete labs, but you are not required to do so. You should not attend our midterm exams or final exam.
When we say "your health matters" we mean exactly that: Your health matters. We don't intend to imply that other peoples' health does not matter, or that your health matters more or less than theirs. We know that CMU can be a stressful, risky environment, and your health is the health that is relevant in this conversation. Worries about Covid-19 and possible remote classes do not help.
Please take care of yourself. Do your best to maintain a healthy lifestyle this semester by eating well, exercising, avoiding drugs and alcohol, getting enough sleep and taking some time to relax. This will help you achieve your goals and cope with stress.
All of us benefit from support during times of struggle. You are not alone. There are many helpful resources available on campus and an important part of the college experience is learning how to ask for help. Asking for support sooner rather than later is often helpful.
If you or anyone you know experiences any academic stress, difficult life events, or feelings like anxiety or depression, we strongly encourage you to seek support. Counseling and Psychological Services (CaPS) is here to help: call 412-268-2922 and visit their website at http://www.cmu.edu/counseling/. Consider reaching out to a friend, faculty or family member you trust for help getting connected to the support that can help.
If you are worried about affording food or feeling insecure about food, there are resources on campus who can help. Email the CMU Food Pantry Coordinator to schedule an appointment: cmu-pantry@andrew.cmu.edu
Respect for diversity. It is our intent that students from all diverse backgrounds and perspectives be well served by this course, that students’ learning needs be addressed both in and out of class, and that the diversity that students bring to this class be viewed as a resource, strength and benefit. It is my intent to present materials and activities that are respectful of diversity: gender, sexuality, disability, age, socioeconomic status, ethnicity, race, and culture. Your suggestions are encouraged and appreciated. Please let us know ways to improve the effectiveness of the course for you personally or for other students or student groups.
Accommodations for students with disabilities. If you have a disability and have an accommodations letter from the Disability Resources office, we encourage you to discuss your accommodations and needs with us as early in the semester as possible. We will work with you to ensure that accommodations are provided as appropriate. If you suspect that you may have a disability and would benefit from accommodations but are not yet registered with the Office of Disability Resources, we encourage you to contact them at access@andrew.cmu.edu.
We are planning many changes to this course in this semester and not everything will work out smoothly the first time. We’d like you to provide ongoing feedback on your experience in the course, so that we can take into account your experience and adapt our practices to make the course work for you.
Outside of the regular course meetings and Piazza, you can submit feedback about anything in the course per email to the instructors or ask TAs to forward them anonymously. We will read every message submitted and use your feedback to try to improve the way we are teaching.