January 2019 | ||||||
---|---|---|---|---|---|---|
U | M | T | W | R | F | S |
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 | ||
Labs: | M, | between 9:30am and 5:20pm | (varies by section) |
---|---|---|---|
Lectures: | TR, | 09:00-10:20am | (DH 2315) |
or | TR, | 10:30-11:50am | (DH 2315) |
Recitations: | F, | between 9:30am and 5:20pm | (varies by section) |
Click on a class day to go to that particular lecture or recitation. Due dates for homeworks are set in bold. The due date of the next homework blinks.
Test Percentage learn. obj | Wr1 1.2% 1-3,11 | Pg1 2.5% 1,12 | Wr2 1.2% 1-3 | Pg2 2.5% 12,15,16 | Wr3 1.2% 1,2,4,12 | Pg3 2.5% 1,12-16 | Wr4 1.2% 1-4,21,27 | Pg4 2.5% 1,18,17 | Wr5 0.9% 6-10,15-17 | Midterm1 12.5% 1-8 | Wr6 1.2% 6-8,12,17 | Pg5 2.5% 5,12,27 | Wr7 1.2% 9,17,24,27 | Pg6 2.5% 10 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Posted | 14 Jan | 17 Jan | 21 Jan | 24 Jan | 28 Jan | 31 Jan | 4 Feb | 7 Feb | 11 Feb | Thu 21 Feb | 18 Feb | 21 Feb | 25 Feb | 28 Feb |
Due (9pm) | Mon 21 Jan | Thu 24 Jan | Mon 28 Jan | Thu 31 Jan | Mon 4 Feb | Thu 7 Feb | Mon 11 Feb | Thu 14 Feb | Mon 18 Feb | Mon 25 Feb | Thu 28 Feb | Mon 4 Mar | Thu 7 Mar | |
Corrected | 23 Jan | 26 Jan | 30 Jan | 2 Feb | 6 Feb | 9 Feb | 13 Feb | 16 Feb | 20 Feb | 25 Feb | 27 Feb | 2 Mar | 6 Mar | 9 Mar |
Test Percentage learn. obj | Wr8 1.2% 12,24,27 | Pg7 2.5% 1,12-18 | Wr9 1.2% 9,10,25-27 | Pg8 2.5% 8,10-18 | Wr10 0.9% 2,13,25,27 | Midterm2 12.5% 1-8 | Pg9 2.5% 9,12-18 | Wr11 1.2% 18-20 | Pg10 2.5% 10,15-20 | Wr12 1.2% 19,20 | Pg11 2.5% 5,15-20 | Wr13 1.2% 5,20,27 | Pg12 5.0% 5,15-20 | Final 25% 1-27 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Posted | 4 Mar | 7 Mar | 18 Mar | 21 Mar | 25 Mar | Thu 4 Apr | 28 Mar | 8 Apr | 8 Apr | 11 Apr | 18 Apr | 22 Apr | 18 Apr | Mon 6 May (8:30-11:30) |
Due (9pm) | Mon 18 Mar | Thu 21 Mar | Mon 25 Mar | Thu 28 Mar | Mon 1 Apr | Mon 8 Apr | Mon 15 Apr | Thu 18 Apr | Mon 22 Apr | Thu 25 Apr | Mon 29 Apr | Thu 2 May | ||
Corrected | 20 Mar | 23 Mar | 27 Mar | 30 Mar | 3 Apr | 6 Apr | 10 Apr | 17 Apr | 20 Apr | 24 Apr | 27 Apr | 1 May | 4 May | 8 May |
Note the submission deadlines for written and programming assignments are inverted between midterm 2 and Carnival.
Office hour rules:
Unix | Emacs |
---|---|
We strongly advise students not to use late days in the first half of the course. Later assignments are more challenging and many courses have lots of deliverables towards the end of the semester. The second half of the semester is where late days are most needed.
Nearly all situations that make you run late on an assignment homework can be avoided with proper planning — often just starting early. Here are some examples:
All regrade requests must be recieved within 5 days of the work being handed back on Gradescope or Autolab, which we will announce in a Piazza post.
What follows is a rough guide to how course grades will be established, not a precise formula — we will fine-tune cutoffs and other details as we see fit after the end of the course. This is meant to help you set expectations and take action if your trajectory in the class does not take you to the grade you are hoping for (see also the Grades tab on this page). So, here's a rough, very rough heuristics about the correlation between final grades and total scores:
The university policies and procedures on academic integrity will be applied rigorously. All students are required to fill out a form as part of their first assignment indicating that they understand and accept this policy.
The value of your degree depends on the academic integrity of yourself and your peers in each of your classes. It is expected that, unless otherwise instructed, the work you submit as your own is your own work and not someone else’s work or a collaboration between yourself and other(s).
You are allowed to discuss homework assignments at a high level with other students. However, in order to ensure that the work you submit is still your own, we insist that you adhere to a whiteboard policy regarding these discussions:
This policy is our attempt to balance the tension between the benefits of group work and the benefits of individual work. We ask that you obey the spirit of the policy, as well as the letter: ensure that all work you submit is your own and that you fully understand the solution. This is in your best interest: the exams constitute a significant part of your final grade, they will be timed, and they will draw heavily on the terminology, concepts, and techniques that are exercised in homework. It is unlikely that you will be able to do well on the exams if you do not take full advantage of the learning opportunity afforded by the homework assignments. Moreover, we will aggressively pursue violations.
Please read the University Policy on Academic Integrity carefully to understand the penalties associated with academic dishonesty at Carnegie Mellon. In this class, cheating/copying/plagiarism means copying all or part of a program or homework solution from another student or unauthorized source such as the Internet, having someone else do a homework or take an exam for you, knowingly giving such information to another student, reusing answers or solutions from previous editions of the course, or giving or receiving unauthorized information during an examination. In general, each solution you submit (quiz, written assignment, programming assignment, midterm or final exam) must be your own work. In the event that you use information written by others in your solution, you must cite the source of this information (and receive prior permission if unsure whether this is permitted). It is considered cheating to compare complete or partial answers, copy or adapt others' solutions, or sit near another person who is taking (or has taken) the same course and complete the assignment together. Working on code together, showing code to another student and looking at another student's code are considered cheating. If you need help debugging, go to office hours or make a post on Piazza. It is also considered cheating for a repeating student to reuse one's solutions from a previous semester, or any instructor-provided sample solution. It is a violation of this policy to hand in work for other students.
Your course instructor reserves the right to determine an appropriate penalty based on the violation of academic dishonesty that occurs. Penalties are severe: a typical violation of the university policy results in the student failing this course, but may go all the way to expulsion from Carnegie Mellon University. If you have any questions about this policy and any work you are doing in the course, please feel free to contact the instructors for help.
We will be using the Moss system to detect software plagiarism. Whenever a programming assignment is similar to a homework from a previous course edition, we will running MOSS on all submissions of that edition as well.
It is not considered cheating to clarify vague points in assignment writeups, lectures, lecture notes, or to give help or receive help in using the computer systems, compilers, debuggers, profilers, or other facilities, but you must refrain from looking at other students' code while you are getting or receiving help for these tools. It is not cheating to review graded assignments or exams with students in the same class as you, but it is considered unauthorized assistance to share these materials between different iterations of the course. Do not post code from this course publicly (e.g., to Bitbucket or GitHub).
For this course, we are conducting research on student learning. This research will involve your coursework. You will not be asked to do anything above or beyond the normal learning activities and assignments that are part of this course. You are free not to participate in this research, and your participation will have no influence on your grade for this course or your academic career at CMU. If you choose not to participate in the research, you must still complete all required coursework, but your data will not be included in the research analyses. Participants will not receive any compensation. The data collected as part of this research will include student grades. All analyses of data from participants' coursework will be conducted after the course is over and final grades are submitted. The Eberly Center may provide support on this research project regarding data analysis and interpretation. To minimize the risk of breach of confidentiality, the Eberly Center will never have access to data from this course containing your personal identifiers. All data will be analyzed in de-identified form and presented in the aggregate, without any personal identifiers. Please contact Dr. Chad Hershock (hershock@cmu.edu) or us if you have questions or concerns about your participation.
Do your best to maintain a healthy lifestyle this semester by eating well, exercising, avoiding drugs and alcohol, getting enough sleep and taking some time to relax. This will help you achieve your goals and cope with stress.
All of us benefit from support during times of struggle. You are not alone. There are many helpful resources available on campus and an important part of the college experience is learning how to ask for help. Asking for support sooner rather than later is often helpful.
If you or anyone you know experiences any academic stress, difficult life events, or feelings like anxiety or depression, we strongly encourage you to seek support. Counseling and Psychological Services (CaPS) is here to help: call 412-268-2922 and visit their website. Consider reaching out to a friend, faculty or family member you trust for help getting connected to the support that can help.
If you or someone you know is feeling suicidal or in danger of self-harm, call someone immediately, day or night:
![]() ![]() Office hours:
|
Mon 14 Jan Lab 1 |
Setup
This lab practices using Linux and running the C0 interpreter and compiler.
|
Tue 15 Jan Lecture 1 |
Welcome and Course Introduction
We outline the course, its goals, and talk about various administrative
issues.
Readings:
A mysterious function ...
We examine a program we know nothing about, making hypotheses about
what it is supposed to do. We notice that this function has no
meaningful output for some inputs, which leads us to restricting its
valid inputs using preconditions. We use a similar mechanism,
postconditions, to describe the value it returns. Along the way, we
get acquainted to C0 and its support for checking pre- and
post-conditions. We then notice that this function doesn't return
the expected outputs even for some valid inputs ...
Concepts:
|
Thu 17 Jan Lecture 2 |
Contracts
Contracts are program annotations that spell out what the code is
supposed to do. They are the key to connecting algorithmic ideas to
their implementation as a program. In this lecture, we illustrate
the use of contracts by means of a simple C0 program. As we do so,
we learn to verify loop invariants — an important type of
contract, we see how contracts can help us write correct code, and
we get acquainted with C0's automated support to validating contracts.
Concepts:
|
Fri 18 Jan Recitation 1 |
C0 Basics
This recitation reviews elementary C0 constructs and practices
reasoning about code.
|
Mon 25 Feb Lab 6 |
List(en) Up!
This lab practices working with linked lists.
|
Tue 26 Feb Lecture 12 |
Unbounded Arrays
When implementing a data structure for a homogeneous collection,
using an array has the advantage that each element can be accessed
in constant time, but the drawback that we must fix the number of
elements a priori. Linked lists can have arbitrarily length but
access takes linear time. Can we have the best of both worlds?
Unbounded arrays rely on an array to store the data, but double it
when we run out of place for new elements. The effect is that
adding an element can be either very cheap or very expensive
depending on how full the array is. However, a series of insertions
will appear as if each one of them takes constant time in average.
Showing that this is the case requires a technique called amortized
analysis, which we explore at length in this lecture.
|
Thu 28 Feb Lecture 13 |
Hash Tables
Associative arrays are data structures that allow efficiently
retrieving a value on the basis of a key: arrays are the special
case where valid indices into the array are the only possible keys.
One popular way to implement associative arrays is to use hash
tables, which computes an array index out of each key and uses that
index to find the associated value. However, multiple keys can map
to the same index, something called a collision. We discuss several
approaches to dealing with collisions, focusing on one called separate
chaining. The cost of access depends on the contents of the hash
table. While a worst case analysis is useful, it is not typically
representative of normal usage. We compute the average case
complexity of an access relative to as few simple parameters of the
hash table.
|
Fri 1 Mar Recitation 7 |
Array Disarray
This recitation practices coding to achieve amortized cost.
|
Mon 11 Mar |
No class (Spring break)
|
Tue 12 Mar | |
Thu 14 Mar | |
Fri 15 Mar |
Mon 8 Apr Lab 11 |
Once you C1 you C them all
This lab practices using translating C0 code to C and managing
memory leaks.
|
Tue 9 Apr Lecture 21 |
C's Memory Model
C provides a very flexible view of memory, which allows writing
potentially dangerous code unless one is fully aware of the
consequences of one's decision. This lecture is about building this
awareness. We see that, while C overlays an organization on the
monolithic block of memory the operating systems assigns to a
running program, it also provides primitives that allow violating
this organization. We focus on two such primitives, pointer
arithmetic and address-of. While some uses are legitimate, others
are not. C's approach to many non-legitimate operations is to
declare them undefined, which means that what happens when a program
engages in them is decided by the specific implementation of the C
compiler in use.
|
Thu 11 Apr |
No class (Carnival)
|
Fri 12 Apr |
No class (Carnival)
|
Mon 6 May (8:30-11:30) final |
Final
|
2019 Iliano Cervesato |