CMSC 240: Systems Software Development

Spring 2021

Doug Szajda

    Course Syllabus


  • Instructor: Doug Szajda, dszajda@richmond.edu, 219 Jepson Hall, (804)-287-6671 (campus ext. 6671).
  • Meeting Times:
    • Lecture: TR 11:00 - 12:15, ONLINE (Zoom link on Blackboard).
    • Lab: F 9:15 - 10:05 a.m., ONLINE (Zoom link on Blackboard).

  • Required Text:
    • C++ Crash Course by Josh Lespinoso

  • Office Hours:This semester, per university rules, faculty are not supposed to hold in-person office hours. If you need to see me, please email me and we will set up a time for a Zoom call.

  • Course Summary: This is a 1 unit course on software systems development. It it intended to provide an introduction to the techniques necessary for the development of large-scale software systems. A secondary goal is to provide students with a foundation in the techniques of programming using "modern" C++. Key topics include (but are not limited to)
    • Introduction to the modern C++ programming language, including
      • Classes, inheritance, and polymorphism
      • Pointers and dynamic memory allocation
      • The C++ Standard Template Library (STL)
      • Lambda Expressions
      • Copy and move semantics
      • Threading and parallel computing support
    • Introduction to Unix/Linux environments
    • The development life cycle
    • Object-Oriented Programming and other design considerations
    • Patterns, reuse, and usability
    • Repository management
    • Testing, debugging, and static/dynamic analysis
    • Object-oriented design

  • Course Goals: The goals of this course, a foundational systems course, go beyond learning the material listed above. Additional goals include (but are not limited to):
    • Fundamental computer science principles: During the semester, we will see, in the context of software systems development, a number of principles used throughout computer science. I will emphasize these principles and you will be responsible for knowing them once presented.
    • Professionalism: In speaking with people who hire in industry and recruit grad students in academia, it has become clear that professionalism is one of their top concerns. Specifically, they are seeing graduates who don't understand what it entails. This is not an issue unique to UR, but it is an issue that needs to be addressed. In this context, professialism means considering questions such as (but not limited to) the following:
      • Does a person reliably and consistently show up to appointment and meetings, and do so on time (if you're one of those students who likes to wander in to class three minutes late, give that a thought)?
      • Does a person start work in a timely manner?
      • Does a person work well in a group, performing their share of the work, considering the input of all group members, and respecting colleagues of all genders and demographics?
      • Does a person understand time management (e.g., a six week project requires six weeks of work, not a frantic couple of days prior to a deadline).
      • Does a person communicate well, and in a timely manner, with their supervisor(s)? This means, for example, that if a group project is falling behind, or a group member is not performing their share of the work, the supervisor is notified well before any deadlines, so that the issues can be sorted out and work reassigned sufficently early that deadlines can still be met.
      • Does a person meet deadlines? For example, a 5:00 submission deadline means just that. It does not mean 5:01 or 5:15. It means that if an important client is waiting to see a finished presentation at 9:00, the presentation is ready to go at 9:00 sharp (so, for example, the client is not waiting while people race around trying to set up the presentation).
      • Does a person do the appropriate background work (e.g., are specification documents read completely and thoroughly)?
    I will be explaining the level of professionalism I expect from my students, and the consequences (including grade penalties) for failing to meet those expectations.
  • Pre-requisites: CMSC 221 is a pre-requisite for this course.
  • Lectures: Notes for lectures are posted prior to class on the ``slides'' column of the course web page. I recommend that you make it a habit to download these notes before hand. Having the notes means less note taking on your part, which should allow you to better focus on the lectures (at least that is the theory). Please note that while the lecture notes are fairly comprehensive, their primary purposes are to free you from having to copy everything I write on the board, and to provide me with an outline of the topics I wish to cover. Thus what I write or say in lecture will not exactly mirror the content of the notes.

  • Labs:

    This course has a formal laboratory component. Though done remotely this semester, you are expected to attend each lab for the entire 50 minute lab period with video enabled!. When completing labs, students will work in teams of two. If we have an odd number of students in the class, then each week one student will work alone. Students who are required to work alone will work alone at most once during the semester.

    Labs are due at 5:00 pm on the night prior to the next lab (for this course, that means 5:00 pm Thursday evening).

    Both members of a 2-person (or 3-person for some labs) team receive the same grade.
    One final note: 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.


  • Reading: You are strongly encouraged to have read, prior to lecture, the material corresponding to the topic covered (should there be such material listed). Doing so allows you to raise question during lecture as the material is being presented. There are two advantages to this: 1) It allows your classmates to hear discussion of the issue, and 2) it potentially saves you a trip to my office during office hours. Most important, it's a better way to learn. Much of your learning in life will be accomplished via reading, so it's good to get in the habit now. Moreover, no lecture, no matter how good (or bad, as the case may be) will proceed at a pace that is perfect for every student (or any student, for that matter). Reading the material prior to lecture allows you to spend time on those concepts that you find confusing, and quickly pass over those concepts you find easy. And as said above, it allows you to ask questions about concepts that may remain confusing even after careful reading and consideration.
  • Attendance Policy: Regular attendance for the entire class time is expected! Over the past few years I've noticed a disturbing trend -- some students disappear for weeks on end. So that you are aware, during "normal" times, CS program policy states that students who miss more than 4 total sessions (including lecture and lab) receive a grade of V for the course. I typically strictly adhere to this policy! I only mention this now because it shows how important we consider attendance to be in order for students to succeed in the course. (Please see some other reasons below.) COVID changes to attendance have removed the V grade and the punitive incomplete as a grading option. However, be aware that you can still fail this course should you miss too many lectures (and to be clear, students who have to attend remotely for legitimate reasons are not counted as being absent).

    Of course this is not a normal semester. Because of that, all faculty are required to take attendance AND have a record of where students are seated (for potential contact tracing purposes) for every class session. For this reason, I will assign seats on the first day of class. You will sit in those seats every day that you attend, because I will use the seating chart to take attendance! I note that this is a Virginia state requirement in response to the COVID situation. It is not something I devised.

    If you are one of those students who wonder why attendance is necessary if you are meeting the required goals of the course, then I would ask why you are at UR and not enrolled in an online university. Here are some reasons.

    • At some point in the future, you may ask for a reference or letter for a job or graduate school. In that letter I will be expected to comment on your demeanor during lecture, the quality of your comments (and whether you regularly comment), whether you are engaged in learning the material (as opposed to surfing the web from the back of the room), your interactions with your classmates, and your general level of participation.
    • Showing up for class, on time and ready to work, is an indication that you have the necessary discipline to succeed in this field.
    • Though slides and any texts or papers are thorough, they do not cover everything. Nor are they always effective at communicating the primary ideas and takeaways from the material. This is what I provide. If you're not in class to hear it, you likely won't know it.

    If you should miss a class due to illness, you are responsible for viewing the Zoom recording of the session(s), which will be found in the course Blackboard pages.


    Regarding arriving to class late, in accordance with the idea of professionalism mentioned above, I expect students to arrive at class on time (whether attending in-person or remotely). I do take attendance at the beginning of every meeting (lecture and lab). If you arrive to class late (meaning after I take attendance) it will count as half an absence. I have mentioned this in class before: Yes, sometimes events occur that cause one to be late. But students who arrive consistently late to class are sending the message (even if they do not intend to) that this course is not sufficiently important. After all, would you arrive late to a meeting with your corporate CEO? If not, then why is it that it's OK to arrive to class late? I hope that gives you something to think about.
  • Remote Attendance: Though everyone is attending remotely this semester, I will still be taking attendance. I expect that each of you will be ``present'' meaning video enabled if you are attending synchronously. If you don't feel like providing the class with a visual of your venue (certainly understandable), then please choose an appropriate background.
  • Laptop/Smart phone policy Please keep cell phones silenced and put away (not on the desk, or in your notebook, or in your lap (we can see you texting)). In the rare event that you need to be available for emergency phone calls, please talk to the instructor about it before class. If you take notes on your computer, please stick to course related work. Before class begins, please close all programs not related to the class including any email clients, Facebook, on-line shopping, ESPN, etc. You may think you are able to multitask, but the scientific evidence suggests otherwise. Also, multitasking on your computer is likely distracting to others behind or next to you (there is scientific evidence to support this too). For more information: href=http://www.sciencedirect.com/science/article/pii/S0360131512002254
  • COVID-related Policies:
    • We are facing a challenging situation in which all of us are called on to make a good faith effort to be flexible and to make decisions in the best interest of the community, including staying home when sick. Students who are sick should not attend class, will not be required to provide formal documentation from a health care provider, and will not be penalized for absences.

      However, students must:
      • Notify instructors in advance of the absence, if possible.
      • Contact the Student Health Center if sick.
      • Keep up with classwork and attend online class sessions if they are able to do so.
      • Submit assignments digitally on time whenever possible.
      • Work with their instructors to try to reschedule any missed assignments.
      • Stay in close communication with their instructors.

      This attendance policy puts everyone on their honor. It requires that faculty and instructors trust the word of their students when they say they are ill, and it requires that students report the reason for their absence truthfully. Falsely reporting a reason for an absence is an honor code violation.

    • Because some students will be studying remotely, and others may have to due to quarantine, all lectures will be live streamed via Zoom, as well as recorded. The recordings will be available on the course Blackboard page. This is, of course, also an advantage for students who have attended in-person: you have the opportunity to go back through the lectures at whatever pace works for you! Regarding these recordings, by attending the course you are implicitly agreeing to the following:

      Students shall not:
      • Disclose, share, trade, or sell class recordings with/to any other person, organization, business, or institution; and/or
      • Post/store these recordings in a location accessible by anyone other than the student, including but not limited to social media accounts.

      Students must also comply with any instructions or directions from their faculty regarding the use of such recordings.
      Students are required to destroy any recordings that were made when they are no longer needed for student's academic work.
      Failure to abide by this policy will be a violation of the Standards of Student Conduct; such issues will be sent to the appropriate University Conduct Officer.

    • Masks: Per university policy, masks must be worn at all times when in the classroom and upon entering and leaving tne classroom. Of course, a consequence of this is that students may not eat or drink when in lecture.

    • Be Flexible: University administrators, staff, and faculty have done our best to anticipate issues that may arise this semester. But this is a new experience for all of us. For this reason, it is necessary that we all demonstrate some flexibility. Some of the policies in this syllabus may need to be changed to accomodate contingencies that arise. Please be aware of this, and prepared for what will likely be more change than required during a normal semester.


  • Grades:

    Grade Component Date Percent of Grade
    Exam 1 Distributed Friday, Feb. 19. Due Friday Feb. 26, 5:00 p.m. 15%
    Exam 2 Distributed Friday, March 26. Due Friday April 2, 5:00 p.m. 15%
    Final Programming Project Due Monday April 26, 5:00 p.m 20%
    Labs N/A 30%
    Final Examination Distributed Friday, April 30. Due Wednesday, May 5, 5:00 p.m. 20%


    Final grades will be adjusted, if necessary, to reflect the following ideal as much as possible.
    • An ``A'' means that your knowledge of this material is exceptional. When you have to build on the material that you learned in this class in your future classes, then you will be able to do so easily.
    • A ``B'' means that you have a good understanding of most of the material, but may have some gaps in your understanding, or are not as comfortable with some aspects of it as you might be. As such you may want to review this material before taking more advanced classes. You will be able to apply the material in this class, but you may have difficulty doing so with some of it.
    • A ``C'' means that your knowledge of this material is average/mediocre. You will likely struggle to apply this material in your future classes, as you have struggled learning the material in this class.
    • A ``D'' means that you are not ready for future classes that builds on material from this class.
    • An ``F'' means that in addition to the conditions for a ``D'' grade, you also didn't try and/or failed to hand in work.
    • A ``V'' means that you missed too many classes to pass the class, regardless of your performance on the work.

  • Exams: All exams in this course will be take home, distributed electroncially, and submitted electronically. I have not yet decided on the exact format and time limit requirements. This is to be determined. Students who fail to submit an exam by the required deadline and prior permission from me to take the exam at a different time, will receive a grade of zero for the exam. Of course, I am also a realist and human -- if there is an illness related reason for being late with submission (e.g., being placed quarantine, isolation, or the like), then there will be no penalty for that. For each exam, you will be allowed to create a one page "cheat sheet" --- you may fill both sides of a single 8.5'' x 11'' page of paper with anything you feel may help you on the exam, with the caveat that your print (or handwriting) font must be no smaller than 9pt. Your cheat sheets should be submitted as part of your exam.

  • My ``exam discussion policy": Once a student has begun an exam, I will answer (for that student) only those questions that concern clarification of the intent of a problem. That is, I will not answer questions that seek to determine whether the problem was done correctly, or whether a particular approach is wise (or unwise).


  • Homework: There will be approximately five homework assignments. Two each corresponding to each of the midterms, one dedicated to material that only appears on the final. For each assignment, I will choose a random selection of problems to grade. Of course you will not know beforehand which problems will be graded.

    Homework Submission: You may hand write your homework, in which case it must be legible! And to be clear, the term legible means one should be able to read it without a magnifying glass or any more effort than reading a well typeset book. You are also welcome (and encouraged) to complete your homework using a typesetting package (e.g., LaTeX), when that is reasonable (often, when problems require diagrams, typesetting it is not reasonable). Regardless of the method you choose to use to complete your homework, you must submit a hard copy to either my department mailbox or my office (mailbox on my office door) by the due date and time. Do not email me your homework! (I will ignore homework received via email.) Multi-page homework must be stapled. Also, your homework must include the work you did in determining your solution.

    LATE HOMEWORK WILL NOT BE ACCEPTED!!! In past courses, I have sometimes allowed late homework to slide. I can't in this course. There is so much material to grade that I can't allow folks to hand stuff in late.

  • Labs: The first four labs require MIPS assembly programming. Your code must assemble and run correctly on the QTSpim software package, either on one of the department lab machines or on your own laptop (I require a laptop since you need to demonstrate your solution).

    Lab 5 is coded in C/C++. It must compile without warnings using the GNU g++ compiler and the -Wall flag on the department linux machines.
  • Final Programming Project:This 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. Programs should be submitted to me by sending an email to the appropriate submission email address with your single project tar file as an attachment, which will automatically load the submission to the appropriate Box folder. PROGRAMS NOT SUBMITTED TO THE CORRECT BOX FOLDER AND/OR PROGRAMS THAT FAILS TO COMPILE ON THE LINUX CLUSTER WILL RECEIVE A GRADE OF 0. Note also that when grading programs, they must run ON THE LINUX CLUSTER , not on your laptop, tablet, etc.

  • Lab, Project, and Test Code Submission: If you have taken a course with me recently, then this procedure should be familiar. At the beginning of the semester I will put a file called ``submission_email_addresses.txt'' in the "content" section of the course Blackboard page (NOT the course web page). All work should be submitted as a single tar or zip file. In order to submit work, you send an email, with your single submission file as an attachment, to the email address listed for that assignment. This has the effect of depositing your submission in the appropriate Box folder. Note that ALL submissions must include some indication, in the title of the submitted file, of who the submission is from.
    SUBMISSIONS NOT PRESENT IN THE CORRECT BOX FOLDER AT THE SUBMISSION DEADLINE RECEIVE A GRADE OF 0. So, if you send email to my regular email, or submit your work using the wrong email address (so it ends up in the wrong Box folder), then it is treated as if you have not submitted the work.
  • Two different kinds of Box folders! Know the difference! I use two different kinds of Box folders in this course (and in all of my courses). One class of folders is for work submission (in this course, that means labs, projects, and at times part of exams). Material is submitted to this class of folders by sending an email to a project specific address. Those addresses are contained in a file in the content on the course Blackboard page. Everyone in the class submits to the same project specific Box folder.
    The other class of folder are individual folders shared between myself and each student. The folder I share with you in this manner is visible only to you and myself (and possibly a grader, but we don't have one for this course). These individually shared folders are exclusively for grade forms! They are not to be used for submission of projects. If you accidentally place a project submission into your individual folder, I will not see it and will assume you have not submitted the project!
  • Extra Credit: There is none in this section of the course -- there is plenty of work to do without assigning extra stuff to push up your grade.

  • The Other Student Criteria: When grading tests and homework, I use the Other Student Criteria (OSC). All solutions must meet this. The Other Student Criteria states that a solution should provide enough written explanation so that another student in the class (who could not complete the assignment) could read the submitted material and, without asking questions, understand a correct answer.
  • The Myth of Grade Negotiation: I have noticed over the past few years a shift in the way students view grades on exams and assignments. A (somewhat vocal) minority of students view these grades as merely an initial offer in a process of negotation. That is a myth. The grade you recieve on assignments is final! The grades I assign are carefully considered. Attempting to earn an extra couple of points is a waste of your time and mine, as well as being orthogonal to the prime purpose of the course, which is to learn the material. I am very happy to meet to discuss assignments and exams so that you may better understand the material, but will not change your grade.
  • My "Managerial" Philosophy: I apologize for having to mention this, especially since you are almost all third or fourth years and thus do not need this clarification. Every once in a while, however, I encounter a student who tests the boundaries, and for that student, I like to have a few things in writing.

    My basic philosophy is this: You are adults. I treat you as if you are adults, and expect you to act as adults. For the 1 out of 100 students that does not understand what this means, here is a little clarification of some (though not all) of the ideals that this entails:
    • You begin assigned work in a timely manner (this includes reading).
    • You complete assigned work on time (this includes reading).
    • You complete assigned work and hand it in on time.
    • If an emergency arises (as they sometimes do) that precludes handing in work or taking an exam, you contact me before the work (or exam) is due.
    • You accept responsibility for your actions (and, as the case may be, your inactions).
    • Most important, just because some specific behavior is not mentioned here, that does not mean it's "OK" to engage in it. You know what reasonable expectations are for students, as do I. I treat you like adults and expect you'll act responsibly.

  • Incomplete Grade Options: There was a time a few years back when it was necessary for me to assign an incomplete grade only about once every two years, typically for a student who became ill late in the semester and needed to travel home to recover. It seems recently that there has been a rash of incompletes, to the point where no fewer than 25% of my CS 301 class two years ago required incompletes. So, I have had to revise my policy. There are only two reason why I will allow a student to receive an incomplete grade: they are ill and have to go home to recover (I expect verification from a doctor) or there is a death in the family late in the semester (I also expect to see verification, as unfortunately, there have been instances of students lying about this).
  • Collaborating on homework/programming assignments: Programming projects and homework may be discussed with others subject to the


    ``Empty Hands'' policy --- you may freely discuss ideas and approaches with other students subject to the restriction that each student must leave the discussion without any written or otherwise recorded material. In your homework write-up or source code, you must also document any person or source that you consulted for that project. Failure to comply with this policy will be treated as an Honor Code violation.

    One final note: some of the programming assignments for this semester may have been assigned in previous semesters. While you may consult previous class members concerning projects, you are not permitted, under any circumstances, to receive or view either hard copies or electronic copies of all or parts of their project submissions! You can use your friends to get help, but they should not be providing you with their code (just as in an English class, you might discuss the works of Dickens with a friend, but should not use the paper that they submitted as the basis for your own submission).

  • Note: Many of the handouts, presentation slides, assignments, and exam problems used in this course use material borrowed from Professors Lawson and Denny. I am particularly grateful to them for generously allowing me to use their material as the basis for my material (including, in many cases, simply using their material word-for-word).

  • Disability Support Services: If you believe you have a disability requiring an accommodation, please follow the procedures listed on the University of Richmond Disability Services website [https://disability.richmond.edu] to begin the accommodations process as soon as possible. If you already have a University of Richmond Disability Accommodation Notice (DAN), please inform me as soon as possible, so that I am aware of your accommodations. No student will receive accommodations of any kind without a DAN.
  • Additional University Resources: If you experience difficulties in this course, do not hesitate to consult with me. There are also other resources that can support you in your efforts to meet course requirements.

    • Academic Skills Center (http://asc.richmond.edu), 289-8626 or 289-8956): Assists students in assessing their academic strengths and weaknesses; honing their academic skills through teaching effective test preparation, critical reading and thinking, information conceptualization, concentration, and related techniques; working on specific subject areas (e.g., calculus, chemistry, accounting, etc.); and encouraging campus and community involvement.

      Hours at the Center are: Sunday through Wednesday 3:00-9:00 p.m. and Thursday 3:00-7:00 p.m. On-call tutors are also available.

    • Boatwright Library Research Librarians (http://library.richmond.edu/help/ask/ or 289-8876): Research librarians assist students with identifying and locating resources for class assignments, research papers and other course projects. Librarians also provide research support for students and can respond to questions about evaluating and citing sources. Students can email, text or IM or schedule a personal research appointment to meet with a librarian in his/her office on the first floor Research and Collaborative Study area.

    • Career Services (http://careerservices.richmond.edu/ or 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 schedule an appointment with a career advisor early in your time at UR.

    • Counseling and Psychological Services (https://wellness.richmond.edu/caps/index.html or 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 short-term counseling and psychotherapy, crisis intervention, psychiatric consultation, and related services.

    • Speech Center (http://speech.richmond.edu or 289-6409): Assists with preparation and practice in the pursuit of excellence in public expression. Recording, playback, coaching and critique sessions offered by teams of student onsultants trained to assist in developing ideas, arranging key points for more effective organization, improving style and delivery, and handling multimedia aids for individual and group presentations.

    • Writing Center (http://writing.richmond.edu or 289-8263): Assists writers at all levels of experience, across all majors. Students can schedule appointments with trained writing consultants who offer friendly critiques of written work.

Last Modified: August 19, 2019 Contact: Doug Szajda