Instructor | David Ferry, Homepage |
Course Web Site | http://cs.slu.edu/~dferry/courses/csci2510/ |
Course meeting times | Monday, Wednesday, & Friday from 1:10 pm - 2:00 pm, Ritter Hall 314 |
Midterm exam |
October 4th, in class |
Final exam |
Wednesday, Dec. 11th, 12:00 PM - 1:50 PM |
Office hours | See my schedule |
Contact | You may contact me in person during office hours or during class time, or you may email me at dferry@slu.edu. I am also available to meet by appointment, see my schedule. |
Modern software architects and engineers care every bit as much about where and how software executes as they do about what the software does. Modern systems are expected to be performant, scalable, efficient, maintainable, secure, and more. These are challenging problems, because they are less concerned with what the system does, and much more concerned about how a system does it.
Most requirements for software systems are written as a set of of functional constraints in the sense of a mathematical function. A program is seen as a tool for transforming inputs into outputs, and the program is the function that accomplishes that transformation. However, the challenges listed above are non-functional constraints and cannot be expressed in such a manner. If they were, our life would be easier! We could simply write the bit of code that ensures our system is scalable, and then we'd be done. Instead, verifying that a system is scalable requires checking that the entire system is scalable- which is not only a global qualification, but an entirely non-obvious one at that.
Course "Big Questions"
The five elements of this course are lectures, studios, quizzes, labs, and exams. Studios are short assignments intended to be completed primarily within class time and to augment lecture topics. Labs are longer assignments that will ask students to apply and analyze system mechanisms. Expect a lab assignment approximately every two weeks.
Topical outline:
Readings- We will do readings out of course texts as well as from other sources. These are to be completed by class on the day they are listed on the schedule, as they may form the basis for the activities in class that day.
In-Class Participation- Many class periods I will have you attempt smaller or larger problem sets or programming challenges. These will be submitted via Canvas and must be submitted by the end of class in order to recieve credit.
Studios- Computer Science is an eminently practical discipline, and studios are daily assignments intended to complement and reinforce class material with daily practice.
Labs- A major experiential learning component of this course is for each student to do substantial programming activities themselves. A technical understanding of how distributed medium-scale systems are implemented will show students for themselves how such systems really work at a technical level.
Catalog Description: An exploration of computing systems with a strong emphasis on how systems interact with each other. Topics will include concurrent and parallel programming, network communication, and computer security. In addition to foundational knowledge, the course includes simulating, benchmarking, and testing such systems.
Please see the instructor if you're uncertain about your preparation for this course.
Date | Day | Topic | Readings | Studios | Labs |
---|---|---|---|---|---|
Aug 21 | Wed | Introduction Syllabus |
Make sure you can login for next time | ||
Aug 23 | Fri | Intro to Systems Programming in C | Studio 01 | ||
Aug 26 | Mon | Intro to Hopper, Git, and Github | |||
Aug 28 | Wed | C Programming Arrays and Strings in C Pointers |
Studio 02 | ||
Aug 30 | Fri | Sick Day | |||
Sep 02 | Mon | Labor Day - No Class | |||
Sep 04 | Wed | C Programming File Input and Output |
Studio 03 Studio 1 Due |
Lab 1 Assigned | |
Sep 06 | Fri | Lab 1 Discussion (demo code from class) |
Studio 04 Studio 2 Due |
||
Sep 09 | Mon | System Calls | |||
Sep 11 | Wed | System Calls - Continued | Studio 3 Due | ||
Sep 13 | Fri | Processes | Studio 4 Due | Lab 1 Due | |
Sep 16 | Mon | fork(), exec(), wait(), Process Creation |
Studio 5 | Lab 2 | |
Sep 18 | Wed | Lab 2 Discussion | Studio 6 | ||
Sep 20 | Fri | Pipes, stdin , stdout fork_demo.c pipe_demo.c strtok_demo.c |
Studio 7 | ||
Sep 23 | Mon | File descriptors, dup2() dup2_demo.c |
Studio 5 Due | ||
Sep 25 | Wed | Wellness Day - No Class | |||
Sep 27 | Fri | ||||
Sep 30 | Mon | ||||
Oct 02 | Wed | Exam Review | Studio 8 Due Studio 9 Due |
||
Oct 04 | Fri | Midterm Exam | |||
Oct 07 | Mon | Threads, Concurrent Programming | Studio 8 Studio 6 Due |
||
Oct 09 | Wed | Pthreads Interface threads.c |
Studio 9 Studio 7 Due |
Lab 2 Due | |
Oct 11 | Fri | Lab 3 Discussion crypt_demo.c |
Lab 3 Assigned | ||
Oct 14 | Mon | Sick Day | |||
Oct 16 | Wed | Sick Day | |||
Oct 18 | Fri | Lab 3 Discussion | |||
Oct 21 | Mon | Race Conditions (PDF) |
Studio 10 |
||
Oct 23 | Wed | Locks, Mutexes, Atomicity | Studio 11 |
||
Oct 25 | Fri | Fall Break - No Class | |||
Oct 28 | Mon | Deadlock, Deadlock Detection | Studio 10 Due | ||
Oct 30 | Wed | Parallel Algorithms, Work and Critical Path |
Studio 11 Due | Lab 3 Due | |
Nov 01 | Fri | Parallel Matrix-Multiply Parallel Array-Sum (Associative Reduce) |
|||
Nov 04 | Mon | C++ Threads and Atomics, OpenMP |
OpenMP Studio | ||
Nov 06 | Wed | ||||
Nov 08 | Fri | Lab 4 Discussion | OpenMP Studio Due | Lab 4 | |
Nov 11 | Mon | OSI Model of Networking | |||
Nov 13 | Wed | Physical and Data-Link Layers | |||
Nov 15 | Fri | Network Layer | |||
Nov 18 | Mon | Transport Layer | |||
Nov 20 | Wed | Sockets Demo server.c client.c |
Lab 4 Due | ||
Nov 22 | Fri | Lab 5 Discussion | Linux Sockets | Lab 5 Assigned | |
Nov 25 | Mon | Session, Presentation, and Application Layers | Fileserver | ||
Nov 27 | Wed | Thanksgiving - No Class | |||
Nov 29 | Fri | Thanksgiving - No Class | |||
Dec 02 | Mon | Security Concerns - CIA | |||
Dec 04 | Wed | Permission Domains and Permission Management | |||
Dec 06 | Fri | Bell-LaPadula and Biba Models for security | Lab 5 Due | ||
Dec 11th | Wednesday | Final Exam |
All studios and labs will be submitted via Github repositories managed through Github Classroom. The link for each assignment will create and populate a starter repository for you to submit your code. Your work must be in the appropriate location for the instructor to find it and count it for credit.
There is no required or reccomended textbook for this course.
Activity | Grade Percentage |
---|---|
Attendance | 10% |
In-Class Participation | 10% |
Labs | 40% |
Studios | 20% |
Midterm and Final Exams | 10% each |
Grading is done on a straight scale (uncurved). The following scores are guaranteed. The grading scale may be curved upwards (in your favor) at the discretion of the instructor.
Work assigned in this course, is expected to be completed individually. The sharing of written work or significant portions of code between students is strictly prohibited.
Successful students attend all or mostly all class sessions. This is true in my experience and has been demonstrated in large scale studies as well. In that study, even students who attended nine out of ten class periods had measurably lower class performance than those who attended all classes. However, there is no attendance requirement for this class, and you do not need to get permission when you do miss class. You are an adult and have the freedom to manage your time in whatever way you feel is most useful. Job interviews, conferences, tests in other courses, etc. are all reasonable cases for being absent.
Attendance grade will be determined by taking roll call at the start of class. For credit, you must be in class and respond when your name is called. This will happen approximately 10 times over the course of the semester.
In-Class Participation grade will be determined by responses to online surveys or submissions of in-class work to Canvas. Such activities can only be submitted during class time. Once the submission window closes these activities can no longer be submitted and cannot be made up. Please make sure to participate and click "submit" on all such activities!
Note that in-class assignments such as group work, discussion groups, or attendance assignments cannot be made up outside of class without prior approval from the instructor. Major activities such as quizzes or tests will be listed on the course schedule with ample time to prepare (i.e. there are no "pop quizes").
If you do miss class you should refer to the course schedule to see what was missed and arrange to get course notes from another student. I am always happy to answer questions but I do not repeat full class periods in office hours.
Three really important points:
Recent surveys of student behavior suggest that 80% of computing students are using GenAI as a replacement for internet searches, to learn course concepts, or to help troubleshoot faulty code. These informational purposes are allowed and encouraged! GenAI has a wonderful ability to immediately provide you relevant and personalized information in a way that internet searches do not. Searching an error code on Google, for example, will return dozens of results about dozens of people all with their own individual problems, and then you have to sift through all that information to find the one answer that is meaningful to you. In that sense, GenAI can be thought of as a super search engine. As a student, this helps you learn things faster. That's good!
However, GenAI can also be used to cheat. You can ask GenAI to write your program for you, or copy-paste your program and ask it to fix your bugs. That's bad! You won't understand the problems, you won't understand the solutions, and if I ask you to explain your code you won't even be able to tell me how your code works. As a student, this is self-destructive and prevents you from learning.
In general, you are permitted to use GenAI to help yourself learn faster. You are forbidden using GenAI to do your work for you. This is not actually a complicated policy! At the risk of horribly anthropomorphizing technology, imagine GenAI is a human friend sitting next to you. You already understand what kinds of questions are acceptable and which are not. Asking your friend to explain a programming language feature is not cheating. Asking your friend what an error message means is not cheating. Asking your friend to write code for you is cheating. Giving your friend your code and asking them to fix the bugs is cheating. Asking to see your friend's solution and writing your own version is cheating. The fact that you may be asking a GenAI system instead of a human friend does not change whether those things are acceptable or cheating.
If it would be OK to ask a human friend, it's OK to ask ChatGPT. If it would be cheating to ask a human friend, then it's cheating to ask ChatGPT (or Google Gemini, or Github Copilot, etc.).
A few explicit rules:
If you have any questions or want any clarifications to this policy, then please ask me. If you find yourself in an uncertain situation, then please ask me and let me give you advice. This is a brave new world for all of us, and I'm not pretending that I have everything already figured out. I am very willing to be lenient with well-intentioned students who are upfront about how they're using the technology.
Academic integrity is the commitment to and demonstration of honest and moral behavior in an academic setting. Since the mission of the University is "the pursuit of truth for the greater glory of God and for the service of humanity," acts of integrity are essential to its very reason for existence. Thus, the University regards academic integrity as a matter of serious importance. Academic integrity is the foundation of the academic assessment process, which in turn sustains the ability of the University to certify to the outside world the skills and attainments of its graduates. Adhering to the standards of academic integrity allows all members of the University to contribute to a just and equitable learning environment that cultivates moral character and self-respect. The full University-level Academic Integrity Policy can be found on the Provost's Office website at: https://www.slu.edu/provost/policies/academic-and-course/academic-integrity-policy.pdf.
[last updated: May 2024]
Students with a documented disability who wish to request academic accommodations must formally register their disability with the University. Once successfully registered, students also must notify their course instructor that they wish to use their approved accommodations in the course.
Please contact the Center for Accessibility and Disability Resources (CADR) to schedule an appointment to discuss accommodation requests and eligibility requirements. Most students on the St. Louis campus will contact CADR, located in the Student Success Center and available by email at accessibility_disability@slu.edu or by phone at 314.977.3484. Once approved, information about a student’s eligibility for academic accommodations will be shared with course instructors by email from CADR and within the instructor’s official course roster. Students who do not have a documented disability but who think they may have one also are encouraged to contact to CADR. Confidentiality will be observed in all inquiries.
Note: due to accreditation requirements, regulatory differences, and/or location-specific resources, the School of Law, the School of Medicine, and SLU Madrid have their own standard language for syllabus statements related to disability accommodations. Faculty in those units should seek guidance for syllabus requirements from their dean’s office.
[last updated: August 2023]
The Student Success Center (SSC) supports students in reaching their goals in and out of the classroom. Providing a variety of resources, the Student Success Center houses both the Center for Accessibility and Disability Resources (CADR) and Academic Support, which includes Tutoring, Supplemental Instruction, University Writing Services, and Student Success Coaching. The Student Success Center is located in the Busch Student Center, Suite 331, and students can make an appointment with any SSC resource via EAB Navigate. To learn more about the Student Success Center and its resources, please visit: https://www.slu.edu/life-at-slu/student-success-center/index.php.
[last updated: August 2023]
University Writing Services offers one-on-one consultations with trained writing consultants from different disciplines who help with everything from brainstorming, outlining, and proposing research questions to documenting sources, revising, and implementing feedback. These consultations can take place in-person, asynchronously, or via Zoom and can be scheduled through EAB Navigate – StudentLinks to an external site.. Getting feedback benefits writers at all skill levels on different writing projects (including but not limited to class assignments, conference papers, cover letters, dissertations, group projects, multimedia assignments, personal statements, senior capstone projects, short answer questions on applications, speeches, and theses). For additional information, visit https://www.slu.edu/life-at-slu/student-success-center/academic-support/university-writing-services/index.php or send an email to writing@slu.edu.
[last updated: August 2023]
The University Counseling Center (UCC) offers free, short-term, solution-focused counseling to Saint Louis University undergraduate and graduate students. UCC counselors are highly trained clinicians who can assist with a variety of issues, such as adjustment to college life, troubling changes in mood, and chronic psychological conditions. To make an appointment for a wellness consultation, call 314-977-8255 (TALK), or visit the clinic on the second floor of Wuller Hall. For after-hours needs, please press #9 after dialing the clinic number.
[last updated: April 2024]
With our Jesuit commitment to cura personalis, the University sees your academic success as connected to your health and well-being and provides resources to support your holistic wellness.
All students experience stressors and challenges at some point, and seeking support is both normal and beneficial. Such challenges may be the result of academic concerns (such as those related to particular assignments or content in a course), or they may be more personal in nature (such as concerns related to relationships, mental health, medical issues, loss, identities, alcohol or drugs, housing or food security, finances, or local/world events, among other things). If you experience these or other difficulties that are impacting your well-being and/or academic work, please consider seeking support from the resources available to you.
If you or someone you know is experiencing a crisis: please consult Crisis Support and Warning Signs on the University Counseling Center website or call the University Counseling Center at 314-977-TALK (8255) and press #9 to be connected to a behavioral health nurse 24/7.
[last updated: April 2024]
Students in personal or academic distress and/or who may be specifically experiencing challenges such as securing food or housing, or having difficulty navigating campus resources, and who believe this may affect their performance in the course, are encouraged to contact the Dean of Students Office (deanofstudents@slu.edu or 314-977-9378) for support. Furthermore, please notify the instructor if you are comfortable in doing so, as this will enable them to assist you with finding the resources you may need.
[last updated: August 2023]