GWU

CS 3410

Systems Programming

GWU Computer Science

Class Information


Latest Announcements

Important notes from Piazza will also be placed here

Welcome to cs3410!!
Complete setup!

Please complete the setup indicated in lab 0 and lecture 0!.
Also, Check the info about office Hours.


Information

These sections contain information about how the class is run

Professor: Pablo Frank Bolton (pfrank at gwu)
Research interests: Human-Robot Interaction, Robotic Perception, STEM education
Contact for Class stuff: Use Piazza first (see Course Materials), otherwise, reach out on office hours if possible. If you must, you can also email me.

Office Hours: Thursdays 6 PM to 7 PM Online: Blackboard Collaborate Ultra.

Office Hour Rules:

  • Office Hours will be thematic. That means that we will discuss 3 or 4 different subjets per session.
  • If you want some concept reviewed oor an example analyzed, youo should submit a "theme" in the appropriate Piazza post before that week's office hours.
  • Whilee we can discuss some specific examples, these office hours are focused on clcarifying concepts and working examples (seen in class or past HW solutions).
  • We'll use the Main Course Room in BBUltra as a waiting room and we'll use a breakout group for any private help sessions.
  • Show up 5 minutes early.

Class Schedule (see required attendance rule on Grading Section):
  • Monday/Wednesday 10:00AM - 11:15PM Online : Blackboard Collaborate Ultra.

Lab (see required attendance rule on Grading Section):
  • Thursday (Sec 30) 9:35 – 10:50 am Online: Blackboard Collaborate Ultra
  • Thursday (Sec 31) 9:35 – 10:50 am Online: Blackboard Collaborate Ultra
TAs: TBD Office Hours: Check Piazza
UTAs: TBD Office Hours: Check Piazza
LAs: TBD Office Hours: Check Piazza

Objectives - In completing this class, students will...

  • Write software that can sense the environment and interact with it:
    • Collecting data from sensors.
    • Analyzing the sensor data.
    • Issuing commands to drive external devices.
  • Analyze software routines to determine if the physical limitations of the device affect code design. If necessary, rewrite software routines that will operate correctly within the device’s physical limitation constraints.
  • Write software and configure hardware that accounts for the noisy real-world environment. Examples include debouncing keystrokes and smoothing analog signals to account for spikes.
  • Design cyber-physical systems that are optimized for speed, computational power, reliability and energy conservation. The cyber-physical systems are composed of software and hardware components that utilize multiple data inputs and outputs.
  • Correlate desired changes in the functioning of an embedded system to the different parts involved in its construction (hardware, control software, inputs/outputs, memory, communications, etc.)
  • Demonstrate familiarity with key concepts in circuit design, digital logic, memory management, and the basics of operating systems, networking, and security
  • Demonstrate familiarity with the underlying system through the different APIs and abstractions, including system support for process and thread control, virtual memory, and networking.

Structure - This class is broken into two main activities: lectures and lab.

  • Lectures will discuss the main concepts of systems programming and will be divided into theoretical and practical sessions which will include significant portions of programming (in C). Everyone should have their computers set up and ready to code before every lecture.
  • Labs will help you jump into more significant programming projects. You will program during lab, and be responsible for deliverables.
  • Students are assessed through a combination of individual and group homework, online exercises, lab assignments, and exams. Attendance of both labs and lectures is mandatory (attendance during COVID-19 will be evaluated a bit differently, see Grading).

Prerequisites:

  • CSCI 2113 Software Engineering
  • CSCI 2461 Computer Architecture 1

Responsibilities - Students must

  • Attend all classes unless you are sick or there is an emergency. In these cases, please contact the professor. During COVID-19, See Special note on grading.
  • Interact, ask questions, and generally participate in class discussions. Participation is a graded part of the course.
  • Attend all labs, and do work assigned therein. During COVID-19, see Special note on grading.
  • Complete programming problems individually unless working in a group as specified on the assignment in which case you can work only with those group members. We do plagiarism detection so don't throw the course away.
  • When working with a group, it is essential that each group member pull their own, but also that other group members let them do so!

Course Philosophies.

