| Role | Name | Office Hours | |
|---|---|---|---|
| Instructor | Adrienne Slaughter | a.slaughter at northeastern.edu 425 318.4951 (m) Anonymous contact |
Wednesdays, 10am-12pm; by appt. (preferably Sun afternoon, Tues am, or Mon evening virtually) |
| TAs |
Kai Kang | kang.k at husky.neu.edu | Wednesdays, 10am-12pm |
| Nancy Tran | tran.nan at husky.neu.edu | Fridays, 12-2pm | |
| Andrew Truong | truong.an at husky.neu.edu | Tuesdays, 4-6pm |
Course Description
This course aims to answer the following questions:- How do computers work?
- How can I be more effective in my programming?
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.
After taking this course, students will be able to:
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.
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.
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 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.
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:
Learning Objectives (Promises)
Student Responsibilities/Policies
Attendance
Late Assignment Policy
Classroom Expectations
Evaluation
Lectures
Grading
| 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.
- A0: Getting environment up and running. Unix tutorial, text editor tutorial, simple C program.
- A1: More familiarity with C, github, implementing sorts. Start using CLint.
- A2: Working with structs and strings (
string.h) - A3: Working with multiple data structures, header files, testing with assert, managing memory (valgrind).
- A4: NEuchre, Part 1
- A5: NEuchre, Part 2
- Midterm (June 20, 2019)
- A6: Building a library of data structures (LinkedList); getting familiar with bash
- A7: Building a library of data structures (Hashtable); getting familiar with bash
- A8: Working with files and the file directory; indexing records.
- A9: Multithreading
- A10: Query processor
- 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:
- Commit your code early, and often.
- Make your commit messages meaningful, e.g.
Part 1 done,Fixed broken sort - PUSH your code to Github often, not just once when you're done. This helps YOU-- if something happens to your computer, your code is still safe.
- Last semester, 3 days before the final project due date, a student came to us and asked if we could help them recover their Github repo. They had committed locally, but never pushed. There was nothing we could do. They had to start over.
- Review the code style guidelines, and use them consistently.
- Ensure your name and date is at the top of every file.
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.
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:
Course Materials
Collaboration
For assignments and the final project, I encourage
Cheating consists of sharing code or solutions to assignments by either copying, retyping, looking at, or supplying a copy of a file. Examples include:
- Coaching a friend to arrive at a solution by simply following your instructions (i.e. no thinking involved). An example is helping a friend write a program line-by-line.
- Copying code from a similar course at another university or using solutions/code on the web, including GitHub.
- Communicating your solution with another student via electronic or non-electronic means.
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.
- Cheating: intentionally using or attempting to use unauthorized materials, information or study aids in an academic exercise
- Fabrication: intentional and unauthorized falsification, misrepresentation, or invention of any data, or citation in an academic exercise
- Plagiarism: intentionally representing the words, ideas, or data of another as one's own in any academic exercise without providing proper citation
- Unauthorized collaboration:instances when students submit individual academic works that are substantially similar to one another; while several students may have the same source material, the analysis, interpretation, and reporting of the data must be each individual's independent work.
- Participation in academically dishonest activities: any action taken by a student with the intent of gaining an unfair advantage
- Facilitating academic dishonesty: intentionally or knowingly helping or a ttempting to violate any provision of this policy
- Impersonation: working on behalf of another students or allowing someone else to represent a student online, in discussion groups, during quizzes, or exams
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.