CIS241 - System-level Programming and Utilities
Table of contents
- Upcoming Deadlines
- Course Description
- Learning Objectives
- Lecture
- Term Project
- Textbooks (none required)
- Assignments
- Resources
Upcoming Deadlines
Note - check Blackboard for any in-class assignments and assignment files!
- IC1 - 08/27 by 11:59pm
- HW1 - 09/01
08/29by 11:59pm
Course Description
Introduction to software infrastructure underlying development of computer programs. Topics include Linux utilities, shell scripting, processes, facilities for programming, the C programming language, libraries, structures, pointers, dynamic memory management, and system calls.
Prerequisite: C or better in CIS 163 or C or better in CIS 260
Credits: 3
Learning Objectives
After successful completion of the course a student should be able to:
- Application/Use: Use command-line interface to do basic system operations such as create a directory, modify file permissions, create a link, manage processes, and access a computer remotely.
- Mechanism/Manipulate: Manipulate basic features of a command-line environment such as the ‘PATH’, which specifies the locations of executable programs, and the ‘CLASSPATH’, which specifies the locations of Java classes.
- Synthesis/Write: Write basic meta-programs in a shell or scripting language, e.g. to compile statistics for numbers stored in text files.
- Application/Use: Use build-system utilities such as ‘make’/’cmake’, ‘gdb’, or ‘SCons’ to edit, compile, test, time, debug, and profile a C program.
- Synthesis/Construct: Construct programs that access data by using the range of pointer operations and manual dynamic memory management to implement basic ordered binary trees a.k.a. binary search trees (BSTs).
Lecture
Class meets 3 times a week in person. Typically class will comprise a lecture, discussion, and/or in-class work.
Term Project
There won’t be a full-on term project, however the last assignment will be larger in scope (and weighted more). We’ll talk about this after the midterm.
Textbooks (none required)
There are many free resources out there on the internet. Here are a few recommended:
- The Linux Command Line - William Shotts (free PDF download)
- WikiBooks - C Programming
- Learn to Code with C (MagPi - flashy and short bits of info but good for a quick read)
The following textbooks are available for free online through GVSU’s library. You may find a combination of them useful:
- Linux Pocket Guide, 3rd edition by Barrett (2016)
- The Linux Command Line, 2nd edition by Shotts (2019)
- Linux in a Nutshell, 6th edition by Love, Figgins, Siever and Robbins (2009)
- Understanding and Using C Pointers by Reese (2013)
- C in a Nutshell by Crawford and Prinz (2005)
- Head First C by Griffiths and Griffiths (2012)
- C Programming Absolute Beginner’s Guide, 3rd edition by Miller and Perry (2013)
Assignments
All assignments are to be submitted by 11:59pm on the date they are due. Please check Blackboard regularly for upcoming due dates. If you are struggling or are having problems, please contact me in advance. If you message me or email me the night something is due I will most likely not accept your reasoning. If you get in touch early then we can work it out.
- Individual and team assignment late penalty: 10% per day (including weekends). 0 after 3 days.
Submissions
- All course content is hosted on this page.
- All assignment submissions are to be submitted via Blackboard!
Resources
Here are a list of resources I’ve collected that might help out.
Terminal Installation
(From Dr. Carrier):
Git/GitHub-Related
- git - the simple guide
- Git Guide
- Git Book
- How to Get Started with GIT and work with GIT Remote Repo
- A Simple GitHub Tutorial
- Basic Git Commands (c/o Dr. Dowling)
- Git Tutorial (c/o Dr. Dowling)