TR 9:45am - 11:00am (B2)
MCREY 315
Dr. Brent Yorgey yorgey@hendrix.edu (501) 450-1377 Office Hours
How do computers work? This course answers this deceptively simple question by providing a deep dive into the layers of abstraction composing modern computing systems. Throughout the semester, you will put your new knowledge into practice by building your own complete, working (simulated) computer. Course topics include numeric representation, digital logic, CPU design, machine and assembly language, the program stack, virtual machines, compilers, assemblers, memory management and device drivers.
Upon completing this course, you will be able to:
From Nand to Tetris
The Elements of Computing Systems, 2nd ed.
Nandgame
If you get an error like “Permission denied” when attempting to run one of the nand2tetris tools on OSX or Linux, you may need to make the .sh files executable, by running
.sh
cd nand2tetris/tools chmod +x *.sh
at a terminal prompt.
If you get an error like “cannot find javaw”, you need to install Java. Visit this page to download and run the appropriate installer.
You will prepare and submit for my approval a grading contract and work plan explaining your chosen final grade and what you will do to achieve it. You will then earn your chosen final grade by fulfilling the agreed-upon contract.
This may be different than what you are used to. Professor Cathy Davidson of CUNY perfectly sums up the reasons for doing things this way:
The advantage of contract grading is that you, the student, decide how much work you wish to do this semester; if you complete that work on time and satisfactorily, you will receive the grade for which you contracted. This means planning ahead, thinking about all of your obligations and responsibilities this semester and also determining what grade you want or need in this course. The advantage of contract grading to the professor is no whining, no special pleading, on the student’s part. If you complete the work you contracted for, you get the grade. Done. I respect the student who only needs a C, who has other obligations that preclude doing all of the requirements to earn an A in the course, and who contracts for the C and carries out the contract perfectly.
There is no specific format required for a grading contract, but it must have the following components:
Your desired course grade. You may choose to contract for an A, B, or C (if you’re wondering about D’s and F’s, see below). Note that your grading contract should not explain the reasons for your choice. I will not judge you because of your choice, and you do not need to justify it: there are as many different valid reasons for choosing to work toward a particular final grade as there are students. If you do wish to explain to me the reasons for your choice—which you are in no way required to do—you may do so in an email, a personal conversation, etc., but it should not go in your contract.
A description of the work and requirements you will complete, in checklist format. It doesn’t have to be super detailed, but you do have to explicitly include everything. For example, you can’t just say “I will complete all the assignments listed in the syllabus”; you must actually list them. This is so that you and I both know that you are explicitly aware of the requirements, and to help you keep track of what you have completed and what you have yet to complete. You also have some choice in terms of which assignments you complete, so you must record your choice in the contract.
Note that at the beginning of the semester you may not have a very good idea about this. For example, if you need to complete 9 projects, it’s not reasonable to insist that you know which specific projects you plan to complete. However, you can refine your contract over the course of the semester. You just have to put something to start; for example, a reasonable default would be to plan to complete the first nine projects assigned. I have also provided some sample selections of projects and due dates below.
The specific due date and time for each project you will complete. You must commit to specific due dates at the beginning of the semester. You may choose to simply use one of my suggested schedules of deadlines, but I encourage you to think carefully about any commitments you have (plays, travel for sports, exams in other classes) and how you might wish to adjust your due dates as a result.
A work plan. Success in this class requires consistent, sustained effort; for an A, you should expect to spend about 7 hours a week outside of class working on projects. Along with your grade contract, you must turn in a work plan, a one-to-two paragraph plan for how you will make time to work on the course projects. Be as specific as possible, and be creative in coming up with very specific ways to help yourself succeed. Some examples:
Horrible: “I will work on CSO projects 7 hours per week.”
Bad: “I will work on CSO projects from 2-4pm every Tuesday and from 9-noon every Sunday.”
Good: “Every Tuesday from 2-5pm, I will go to the library which is a good distraction-free place for me to work. I will turn off my phone and put Teams in “Do Not Disturb” mode. I will spend the first 15 minutes reviewing material from class and the textbook. The rest of the time will be devoted to working on the latest project, referring back to the textbook and in-class materials as necessary. I will work in 25-minute chunks with 5-minute breaks. Depending on how the session goes, I will write down a list of questions and schedule office hours for later in the week. On Thursdays and Saturdays, …” etc.
To receive credit, a work plan must be at the level of detail of the “Good” example or higher.
Note that the work plan is not part of the “contract” per se, that is, your grade is not based on how well you stick to your work plan. Instead, it is intended as a helpful tool for your own planning and a useful jumping-off point for discussion if you get behind.
For example, a grading contract might look like this:
My desired course grade in CSO is a C. To achieve this grade, I will complete the following:
I will use the recommended deadline schedule for 9 projects, except that my deadlines will be at 10pm instead of 5pm, and I will turn in Project 5 by 2/24 instead of 2/26. [Your schedule of deadlines will hopefully be more detailed/customized than this.]
My work plan is as follows: [your detailed work plan here]
You must turn in an initial proposed grading contract by the start of class on Thursday, January 18th. After the initial submission, I may require some revisions before I approve your contract.
Two times during the semester (Thursday, February 22 and Thursday, April 4) you are required to reflect on your progress in the course and complete an evaluation of your work, comparing it against what you agreed to in your grading contract. Your evaluation should:
Contain a copy of your original grading contract, with items you have completed checked off.
Revise your grading contract with more specific details as appropriate, for example, regarding which projects you intend to complete.
Include a 1-2 paragraph reflection, which answers questions such as the following:
Your evaluation is also an opportunity to request an adjustment to your contract in either direction. If you find that you will be unable to meet the obligations of your contract, you may request to move to a lower grade and its requirements. Contrariwise, if you find that you’ve been performing above the obligations of your contract, you may request to fulfill the requirements for a higher grade.
Note, however, that you don’t have to wait for an evaluation to adjust your contract. If your life has really gone off the rails (or if, say, you are finding the class easier and more enjoyable than you thought!) just come and talk to me about adjusting your contract.
To earn an A in the course, you must complete all the requirements for a C, and complete all 15 projects—that is, build a complete, working computer.
To earn a B in the course, you must complete all the requirements for a C and complete a minimum of 12 projects.
To earn a C in the course, you must:
[Adapted from Cathy Davidson.] You cannot intentionally contract for a grade of D (and certainly not for an F). However, I reserve the right to award a grade of D or F to anyone who fails to meet their contractual obligations in a systematic way. A “D” grade denotes some minimal fulfilling of the contract (typically, I would want to see at least 5 projects complete). An “F” denotes absence of enough satisfactory work, as contracted, to warrant passing of the course. Both a “D” and “F” denote a breakdown of the contractual relationship.
Your work in this course will consist of a series of challenging projects from our textbook. Taken all together, they will result in a complete, working (simulated) computer.
Below you will find a list of all the projects in one place, as well as suggested deadlines and subsets of projects depending on your desired grade.
The average completion time shown for each project is based on self-reported time spent by students in Spring 2022. However, keep in mind that actual reported times varied widely. There was not enough data to compute a meaningful average for project 12B, but it is probably similar to 12A.
Keep in mind that the deadlines in the above table are only suggestions! You can and should customize to your heart’s content. For example:
Every project is due at a specific date and time chosen by you in your grading contract.
Assignments may be turned in any time up to your chosen deadline. I will try my best to return graded assignments, with feedback, within two weekdays of being turned in.
If you wish an extension on any deadline, simply send me an email (not a Teams message) prior to the deadline requesting a new deadline. You must be specific about the date and time of the new deadline. For example, you could say “I need a little extra time on project 5. I will have it turned in by 8pm on Wednesday,” whereas it would not be acceptable to say “I need a couple extra days on project 5”. Such extension requests will be automatically granted.
If you need a second extension, or if you miss a deadline, you must meet with me in order to discuss your situation and make a plan going forward. You will not receive feedback or credit on any projects submitted late until you have met with me.
If you do not get credit for a project, you may revise and resubmit the project (as many times as necessary to get credit). The default deadline for resubmission is one week after receiving feedback (but you may ask for an extension as usual).
The absolute latest any project may be turned in is 5pm on Wednesday, May 1.
Projects must be completed individually. Your experience of learning how a computer works depends directly on your independent completion of these projects.
You may discuss the projects with other students at a high level.
You may help each other debug your projects. However, be careful not to slide from “debugging help” into more substantive help. “I don’t know how to write this function” is very different than “I wrote this function but it doesn’t work correctly”. In the former case you should come see me in office hours.
You may use generative AI tools such as ChatGPT or GitHub Copilot.
The projects in this class are sufficiently high-level that generative AI is not going to be able to do them for you. It could be an interesting learning experience to figure out ways to use these tools effectively.
If you do use generative AI tools, you must cite their use (e.g. in a comment explaining how you used them).
You may not:
Read any solution to any project, whether from another student, found online, or from any other source.
Show your solution to any other student.
Since completion of the projects is the fundamental learning opportunity in this class, issues of academic integrity will be taken very seriously. Typically, plagiarism on a project will carry a recommended sanction of failure in the course.
Although you and I play different roles in the course, we both have your learning as a common goal. There are things I expect from you as a student in the course, but there are also things you can expect of me as the course instructor and facilitator.
If I am not fulfilling my responsibilities outlined below, you are welcome (and encouraged!) to call me out, perhaps via the anonymous feedback form. I will also initiate a conversation if you are not fulfilling yours. However, none of us will meet all of the expectations perfectly—me included!—so it’s also important that we have grace and patience with one another.
Attendance in this class is not required as part of your grade. However, I do expect you to attend and appreciate knowing in advance if you will need to miss class.
If you have a documented disability or some other reason that you cannot meet the above expectations, and/or your learning would be best served by a modification to the usual course policies, I would be happy to work with you—please get in touch (via Teams or email)! The course policies are just a means to an end; I don’t care about the policies per se but I do care about you and your learning.
It is the policy of Hendrix College to accommodate students with disabilities, pursuant to federal and state law. Students should contact Julie Brown in the Office of Academic Success (505.2954; brownj@hendrix.edu) to begin the accommodation process. Any student seeking accommodation in relation to a recognized disability should inform the instructor at the beginning of the course.
Hendrix College values a diverse learning environment as outlined in the College’s Statement on Diversity. All members of this community are expected to contribute to a respectful, welcoming, and inclusive environment for every other member of the community. If you believe you have been the subject of discrimination please contact Dean Mike Leblanc at leblanc@hendrix.edu or 501-450-1222 or the Title IX Coordinator Jennifer Fulbright at titleix@hendrix.edu or 501-505-2901. If you have ideas for improving the inclusivity of the classroom experience please feel free to contact me. For more information on Hendrix non-discrimination policies, visit hendrix.edu/nondiscrimination.
Hendrix recognizes that many students face mental and/or physical health challenges. If your health status will impact attendance or assignments, please communicate with me as soon as possible. If you would like to implement academic accommodations, contact Julie Brown in the office of Academic Success (brownj@hendrix.edu). To maintain optimal health, please make use of free campus resources like the Hendrix Medical Clinic or Counseling Services (501.450.1448). Your health is important, and I care more about your health and well-being than I do about this class!