Throughout the class, students should focus on adhering to the following general tenets:

  • Try it! -- A common question is "will this work", or "what will happen in this case". The only reasonable answer is "try it and see!" Your system will not blow up if you program incorrectly, and it is essential to learn to harness trial and error as one of the most effective ways to learn programming.
  • Know your sources, and use them! -- We will provide links and readings throughout the course and we will expect you to complete them in a timely manner.
  • Be proud of your code! -- Properly indent it, simplify it where you can to make it more understandable, and comment it where appropriate. You're taking part in an art that most often is shared, and it matters if others can understand your code!
  • Planning is the best debugging! -- You should never jump into code before thinking about it thoroughly. Design your programs by breaking them into independently implementable chunks, and write + debug them one by one.
  • Practice methodical debugging! -- Spend time "stepping though" your program, statement by statement to understand the logic behind it, and why it is ending up in a buggy state. Do not take a program that doesn't work, and modify smaller parts of it until it works. Understand why it doesn't work, and use that knowledge to change or even rewrite your program!

  • Webpage for the course (here) Class Info
  • Blackboard and Blackboard Collaborate Ultra (BBUltra)
  • ZyBooks:

    ZyBooks is a cloud based platform that allows students to complete readings and exercises on subjects related to the upcoming lectures and labs.

  • TinkerCad:

    TinkerCad is a cloud based platform that allows for the creation, assigning, completion, testing, and grading (manual or automatic) of simulated electronics assignments.

  • Piazza
  • For a detailed view of the Lectures and Activities, go to Schedule

Grade Calculation:

  • Participation: 5%
  • Prep Readings and Exercises: 10%
  • Labs: 20%
  • Homework Assignments: 20%
  • Project Assignments: 25%
  • Final Exam/Assignment: 20%

Late Submissions:

Normally, we do not accept any late submissions.

For this semester only, we will give partial credit for small HW assignments and projects (not for prep readings and exercises). The partial credit will be:

  • One day late: -25%
  • After one day, no assignment will be graded.

Submitting 1 second late is the same as a full day late. Plan ahead and submit early.



Prep Activities: Prep activities are readings and exercises that must be completed in TinkerCad or ZyBooks BEFORE the Lectures or Labs. These will be graded in the following way:

  • Reading Only: 100 IF completed the reading on time; 0 otherwise.
  • Reading And Exercises: 30% is the exercise grade and 70% is for simply completing the reading; 0 otherwise.
  • Once the deadline arrives, these will be Read-Only with no extensions.


Notes on Grading during COVID-19:

COVID-19 has caused several changes to how we run the class.


Participation instead of Attendance:

In lieu of attendance, we will be keeping track of in-class and in-lab (synchronous) participation or your participation using asynchronous methods (Piazza, Office-Hours, Codio exercises).

Synchronous vs Asynchronous Materials:

During COVID-19, some students might not be able to attend synchronously because of their timezone or their available technology.

If you will not be able to attend (any) lectures and/or labs, you need to register as a fully-asynchronous student with the instructor (send me a detailed explanation using a private message on Piazza). If you miss few synchronous lectures (one or two) then you don't need to do this.

We will offer asynchronous options that need to be completed in a timely manner. For these students, we will have a different way of counting participation:

  • You will be asked to participate in asynchronous team discussions using Piazza.
  • If asked to, you will be required to attend office hours.
  • You might be asked to complete oral interviews where you explain concepts or code, or do live coding.
  • You might be asked to submit video recordings where you explain a concept, explain your code, or present a diagram.

Just as you can do a google search for code online, it is trivial for us to do the same. We have caught numerous people cheating in the past in this way. If you feel pressured about an assignment, please come see me instead of cheating.

You are not allowed to collaborate on the homework and lab assignments unless explicitly told to. Group assignments require collaboration amidst each group, but no collaboration between groups is permitted. Please refer to the academic integrity policy linked from the course web page. This policy will be strictly enforced. If you're having significant trouble with an assignment, please contact me. Please see: Academic Integrity Policy

Anonymous Feedback Form


We will add a link inside blackboard to an anonymous feedback form so you can let us know if there is anything getting in the way of your learning. You will find it in the blue left-hand side menu: