haas/spring2026/sysprog/README.md
... ...
@@ -1,20 +1,22 @@
1 1
# spring2026/sysprog
2
+
2 3
# CSCS2730 Systems Programming
3
-## Syllabus / Course Homepage
4 4
5
-* Instructor: Matthew Haas (haas@corning-cc.edu)
6
-* Office: CHM123
7
-* Office Hours: T 10:00a-10:50a, W 1:30p-2:20p, R 10:00a-12:50p
8
-* In-person meeting details: CHM123 W 2:30p-3:20p
9
-* Class DESIG: sysprog
10
-* Class Chat: #sysprog on discord
11
-* Public Directory: /var/public/fall2025/SYSPROG
12
-* CRN: 30189
13
-* 'W' Drop Date: April 6, 2026
5
+## Syllabus / Course Homepage
14 6
15
-=> https://discord.gg/8eu3nKjUXX Discord invite
16
-=> projects.gmi sysprog projects page
17
-=> https://docs.google.com/document/d/1JsIuYeV5c72l5qaQEFOoNhJDYeaCv60U-kCKMaKzhv4/ SUNY CCC Syllabus Statements
7
+| Instructor: | Matthew Haas (haas@corning-cc.edu) |
8
+| Office: | CHM123 |
9
+| Office Hours: | T 10:00a-10:50a, W 1:30p-2:20p, R 10:00a-12:50p |
10
+| Class Meeting: | Online/Async, CHM123 W 2:30p-3:20p |
11
+| Class DESIG: | `sysprog` |
12
+| Class Chat: | `#sysprog` on discord |
13
+| Public Directory: | `/var/public/fall2025/SYSPROG` |
14
+| CRN: | `30189` |
15
+| 'W' Drop Date: | April 6, 2026 |
16
+| ----------------- | -------------------------------------------------------------- |
17
+| DISCORD invite: | [https://discord.gg/8eu3nKjUXX](https://discord.gg/8eu3nKjUXX) |
18
+| Projects page: | [https://lab46.g7n.org/haas/spring2026/sysprog/projects.md](https://lab46.g7n.org/haas/spring2026/sysprog/projects.md) |
19
+| CCC Syllabus Statements: | [https://docs.google.com/document/d/1JsIuYeV5c72l5qaQEFOoNhJDYeaCv60U-kCKMaKzhv4/](https://docs.google.com/document/d/1JsIuYeV5c72l5qaQEFOoNhJDYeaCv60U-kCKMaKzhv4/) |
18 20
19 21
## Course Description
20 22
... ...
@@ -30,14 +32,14 @@ consent.
30 32
31 33
Upon completion of this course, students will be able to:
32 34
33
-* better understand file I/O for efficient data processing
34
-* utilize capabilities built into the operating system
35
-* write programs that interact with and spawn processes
36
-* use pipes and sockets to communicate and share data
37
-* demonstrate knowledge of concurrency
38
-* design programs that handle signals
39
-* explore efficient solutions to data- and processing- intensive problems
40
-* utilize collaboration of resources to solve problems
35
+ * better understand file I/O for efficient data processing
36
+ * utilize capabilities built into the operating system
37
+ * write programs that interact with and spawn processes
38
+ * use pipes and sockets to communicate and share data
39
+ * demonstrate knowledge of concurrency
40
+ * design programs that handle signals
41
+ * explore efficient solutions to data- and processing- intensive problems
42
+ * utilize collaboration of resources to solve problems
41 43
42 44
## Assumptions
43 45
... ...
@@ -90,12 +92,12 @@ and knowledge, some derivation of society's and civilization's collective
90 92
body of experience and knowledge), and to be eligible to take a college
91 93
class, yes, SOME prerequisite knowledge is assumed, namely:
92 94
93
-* you are functionally literate in English
94
-* you know how to and can/will read (input/consume)
95
-* you know how to and can/will write (output/create/produce)
96
-* you know how to and can/will do math/computations
97
-* you know how to and can/will think
98
-* you know how to and can/will ask questions
95
+ * you are functionally literate in English
96
+ * you know how to and can/will read (input/consume)
97
+ * you know how to and can/will write (output/create/produce)
98
+ * you know how to and can/will do math/computations
99
+ * you know how to and can/will think
100
+ * you know how to and can/will ask questions
99 101
100 102
A student's (or learner's) absolute BEST tool is the question,
101 103
specifically the regular asking of them. You **NEED** to be regularly
... ...
@@ -144,31 +146,31 @@ Understanding Unix/Linux Programming: A Guide to Theory and Practice
144 146
by Bruce Molay
145 147
Publisher: Prentice Hall
146 148
ISBN: 0-13-008396-8
147
-=> http://www.pearsonhighered.com/academic/product/0,3110,0130083968,00.html URL to publisher page of book
148
-=> https://www.pearson.com/us/higher-education/program/Molay-Understanding-UNIX-LINUX-Programming-A-Guide-to-Theory-and-Practice/PGM190781.html Book URL
149
+[Public Book Page](http://www.pearsonhighered.com/academic/product/0,3110,0130083968,00.html)
150
+[Book URL](https://www.pearson.com/us/higher-education/program/Molay-Understanding-UNIX-LINUX-Programming-A-Guide-to-Theory-and-Practice/PGM190781.html)
149 151
150 152
## Technology Policy
151 153
152 154
The baseline qualifications for taking this course include you having a proficiency:
153 155
154
-* to type on a full-size computer keyboard (104-key or equivalent)
155
-* with basic computing concepts (files, storage, units of information)
156
-* to read instructions and available technical data in relevant theatres and domains
156
+ * to type on a full-size computer keyboard (104-key or equivalent)
157
+ * with basic computing concepts (files, storage, units of information)
158
+ * to read instructions and available technical data in relevant theatres and domains
157 159
158 160
... and an ability:
159 161
160
-* to readily ask questions
161
-* to take notes and later retrieve useful information from them
162
-* to recall important concepts and experiences
163
-* to work on class-related content outside of class
162
+ * to readily ask questions
163
+ * to take notes and later retrieve useful information from them
164
+ * to recall important concepts and experiences
165
+ * to work on class-related content outside of class
164 166
165 167
... and a willingness:
166 168
167
-* to attempt solving new and unfamiliar problems
168
-* to encounter new and unfamiliar concepts
169
-* to indulge in new and unfamiliar activities
170
-* to learn in new and unfamiliar ways
171
-* to work on class-related content outside of class
169
+ * to attempt solving new and unfamiliar problems
170
+ * to encounter new and unfamiliar concepts
171
+ * to indulge in new and unfamiliar activities
172
+ * to learn in new and unfamiliar ways
173
+ * to work on class-related content outside of class
172 174
173 175
## AI use policy
174 176
... ...
@@ -196,13 +198,13 @@ If you insist on using AI, you hereby acknowledge you assume
196 198
responsibility for its inherent perils and hazards it can cause you and
197 199
your progress/success in this class:
198 200
199
-* accept that you are putting yourself at risk of deeply sabotaging your learning journey, subjecting yourself to stagnant thought and limited perspectives, as you insulate yourself from the rigors of doing the actual work
201
+ * accept that you are putting yourself at risk of deeply sabotaging your learning journey, subjecting yourself to stagnant thought and limited perspectives, as you insulate yourself from the rigors of doing the actual work
200 202
201
-* accept that you will have to live with the awareness that the instructor and other suitably aware individuals in the course may lose some faith in your humanity
203
+ * accept that you will have to live with the awareness that the instructor and other suitably aware individuals in the course may lose some faith in your humanity
202 204
203
-* accept that, if you pass off AI-generated work as your own, and your work is questioned, **if you are unable to competently demonstrate your understanding, you risk losing any and all credit for that deliverable**
205
+* accept that, if you pass off AI-generated work as your own, and your work is questioned, **if you are unable to competently demonstrate your understanding, you risk losing any and all credit for that deliverable**
204 206
205
-* YOU are the student, YOU are the one here to do the work and learn.
207
+ * YOU are the student, YOU are the one here to do the work and learn.
206 208
207 209
AI prose is increasingly sophisticated and convincing. Yet there is a
208 210
difference between verbosity and competence. Learning to differentiate
... ...
@@ -214,10 +216,10 @@ when dealing with AI output.
214 216
The grading policy is broken down into 4 areas, totalling 104 points
215 217
(which will account for 100% of the grade):
216 218
217
-* Notes/Journal/Writing (13pts)
218
-* Projects (52pts)
219
-* Participation (13pts)
220
-* EoCE (26pts).
219
+ * Notes/Journal/Writing (13pts)
220
+ * Projects (52pts)
221
+ * Participation (13pts)
222
+ * EoCE (26pts).
221 223
222 224
Each area, as well as the overall grade, will be evaluated based on a sum
223 225
of accumulated points on each projects out of a sum of total points on
... ...
@@ -245,15 +247,15 @@ grading unit.
245 247
246 248
Letter grades are pegged to the following numeric values:
247 249
248
-* **A** (99.00+)
249
-* **A-** (93.00-98.99)
250
-* **B+** (87.00-92.99)
251
-* **B** (81.00-86.99)
252
-* **B-** (75.00-80.99)
253
-* **C+** (69.00-74.99)
254
-* **C** (63.00-68.99)
255
-* **D** (57.00-62.99)
256
-* **F** ( 0.00-56.99)
250
+ * **A** (98.00+)
251
+ * **A-** (92.00-97.99)
252
+ * **B+** (86.00-91.99)
253
+ * **B** (80.00-85.99)
254
+ * **B-** (74.00-79.99)
255
+ * **C+** (68.00-73.99)
256
+ * **C** (62.00-67.99)
257
+ * **D** (56.00-61.99)
258
+ * **F** ( 0.00-55.99)
257 259
258 260
Any calculated values in excess of two decimal places that may impact the
259 261
result is at the sole evaluatory discretion of the instructor (for
... ...
@@ -395,11 +397,11 @@ sanctioned for the course).
395 397
396 398
With that said, some additional aspects to keep in mind:
397 399
398
-* e-mails were designed to be plain text; don't make them into web pages
399
-* e-mails should always have an informative subject line
400
-* if you've got non-text files to include in an e-mail, just attach them
401
-* you've got many attachments? archive/compress them, attach the archive
402
-* plain ASCII text (UTF-8) is preferable over any enriched text format
400
+ * e-mails were designed to be plain text; don't make them into web pages
401
+ * e-mails should always have an informative subject line
402
+ * if you've got non-text files to include in an e-mail, just attach them
403
+ * you've got many attachments? archive/compress them, attach the archive
404
+ * plain ASCII text (UTF-8) is preferable over any enriched text format
403 405
404 406
If appropriate, I also will accept submissions via singing telegram,
405 407
airplane banner, crop circles, creative dance, three part rock aria, etc.
... ...
@@ -413,11 +415,11 @@ considerations.
413 415
Where applicable, be sure to include the following information on any
414 416
submission:
415 417
416
-* Name,
417
-* Course and Section,
418
-* Due Date,
419
-* Assignment # and description,
420
-* Short abstract describing the purpose of your program / assignment.
418
+ * Name,
419
+ * Course and Section,
420
+ * Due Date,
421
+ * Assignment # and description,
422
+ * Short abstract describing the purpose of your program / assignment.
421 423
422 424
Presentation of this information in a clear and organized fashion will
423 425
make your assignment all the easier to read. You may come up with your
... ...
@@ -674,10 +676,10 @@ abilities.
674 676
675 677
For maximum success in the class, please adhere to the following rules:
676 678
677
-* start on activities early
678
-* observe/study, read/intuit, and comprehend the subject matter
679
-* play/tinker/experiment with the subject matter (external to projects)
680
-* ask well-informed and copious questions
679
+ * start on activities early
680
+ * observe/study, read/intuit, and comprehend the subject matter
681
+ * play/tinker/experiment with the subject matter (external to projects)
682
+ * ask well-informed and copious questions
681 683
682 684
Struggle and problems in the course almost immediately arise when one
683 685
fails to follow one or more of these guidelines.
... ...
@@ -688,77 +690,77 @@ The following criteria should be kept in mind when contributing content
688 690
to collaborative documentation, the course notes, and any pertinent
689 691
class-related communications:
690 692
691
-* Never use a form of a word in its own definition
692
-* Use external hyperlinks only as citations
693
-* Content first, then formatting
694
-* There is only one empire- ours
695
-* Contribute only original content
696
-* Paraphrase and cite existing information
697
-* Do NOT blatantly copy existing information
698
-* A healthy resource is an active resource
699
-* Do not focus on just your contributions
700
-* Mistakes are opportunities for future contributions
693
+ * Never use a form of a word in its own definition
694
+ * Use external hyperlinks only as citations
695
+ * Content first, then formatting
696
+ * There is only one empire- ours
697
+ * Contribute only original content
698
+ * Paraphrase and cite existing information
699
+ * Do NOT blatantly copy existing information
700
+ * A healthy resource is an active resource
701
+ * Do not focus on just your contributions
702
+ * Mistakes are opportunities for future contributions
701 703
702 704
## Topics
703 705
704 706
The following is a list of the major topics being covered in this course:
705 707
706
-* UNIX Systems Programming
707
-* User space
708
-* Kernel, Kernel space
709
-* Users, Files, and the Manual
710
-* File Access (open, read, write, lseek, close)
711
-* File descriptors
712
-* Buffering
713
-* System Calls
714
-* Directories and File Properties
715
-* File Types and File Properties
716
-* Bit Sets and Bit Masks
717
-* User IDs, Group IDs
718
-* Focus on File Systems
719
-* Filesystem Structure; inodes and data blocks
720
-* Directories
721
-* Links
722
-* Connection Control
723
-* Device files
724
-* Race conditions
725
-* Atomic Operations
726
-* Streams
727
-* Terminal Control and Signals
728
-* Blocking vs. Non-Blocking
729
-* Signals
730
-* Event-Driven Programming
731
-* Alarms, Interval Timers
732
-* Reentrant code, critical sections
733
-* Asynchronous input
734
-* Processes and Programs
735
-* UNIX process model, processes
736
-* Parent/Child processes
737
-* Shell Variables and the Environment
738
-* I/O Redirection and Pipes
739
-* I/O Redirection
740
-* Pipes
741
-* Servers and Sockets
742
-* Client/Server model
743
-* Coroutines
744
-* Connections and Protocols
745
-* Server sockets
746
-* Client sockets
747
-* Zombies
748
-* Programming with Datagrams
749
-* TCP vs. UDP
750
-* Distributed Systems
751
-* UNIX domain sockets
752
-* Threads
753
-* Multithreading
754
-* Creating/destroying threads
755
-* Sharing data between threads
756
-* Synchronizing data
757
-* Inter Process Communication
758
-* Named pipes
759
-* Shared memory
760
-* File locks
761
-* Semaphores
708
+ * UNIX Systems Programming
709
+ * User space
710
+ * Kernel, Kernel space
711
+ * Users, Files, and the Manual
712
+ * File Access (open, read, write, lseek, close)
713
+ * File descriptors
714
+ * Buffering
715
+ * System Calls
716
+ * Directories and File Properties
717
+ * File Types and File Properties
718
+ * Bit Sets and Bit Masks
719
+ * User IDs, Group IDs
720
+ * Focus on File Systems
721
+ * Filesystem Structure; inodes and data blocks
722
+ * Directories
723
+ * Links
724
+ * Connection Control
725
+ * Device files
726
+ * Race conditions
727
+ * Atomic Operations
728
+ * Streams
729
+ * Terminal Control and Signals
730
+ * Blocking vs. Non-Blocking
731
+ * Signals
732
+ * Event-Driven Programming
733
+ * Alarms, Interval Timers
734
+ * Reentrant code, critical sections
735
+ * Asynchronous input
736
+ * Processes and Programs
737
+ * UNIX process model, processes
738
+ * Parent/Child processes
739
+ * Shell Variables and the Environment
740
+ * I/O Redirection and Pipes
741
+ * I/O Redirection
742
+ * Pipes
743
+ * Servers and Sockets
744
+ * Client/Server model
745
+ * Coroutines
746
+ * Connections and Protocols
747
+ * Server sockets
748
+ * Client sockets
749
+ * Zombies
750
+ * Programming with Datagrams
751
+ * TCP vs. UDP
752
+ * Distributed Systems
753
+ * UNIX domain sockets
754
+ * Threads
755
+ * Multithreading
756
+ * Creating/destroying threads
757
+ * Sharing data between threads
758
+ * Synchronizing data
759
+ * Inter Process Communication
760
+ * Named pipes
761
+ * Shared memory
762
+ * File locks
763
+ * Semaphores
762 764
763 765
## Student Understanding and Agreement of Syllabus Terms
764 766
... ...
@@ -766,18 +768,18 @@ By reading through this document, participating in the class chat,
766 768
utilizing class resources, and performing the various class activities
767 769
and projects, you understand and consent:
768 770
769
-* to the rules, policies governing your status as a student at SUNY CCC.
770
-* to the structure, policies, and nature of the course as laid out here.
771
-* to having an adequate understanding of course prerequisite knowledge.
772
-* to maintain a respectful, inquisitive, well-behaved, and learning-oriented focus as you participate and go through the course.
773
-* to practice (and further cultivate, as needed) the fundamental aspects of a student taking this course, which includes being able and willing:
774
-* to read, comprehend and work with the material and information inherent to the course.
775
-* to write and express your thoughts in coherent, descriptive sentences.
776
-* willing to analyze, problem solve, debug, troubleshoot, ideate, creatively, and logically/rationally think.
777
-* willing to compute and transact in number concepts (literal, symbolic or abstract) and any related units in their various processes.
778
-* to, upon facing uncertainty, confusion, or lack of understanding, will ask copious, well-informed, and well-intending questions to clarify your state of understanding.
779
-* if cause for issue rises, you will bring it to my attention so that it may be best addressed as locally and pertinently as possible to the course and its educational environment.
780
-* participate in the course with a focus on curiosity, discovering, exploring, learning, and understanding.
781
-* starting early on deliverables so that ample time is available for discovering, exploring, learning, and asking any questions as needed.
782
-* that, as a student, a genuine learning experience necessarily involves some level of unfamiliarity, which may invoke discomfort.
783
-* that your learning and the nature of the course is an inherently asynchronous thing. It is your responsibility to manage your time, so that you can have adequate time to ask questions and accomplish your own tasks.
771
+ * to the rules, policies governing your status as a student at SUNY CCC.
772
+ * to the structure, policies, and nature of the course as laid out here.
773
+ * to having an adequate understanding of course prerequisite knowledge.
774
+ * to maintain a respectful, inquisitive, well-behaved, and learning-oriented focus as you participate and go through the course.
775
+ * to practice (and further cultivate, as needed) the fundamental aspects of a student taking this course, which includes being able and willing:
776
+ * to read, comprehend and work with the material and information inherent to the course.
777
+ * to write and express your thoughts in coherent, descriptive sentences.
778
+ * willing to analyze, problem solve, debug, troubleshoot, ideate, creatively, and logically/rationally think.
779
+ * willing to compute and transact in number concepts (literal, symbolic or abstract) and any related units in their various processes.
780
+ * to, upon facing uncertainty, confusion, or lack of understanding, will ask copious, well-informed, and well-intending questions to clarify your state of understanding.
781
+ * if cause for issue rises, you will bring it to my attention so that it may be best addressed as locally and pertinently as possible to the course and its educational environment.
782
+ * participate in the course with a focus on curiosity, discovering, exploring, learning, and understanding.
783
+ * starting early on deliverables so that ample time is available for discovering, exploring, learning, and asking any questions as needed.
784
+ * that, as a student, a genuine learning experience necessarily involves some level of unfamiliarity, which may invoke discomfort.
785
+ * that your learning and the nature of the course is an inherently asynchronous thing. It is your responsibility to manage your time, so that you can have adequate time to ask questions and accomplish your own tasks.