CS 414 Course Syllabus




General Information

Instructors Our offices are in the new Engineering Technology Suite off of the Reynolds breezeway; here is our contact information.

You can send snailmail to us at NCSSM, 1219 Broad Str., Durham, NC 27705.

Prerequisites: CS 404 is the official prerequisite, but we encourage you to have taken CS 406 as well. An AP Computer Science score of 4 or 5 will also get you into this class. However, we strongly encourge students who have taken the AP to sign up for CS404, as its approach to OO and GUIs is radically more ambitious than the APCS curriculum. There will be a quick review of UNIX at the beginning of the class to get students up to speed with command-line programming.

Course Textbook:

Course Description: This is an advanced course. It will introduce you to C, pointers, dynamic memory management, and you will learn about an array-based and link-based implementation of lists.

Course Objectives: These are the things you will learn about.

  1. You will learn to program in the C language. This include all details on pointers, functions, structs and unions.
  2. You will learn how to manage memory on the heap using malloc and free.
  3. You will learn how to use the gdb debugger to trace code and valgrind to find and extirpate memory leaks.
  4. You will implement an array-based list in C without memory leaks.
  5. You will learn about link-based stacks, and then extend this to a full-service link-based list.
  6. You will learn how to execute a mathematical induction argument and how induction relates to recursion in computer programs.

Rough outline of the class

This class will be taught in C. You will be assumed to be a proficient coder in a couple of other languages, so this will not proceed at an introductory pace. Since we will program at the UNIX command line, a quick review of UNIX commands will be done at the beginning of this class. Then we will study the C language, roughly in this order.

The C Language Unit

  1. Basic C Program Structure
    1. The Preprocessor
    2. Preprocessor Macros
    3. Conditional Compilation
    4. The Main Routine
  2. C variables and their scope
    1. global variables
    2. local variables in main
    3. Using gdb to trace code
  3. C Functions
    1. Function Prototypes
    2. Function Parameters and Local Variables
    3. C Scoping Rules
    4. The call stack
    5. C is a pass-by-value Language
    6. static storage in local variables
    7. Using Libraries
  4. Boss Statements in C
    1. Conditional Execution
    2. switch progressions
    3. The while loop
    4. The do while loop
    5. The for loop
    6. static storage in local variables
  5. C Data Structures, struct and Arrays
    1. Declaring an Array
    2. Traversing Arrays and Entry Access
    3. Heterogeneous Data Structures: the struct
  6. C Pointers
    1. Anatomy of a Program: The main code segments
    2. The Abstraction of Virtual Memory
    3. Accessing virtual memory addresses via pointers
    4. Allocation and deallocation of memory on the Stack
    5. Valgrind: it will hurt your feelings

After we get a basic mastery of C, we will study some key ideas in algorithmics, then we will look at the List Model.

We will spend a fair amount of time on induction and learn how it is connected to recursion in programs.

This material is contained in these chapters of Aho and Ullman.

  1. Iteration, Induction and Recursion
  2. The Running Time of Programs
  3. Combinatorics and Probablity
  4. The List Data Model

Course Goal: You will learn to program in C at the UNIX command line and learn how to manage memory dynamically. We will study the list data model and fully implement array-based and link-based list structures. We will also lay the mathematical foundations for studying the general theory of algorithms. All mathematical writing will be done in LaTeX format.

Class Mechanics

What to Bring to Class Bring your lappy and its power cord. We will use computers most days.

Class Organization: This class is at once lab and lecture. We will demonstrate coding constructs and have you try them right away. You are encouraged to bring your laptop to class and configure your machine to your liking.

Some projects will be individual efforts, although there will be a few joint activities (especially in pairs). You are expected to gain an active understanding of the material; this means that you need to be a full participant in class at all times. You are encouraged to share ideas and ask questions. Unless I specify otherwise, you may help each other debug code. For further guidance, see our policy on Academic Honesty.

Laptop Usage Policy: Computers are an integral part of this class. Their use is permitted except when explicitly prohibited. We may be piloting LanSchool in this class. If LanSchool is functional, you will be expected to use it while in this classroom.

Programming Assignments and Other Assessments: No one really understands what is going on in a any class with significant analyticl content class until they actually make things work. It's this simple: if you can't do this, you don't really understand the material. The biggest mistake made by many CS students is that they confuse an active understanding of the material with a passive understanding. Until you attempt, fuss over and debug programs, you are nowhere. Therefore, you will see work on a wide variety of programs and projects.

Whoa! Back up! You are required to maintain all of your materials on the computer science server. You are also required to keep any written graded assignments returned to you, and keep the programs you turn in in your electronic files. This is your insurance against us accidentally corrupting, destroying or misplacing your files. This does happen sometimes!

Academic Honesty in this class:
You are encouraged to share ideas and ask questions. Unless we specify otherwise, you may help each other debug code. You may use diagrams, analogies, or other un-technical explanations. You may not share any code or any "dead-giveaway" help. When you help classmates, your goal is to enable them to solve similar problems on their own. If you don't think you can comply with this guideline you should turn down your classmates' request for help. Refer them to your instructor. You are bound by policy as laid out in these two documents:

Failure to adhere to these policies will result in a zero on the offending assignment and academic honesty charges.

Attendance and Tardiness Policy: Be presnent, mentally and corporeally. Be on time.
Class meets four times a week and takes lab. You are expected to attend every class in order to be successful in mastering the material covered. If you are more than 5 minutes late you will be considered Tardy. If you are more than 25 minutes late you will be considered Absent.
Participation is vital to your progress in class. Excessive unexcused absence and tardiness will not be tolerated and will reflect poorly in your grade. You are expected to be aware of attendance policy outlined in the Student Handbook and to adhere to it.

Late/Incomplete/Makeup Work in this class:
When you anticipate an excused absence, see us ASAP for makeup arrangements. By nature, this class builds sequentially and depends on steady progress. If you run into difficulty, see us and we can grant you and extension to complete your program or project.

Multiple Major Assignments: If you have more than 2 major assignments due on the same day as a scheduled major assignment in this class, please let your instructor know and contact Academic Programs at least 48 hours in advance for relief. We are reasonable people as long as this is not abused.

The Classroom Policy Page contains all of the documents pertaining to general classroom policy in Computer Science; these apply to all CS classes. Make sure you read and understand them.

For information on the following school wide policies, please reference the current version of the Student Handbook available under the NCSSM folder found in the Documents & Forms chiclet at https://my.ncssm.edu. It is your responsibility to be familiar with these policies.

Grading

A rant note about grades: We believe that the over emphasis of grades impedes a student's ability to learn. This is a school, a place for learning. Please do not let a focus on grades prevent you from focusing on learning. If you learn and work hard, your grade will take care of itself.
"I have never let my schooling interfere with my education." - Mark Twain

Grading Your grade in this class will come from several sources. You can compute your grade from returned work. Projects and the lab practical will be posted when you have your Personal Feedback Session on them. I will compute actual averages in my PC's spreadsheet. It is unlikely I will program the FOCUS gradebook.

Grading Scale:
A: 90 - 100
B: 80 - 89
C: 70 - 79
D: Below 69