CS 5006, CS 5007

Algorithms, Systems and C for Align

Thursdays, 5:30-8:30pm, Orcas (225-306)

Staff and Contact Info | Course Description | Learning Objectives (Promises) | Student Responsibilities | Evaluation | Course Materials | Collaboration

Staff and Contact Info

To contact the course staff as a whole, please use Piazza unless you need to email a staff member individually. You can post a private question on Piazza if you do not want your communication to be visible to the other students in the class.

Role Name Email Office Hours
Instructor Adrienne Slaughter
425 318.4951 (m)
Anonymous contact
Wednesdays, 10am-12pm;
by appt. (preferably Sun afternoon, Tues am, or Mon evening virtually)
TAs
Kai Kang Wednesdays, 10am-12pm
Nancy Tran Fridays, 12-2pm
Andrew Truong Tuesdays, 4-6pm

Course Description

This course aims to answer the following questions: There are three components to answering these questions: algorithms, systems, and learning the C programming language.

First, more about algorithms: we'll see how some problems can't be solved in many years given a simple program to solve it, no matter how fast the computer is. We study algorithms to understand what kinds of problems can be solved quickly, and build a set of tools to help us.

Then, systems: this is the study of how computers work. This includes understanding more about the underlying hardware, the operating system that controls the hardware, and how we as programmers can utilize the OS and hardware to effectively solve our problems.

Finally, learning C: The C programming language is the basis for many other languages (including Java, Python, and JavaScript). It's also *the* systems programming language-- it's the language used to build modern operating systems (e.g., Microsoft Windows) and many other tools and applications in industry today. Knowing C allows you to write programs closer to the hardware, which helps you better understand how the hardware works.

The systems part of this course provides a foundation for courses on compilers, networks, operating systems, and computer architecture, where a deeper understanding of systems-level issues is required.

The algorithms part of this course provides a foundation for more advanced classes on algorithms.

Learning Objectives (Promises)

After taking this course, students will be able to:

Student Responsibilities/Policies

Attendance

Attendance in lecture is not required. However, I highly encourage you to attend. There are a few reasons for this:

Ultimately, this is your class, and your education. I do encourage you to do what works best for you. But, if you find it a waste of time to come to lecture, I encourage you to give that feedback (possibly via the anonymous feedback link) sooner rather than later.

Late Assignment Policy

Generally, assignments will be due Wednesdays at 6pm.

Everyone gets 4 days for a late turn-in through the entire semester. You don't have to do anything to claim a late turn-in; the turnin process will catch and keep track of it. After you have used your 4 free late days, assignments will automatically be reduced 25% for each day late after that. If an assignment is 4 days late (after using your first 4 days), you will get 0 for that assignment. However, we will still grade the assignment and provide feedback.

The 4-day late turn-in does NOT apply to the final project; everything MUST be turned in by Aug 12, 2019; anything that is not turned in by that point is a 0.

If you have extenuating circumstances and the 4-day late turn-in won't work for you, please send a private note to Dr. Slaughter on Piazza explaining the situation, and we are happy to work with you. However, this needs to be done IN ADVANCE. I have had students in the past come to me and say "I see now I should have come to you earlier...". It's better to ask for flexibility early and not need it, rather than to ask late and not get it.

Classroom Expectations

Evaluation

Weekly assignments, a midterm, a final project, and occasional in-class writing exercises.

5006-7 has lectures, weekly assignments, a midterm, a final project and occasional in-class writing exercises.

Lectures

Lectures are Thursday evening. Lectures will be recorded and available after class. We will occasionally have graded in-class activities; these activities will contribute no more than 5% to your overall grade.

Grading

The class is technically two courses, but they are designed to be cohesive. It consists of individual assignments, a midterm and a final project. However, because this is still two classes officially, each half of the semester will be graded seperately.

CS 5006:
Homeworks 80%
Writing/In-Class Exercises 5%
Midterm 15%

CS 5007:

Homeworks 80%
Writing/In-Class Exercises 5%
Final Project 15%

The final grade for a student is calculated as the weighted average of the preceding list. The homework component is calculated as the mean percentage of each homework score. The combined weighted average is rounded up to the nearest integer. The mapping to a letter grade uses the following scale:

