Welcome to CS 580U: Programming Systems and Tools!
The purpose of this course is to prepare students who do not have C programming experience to handle the coursework for the core classes for a graduate degree in computer science.
The target audience member is a student who has a background programming in one or more procedural languages other than C (e.g. Python, Java, Rust, etc.).
This course makes no assumptions about pre-existing knowledge other than that you understand the high level theory of programming langauges: i.e. syntax, structure, control flow, data models.
I hope you find this course useful to you, both now as a student, and as a computer scientist or software engineer going forward.
- Instructors
- Course Information
- Class Policies
- Academic Integrity
- Managing Stress
- Public Health Policy
- Lecturer: Matthew Cole
- Email: mcole8@binghamton.edu
- Office: EB G20
- Google Calendar
- Grader: TBD
- Email: TBD
Tuesday/Thursday 10:05am - 11:30am, EB N01.
To be determined.
Review of programming concepts, programming environments, debugging tools, team software engineering and version control, design patterns and algorithms.
CS 580U: This course is a 3-credit course meeting 3 hours per week for a hybrid lecture/lab. This means that in addition to the scheduled meeting times, students are expected to do at least 9.5 hours of course-related work outside of class each week during the semester. This includes time spent completing assigned readings, finishing in-class exercises, studying for tests and examinations, preparing written assignments, and other course-related tasks. This course does not satisfy the MSCS long programming requirement.
Course | CS 580U |
---|---|
Credit Hours | 3 |
Contact Hours | 3 |
This course is designed to provide a solid foundation and background in computer security. In particular, upon successful completion of this course, you will be able to:
-
Understand the C programming language, to include syntax and idioms.
-
Utilize the GCC compilation toolchain including the C preprocessor and the ld linker
-
Employ debugging tools such as GDB and Valgrind, and testing frameworks such as CUnit to produce efficient, error-free code.
-
Perform content management using Git and forges such as Github.
-
Master data structures and algorithms needed for core courses such as computer architecture (CS 520) and operating systems (CS 550).
The course is divided in to two main topics covered by this course:
- The C Programming Language:
- Types, operators, and expressions
- Control flow
- Functions and program structure
- Pointers and arrays
- Input and output
- Structures
- Data Structures
- Vectors
- Linked lists
- Stacks and queues (including deques, circular queues)
- Trees (including binary search trees, priority queues, min/max-heaps and tries)
- Mappings
We will use the following texts in this course:
- (Recommended) The C Programming Language, Second Edition, Brian Kernighan and Dennis Ritchie (1988). ISBN: 978-0131103627
- (Recommended) The Art of Debugging with GDB, DDD, and Eclipse, Norman Matloff and Peter Jay Salzman (2008). ISBN: 978-1593271749
- (Supplemental) Programming in C, Fourth Edition, Stephen Kochan (2015). ISBN: 978-0321776419
- (Supplemental) Understanding and Using C Pointers, Richard Reese (2013). ISBN: 978-1449344184
I will provide lecture handouts in PDF format, as well as relevant supplemental materials through Brightspace. Additional materials will be added as appropriate.
There will be three types of evaluations:
Classwork:
One or more in-class programming exercises per lecture. These may be
completed during the remaining lab time after the associated lecture,
but in any case must be demonstrated in-class within one week for
credit.
Assignments:
Approximately eight programming assignments during the C tutorial lectures, and one assignment per data structure.
These will be automatically graded using a provided test suite, with partial credit
for the number of passed test cases.
Project:
If time permits, one end-of-course team long-programming project.
If time does not permit, the project’s weight will be distributed into the assignments.
I will give one midterm given during class hours, and one final exam scheduled during exam week. The final exam is comprehensive but will primarily cover the materials that were not covered in the midterm exam. You must take each exam during the scheduled period; I will not give makeup exams unless there is a very compelling reason.
Grading is done by calculating total points earned by each student weighted by assignment type. Each student’s total is then monotonically ordered, and groups of similar totals are created to award a final grade. The groups are roughly based on standard deviations from the median score, with a floor of “B-” for students who satisfactorily complete all evaluations and sit both exams.
Event | Number | Total Weight |
---|---|---|
Classwork | Approximately 15 | 15% |
Assignments | Approximately 10 | 40% |
Projects | 1 | 15% |
Exams | 2 | 30% |
My historical grade distributions have been as follows:
Estimated Class Percentile | Final Grade |
---|---|
∼84.1 (+1.0 sigma) | A |
∼69.1 (+0.5 sigma) | A- |
∼50.0 (median) | B+ |
∼30.9 (-0.5 sigma) | B |
∼6.7 (-1.5 sigma) | B- |
Note that class percentile is not synonymous with percentage of points earned.
This course has no prerequisites or co-requisites.
This course has the following restriction:
- Permission of Department (DP)
Must be enrolled in one of the following Majors:
- Computer Science 4+1 (17J)
- CS Artificial Intelligence 4+1 (17K)
- CS Cybersecurity 4+1 (17L)
- Computer Science (R12)
- CS Artificial Intelligence (R14)
- CS Cybersecurity (R15)
- Computer Science 4+1 (R1B)
- CS Artificial Intelligence 4+1 (R1D)
- CS Cybersecurity 4+1 (R1E)
- Computer Science (R92)
Grading all assignments in this course is very time consuming! Please make an effort to reduce this burden by doing the following:
-
Although you may use a personal computer with a development environment of your choice, your code must compile and run on
remote.cs.binghamton.edu
using the provided Makefile. -
Code must be well commented and consistently formatted. I encourage you to use tools such as delinters, beautifiers, and documentation engines.
Late assignments and projects may sometimes be accepted with penalty, which be 10% for the first half day, 10% for the second half day, and 10% per subsequent day unless otherwise negotiated with me (e.g. for illness, death in the family or other unfortunate circumstances which could not have reasonably been accounted for by the student). The Brightspace timestamp is the standard by which the grader will assign late penalties. Time stamps on your computer will not be considered.
I will generally not accept in-class exercises after the second class meeting subsequent to the class when the exercise was assigned without negotiating in advance (i.e. exercises from a Monday class must be demonstrated by the end of the next Monday). I discourage students from late adding the course. Nonetheless, if you do add the course late, I will grant one week from the date you are granted Brightspace access to make up late coursework.
It is your responsibility to ensure that the work submitted on Brightspace is complete and correct. Students who would like to correct a broken, incomplete, or empty submission will be charged the lateness penalty specified above to replace their submission.
In this course, I may give partial credit to partially correct answers. Should you dispute a partial credit, please be aware that we will not re-grade a single question in an assignment or an exam. All partial credits of the work will be re-examined. The new grade may be higher, lower, or stay the same. This new grade will not be changed. No regrading can be requested two weeks after the date when graded work is returned to students. The scores of your assignments will be posted on Brightspace after the assignments are graded. Please check your status on Brightspace periodically and make sure that there are no missing grades or errors. A missing grade at the end of the semester will indicate that the work has not been done.
Although I do not award a specific attendance or participation component to your grade, attending lectures is a vital component of this class. Lecture notes do not substitute for class attendance since (i) they do not contain all the details in terms of explanations and analyses, and (ii) significant parts of lectures, including discussions and in-class exercises, may not come from the lecture notes.
I ask that you respect myself and your fellow students by arriving on-time. Please enter as a group when timely arrival is not possible due to circumstances beyond your control (e.g. inclement weather, bus congestion or scheduling, etc.).
I do not mind if you use laptops, phones or tablets for note-taking. However, I ask that you respect myself and your fellow students by silencing them, and not showing distracting content on the display such as flashing light from games, movies or social media.
Please review the Computer Science Department’s academic honesty letter (http://www.cs.binghamton.edu/~ghyan/courses/CSHonestyLetterToStudents.pdf) and the Watson School academic honesty policy (https://www.binghamton.edu/watson/about/honesty-policy.pdf).
Students are encouraged to help one another and to form study groups. In Computer Science, one can often learn as much from your peers as from your instructors and teaching assistants. Furthermore, teaching something to someone else can often help solidify your own understanding! As long as the help is appropriate, please be generous with your time and expertise when helping fellow students. We will use the No Artifacts Rule as a guideline for appropriate help. Examples:
-
Discussing assignments in general terms does not leave an artifact, and is therefore appropriate.
-
Walking through an algorithm using pseudocode does not leave an artifact that can be submitted and is therefore appropriate.
-
Showing your code which you plan to submit leaves an artifact (the source code itself, which the other student could copy), and is therefore inappropriate.
-
Helping another student understand what a particular compiler error means or what is causing the error is appropriate as long as you do not actually fix the error.
-
Adapting boilerplate code or using IDEs/language servers are both appropriate because you are authoring the code. However directly copying code that someone else wrote and published online, or using AI tools such as Github Copilot to “pair program” are both inappropriate.
Each student must complete their own assignments individually (unless indicated otherwise by the instructor, such as team projects). Students submitting solutions (including code) that are determined to be “too similar” are likely to be punished equally and harshly. I reserve the right to use anti-plagiarism tools such as MOSS to catch cheating.
This syllabus constitutes your warning! Subsequent violations will incur the following penalties:
-
Automatic zero on the assessment in question, without possibility of re-submission.
-
Referral to Office of Student Conduct and course failure.
At all times I will de-stigmatize seeking care for mental health, the same as we do not stigmatize people for seeking care for their physical health. I also understand that being a student can be extremely stressful, particularly considering for many of you this is your first semester of graduate school. If you are experiencing undue personal or academic stress at any time during the semester or need to talk with someone about a personal problem or situation, I encourage you to seek support as soon as possible. I am available to talk with you about stresses related to your work in my class. Additionally, a wide range of campus resources are available to provide help, including:
- Dean of Students Office: 607-777-2804
- University Counseling Center: 607-777-2772
- Interpersonal Violence Prevention: 607-777-3062
- Office of International Student & Scholar Services: 607-777-2510
At all times, we will follow health and safety standards as published on the University’s guidance page at https://www.binghamton.edu/covid-guidance/index.html. If the University changes its public health policy, I will publish a modified syllabus reflecting these changes.
If you become symptomatic or have a positive test for COVID or another disease do not attend class or office hours, stay home and seek prompt medical evaluation. As each person experiences illness differently, we will handle absences, assignment deadlines, and exam schedules on a case-by-case basis. I do not expect a doctor’s note to excuse you from class, however I do ask that you communicate your absences as early as possible. I will be able to handle cases most leniently when you communicate early and propose a detailed plan to catch up.