Syllabus
Meeting Times and Staff
Instructor
- Instructor: Dr. David Balash
- Email: david.balash@richmond.edu
- Office Hours: (Jepson 223)
- Tue 4:30PM - 5:30PM
- Fri 3:00PM - 5:00PM
- and by appointment at https://calendly.com/davidbalash or by email
- Prerequisites: CMSC 221 with a minimum grade of C- (See computer science curriculum)
Meeting Times
Class/Lab Info
- Lecture (Jepson G04)
- Tue 10:30AM - 11:45AM
- Thr 10:30AM - 11:45AM
- Lab (Jespson G03)
- Fri 10:30AM - 11:20AM
Course Staff
- Dr. David Balash - Instructor
- Padmaja Karki - Lab Assistant
- Maggie Song - Grader
- Aris Karamustafić - Course Mentor
Course Details
Welcome to Software Systems Development!
Your dedication and hard work have led you to this moment; you belong here. Congratulations on your achievements, and welcome to the course. I am thrilled to have you here and am looking forward to a semester filled with growth, learning, and success. Together, we will explore, create, and innovate. Let’s make this an outstanding semester for everyone!
Course Description
Introduction to techniques necessary for development of large-scale software systems. Topics include the development life cycle; design considerations including OOP, patterns, reuse, and usability; repository management; testing, debugging, and static/dynamic analysis; and group work. Also includes introduction to Unix/Linux environments, and to the C++ programming language, including classes, inheritance, and polymorphism; pointers and dynamic memory allocation; and the C++ Standard Template Library (STL).
Learning Outcomes
By the end of this course, you will:
- Experience modern C++ programming
- Gain familiarity with Unix/Linux environments
- Understand the software development life cycle
- Practice object-oriented programming and design
- Understand design patterns, reuse, and usability
- Exposure to version control systems
- Demonstrate skill in software testing, debugging, and static/dynamic analysis
Course Outline
- Weeks 1-5: Introduction to C++ programming, Unix/Linux environments, and version control
- Syntax, memory management, libraries, file IO, Linux command line, Git
- Weeks 6-10: Object-oriented programming
- Abstraction, polymorphism, inheritance, and encapsulation
- Weeks 11-15: Software systems development
- UML, design patterns, testing, debugging, static/dynamic analysis
- Throughout: software engineering techniques
- Requirements, architecture, design principles
Textbook and Resources
Textbook
There will be assigned reading from the following book which is available electronically for free via the UR library.
- Programming Principles and Practice Using C++, 2nd Edition by Bjarne Stroustrup
Resources
The following books are not required for this course. Instead it is a list of recommended resources for you to reference in addition to the course notes provided for you. These include:
-
Effective Modern C++ by Scott Meyers
-
A Tour of C++, 3rd Edition by Bjarne Stroustrup
-
C++ Software Design by Klaus Iglberger
All books listed here are available in electronic form for free on the O’Reilly Media website via the UR library. You can also find a ton more books and resources there.
Coursework and Grading
Course Work
- In-class module exercises
- Lab programming assignments
- Programming project
- Project presentation
- 4 In-class quizzes
Grading Breakdown
- 15%: Module exercises
- 40%: Labs
- 20%: Project
- 5%: Project Presentation
- 20%: Quizzes (In-class 4 x 5% each)
Programming Expectations
The course will be programming-intensive. You will be submitting one lab assignment, on average, per week, and a programming project will be assigned mid-semester. You should also be completing your in-class module exercises.
You are expected to submit well-written code:
- Comments must be substantive.
- Select descriptive and readable variable names and method names.
- Use consistent indentation (preferred: four spaces).
- Submit code that compiles.
- Additionally, your code should be compile in a standard, pre-described way for the class (e.g., via the
g++
compiler)
- Additionally, your code should be compile in a standard, pre-described way for the class (e.g., via the
- Be able to describe and answer questions about your code when prompted.
Late Work Policy
Assignments including modules and labs may be submitted late with a 10% deduction per day late.
You will have two “late passes” per semester to use on modules and labs. To use a late pass, notify me which assignment you would like to use it on, and you may turn that assignment in one week late for full credit.
Late passes may not be used on the final project or exams.
In cases of personal illnesses, emergencies, or documented accommodations, assignments may be submitted late for full credit if you notify me of your situation.
Attendance Policy
Regular attendance for the entire class time is expected. You should not miss more than 4 total sessions (including lecture and lab). If you have to quarantine due to COVID or miss class for other legitimate reasons you will not be penalized.
Self-Guided Module exercises
Each lecture will be accompanied by a self-guided worksheet. This module exercise is to complement in-class content and to assist you in reviewing the material. In-class module exercises are due one week from the lecture in which they are assigned.
Labs
Labs are short-to-medium size programming assignments that are designed to reinforce lecture. This course has a formal laboratory component. You are expected to attend each lab for the entire 50 minute lab period. Some labs may require that you work in teams of two or more. Almost all labs will require more than the 50 minute alloted time to complete, so please expect to have to spend extra time on the labs.
Labs are due at 11:59 pm on the night prior to the next lab (for this course, that means 11:59 pm Thursday evening), unless I explicitly provide a different deadline. Note that some labs are more like programming projects, so might require two weeks to complete. In that case I will explicitly inform you of this.
Programming Project
The programming project will be written in the C++ language, and must compile without warnings using the GNU g++ compiler and the -Wall flag on the department’s Linux machines (cs01 - cs06 and turing2).
Quizzes
There are four in-class quizzes. Each quiz is worth 5% of your grade, for a total 20%.
Class Communication
I will use two primary forms of communication in this class: email announcements and Slack. You are responsible for remaining up to date on any information sent by email or posted to Slack. This may include clarifications to assignments, updates on grading rubrics, and changes in office hours.
For all general course information, questions, and clarifications, please use Slack. I hope that the Slack workspace can be an extension of our classroom community where we can share questions and answers for the entire class to view and learn from.
If you have personal, individual issues you’d like addressed, you should send those by email to me. However, all course related topics should be directed to Slack.
Course Policies
Illness policy
If you are ill and it will cause you to miss class, lab, or an assignment, you should let me know in advance, if possible. It is your responsibility to catch up with any missed material if you are able to do so. If not, then immediately on return, work out a time-frame with me on when work will be submitted.
Academic Integrity policy
It is very important in this course (and in life), that your work be your own. These guidelines will help you achieve that.
You must:
- Do your best to solve all homework, projects, labs, and exams on your own.
- Write the names of any students you collaborated with as a comment at the top of your file (subject to the constraints below).
You may:
- Discuss general approaches to solving the homework problems with other students, but the pen-to-paper, fingers-to-keyboard work should be your own.
- Have another student look at a specific snippet of your code (e.g., 10 lines) to help you debug a programming error.
You may not:
- Copy code to or from other students or people outside of the class.
- Have someone else write code for you.
- Copy code from the internet, unless you specifically reference the source and can explain how it works. This should be a tiny minority of the code you submit.
- Write code as a group and then submit identical or slightly modified versions—if you discuss general approaches to solving a problem together, you still must be writing up your own independent solution.
The Honor Code will apply to this course. Please read through the code carefully.
Generative AI
You will almost certainly be using generative AI in some way for the rest of your career. You may use generative AI tools for homework, labs, and project in the following manner.
You must:
- Understand any code that you use. We reserve the right to review your submitted code with you, and ask you to explain how it works.
You may:
- Ask a GenAI tool a generic question for informational purposes. For example, “Please explain the C++ syntax for reading input from a file, and give an example.” If you use this code, please cite the source in a comment.
You may not:
- Ask a GenAI tool to solve the assignment. For example, you should not paste the entire problem description and ask the GenAI to solve it for you.
- No GenAI tools can be used for the exams.
This policy is subject to change as we all learn more about how GenAI works and doesn’t work as part of learning college level course content.
Disability Services
Any student who may need an accommodation based on the potential impact of a disability should contact Disability Services (or call 804-662-5001) to establish eligibility and to coordinate reasonable accommodations.
If you are approved for classroom and/or testing accommodation(s) please make sure to submit a Disability Accommodation Notice to me at this link.
Wellness
If any issue arises that may limit your ability to participate in class, for example, personal illness, family emergency, etc., please be sure to discuss these matters with me as soon as possible and accommodations will be made available to you as appropriate.
Feelings of being overwhelmed are unfortunately quite common in the university environment. You are not alone, and there are a number of resources available to provide support in those moments. Learning to ask for help is an important part of the university experience, and if you or anyone you know experiences any academic stress, difficult life events, or feelings of anxiety or depression, we strongly encourage you to seek support. UR offers counseling services, and also consider reaching out to a friend, family or faculty member you trust for help.
If you or someone you know is feeling suicidal or in danger of self-harm, call someone immediately, day or night:
- UR Counseling and Psychological Services: 804-289-8119
- University of Richmond Police: 804-289-8911
- National Suicide Prevention Lifeline: 1-800-273-8255
Weinstein Learning Center
Academic Skills Center: Academic coaches assist students in assessing and developing their academic and life-skills (e.g., critical reading and thinking, information conceptualization, concentration, test preparation, time management, stress management, etc.). Peer tutors offer assistance in specific subject areas (e.g., calculus, chemistry, accounting, etc.) and will be available for appointments in-person and virtually. Peer tutors are listed on the ASC website. Email Roger Mancastroppa (rmancast@richmond.edu) and Hope Walton (hwalton@richmond.edu) for coaching appointments in academic and life skills.
English Language Learning: assists multi-lingual and international students in honing their language, academic, and/or intercultural skills. Among other available services for students are one-on-one tutoring, group workshops, and semester-long classes on writing and U.S. culture. Please contact Dr. Bohon, Director of English Language Learning, at Leslie.Bohon@Richmond.edu for more information and appointments.
Quantitative Resource Center: Provides services related to quantitative and computational learning across the curriculum through tutoring, consultation and training.
Speech Center: Assists with preparation and practice in the pursuit of excellence in public expression. Recording, playback, coaching and critique sessions are offered by teams of trained student consultants. During scheduled appointments, consultants assist in developing ideas, arranging key points for more effective organization, improving style and delivery, and handling multimedia aids for individual and group presentations. We look forward to meeting your public speaking needs.
Technology Learning Center The TLC is a staffed public lab dedicated to supporting digital media projects. Services include camera checkout, video/audio recording assistance, virtual reality, poster printing, 3D printing and modeling. The TLC is located on the second floor of Boatwright Library.
Writing Center: Assists writers at all levels of experience, across all majors. Students can attend walk-in hours at Boatwright Library (room 171A) with trained writing consultants who offer friendly critiques of written work.
Other Campus Services
Boatwright Library Research Librarians (289-8876): Research librarians help students with all steps of their research, from identifying or narrowing a topic, to locating, accessing, evaluating, and citing information resources. Librarians support students in their classes across the curriculum and provide individual appointments, class library instruction, tutorials, and research guides (libguides.richmond.edu). Students can contact an individual librarian or ASK a librarian for help via email, text (804-277-9ASK), or chat.
Career Services (289-8547): Can assist you in exploring your interests and abilities, choosing a major or course of study, connecting with internships and jobs, and investigating graduate and professional school options. We encourage you to update your profile in Handshake and schedule an appointment with a career advisor early in your time at UR.
Counseling and Psychological Services (289-8119): Assists currently enrolled, full-time, degree-seeking students in improving their mental health and well-being, and in handling challenges that may impede their growth and development. Services include brief consultations, short-term counseling, skills-building classes, therapy groups, crisis intervention, psychiatric consultation, and related services.
Acknowledgments
Much of the material for this course comes from previous iterations taught by Prof. Doug Szajda (Spring 2023). Material was also adopted with permission from The George Washington University course CS 2113 taught by Prof. Adam Aviv and others. Thank you.