A [95, 100]
A- [90, 94]
B+ [85, 89]
B [80, 84]
B- [75, 79]
C+ [70, 74]
C [65, 69]
C- [60, 64]
D [0, 59]

Assignments

Assignments are programming assignments, and will give you practice applying the concepts covered in class and readings the previous week. They may include a write-up component that requires you to reflect on your implementation and report out findings, or to connect the assignment to reading.

  1. A0: Getting environment up and running. Unix tutorial, text editor tutorial, simple C program.
  2. A1: More familiarity with C, github, implementing sorts. Start using CLint.
  3. A2: Working with structs and strings (string.h)
  4. A3: Working with multiple data structures, header files, testing with assert, managing memory (valgrind).
  5. A4: NEuchre, Part 1
  6. A5: NEuchre, Part 2
  7. Midterm (June 20, 2019)
  8. A6: Building a library of data structures (LinkedList); getting familiar with bash
  9. A7: Building a library of data structures (Hashtable); getting familiar with bash
  10. A8: Working with files and the file directory; indexing records.
  11. A9: Multithreading
  12. A10: Query processor
  13. Final Project: Client/Server query processor

Assignments are to be submitted on Github by the deadline. Your code must be *tagged* (indicating the assignment and that it is your final submission, such as aX-final) AND *pushed* to Github.

Grades and feedback will be provided on Blackboard.

Tips for successful assignment submissions:

A few things can ensure that you are successful with the coding portion of this course:

Midterm

The midterm will cover the content of the course covered by mid-semester. It will focus on specifics of C programming and analysis of programs/algorithms.

Final Project

The final project will be similar to weekly programming assignments, with greater scope and a longer time to complete.

Course Materials

For the Algorithms/C part of the course, we will be using Yale Notes by James Aspnes and C Flashcardsby Marlin Eller.

For the systems part of the course, we will use the book Computer Systems: A Programmer's Perspective, by Bryant and O'Halloran.

Additional materials will be provided throughout the semester.

Other materials that may be helpful:

Collaboration

For assignments and the final project, I encourage collaboration, but highly discourage cheating. Unfortunately, there can be a fine line. Your goal is to learn this material as well as possible, because it will be useful for you in the future. Cheating doesn't help you, and it wastes all of our time.

Cheating consists of sharing code or solutions to assignments by either copying, retyping, looking at, or supplying a copy of a file. Examples include:

Please indicate in your code if you reference a certain website/page or base your code on a published code snippet by including a line in the file something like:

    // This code based on code found at 
    // https://www.geeksforgeeks.org/why-strcpy-and-strncpy-are-not-safe-to-use/
    // OR
    // I used the following resources to implement this code: 
    // https://stackoverflow.com/questions/2150291/how-do-i-measure-a-time-interval-in-c
    // https://www.geeksforgeeks.org/why-strcpy-and-strncpy-are-not-safe-to-use/
    // 
    // I read the code, and then wrote my own after understanding that code. 
    // OR
    // I wrote my own code, and then referenced the above code to try to figure out why mine 
    // wasn't working properly. 
    // OR
    // (something appropriate)
    // 
    // I had conversations about this assignment with: 
    // Ben Bitdiddle (fellow 5007 student)
    // Jane Smith (non-NU, software engineer, friend, ...)
  

Note that in addition to the resource (URL), I indicate how I used that resource. This is helpful for when we review the code and recognize that it looks similar to a known resource (we're pretty familiar with the code on geeksforgeeks and other common reference sites!). Remember, this is your work, for your development. When it's clear to us how you use a resource, it's easy for us to not dock you points for copying code.

Please note resources that are NOT part of the provided course materials, or people who are NOT part of the course teaching team (TAs or instructors).

Academic Integrity

The University views academic dishonesty as one of the most serious offenses that a student can commit while in college and imposes appropriate punitive sanctions on violators. Here are some examples of academic dishonesty. While this is not an all-inclusive list, we hope this will help you to understand some of the things instructors look for. The following is excerpted from the University's policy on academic integrity; the complete policy is available in the Student Handbook.

If you are found to have violated academic integrity in some way, the instructor will decide the appropriate penalty, ranging from a 0 on the assignment, failing the class, or reporting to the administration.