(Last Mod: 05 January 2014 22:11:26 )
This comprehensive course will help students consolidate their understanding of all fundamental computer science concepts. Topics include symbolic communication, Boolean logic, binary systems, logic gates, computer architecture, assembly language, assembler construction, virtual machines, object-oriented programming languages, software engineering, compilers, language design, and operating systems. Using a hardware simulator and a programming language of their choice, students construct an entire modern computer from the ground up, resulting in an intimate understanding of how each component works.
Prerequisite: CSCI 341 or EGGN 482.
NOTE: A course "as taught" is seldom in strict adherence to the catalog
description, which is intended to give a fairly high-level description of the
course in broad brush strokes. In reality, while the catalog description changes
only rarely, most courses change from one offering to the next, and even one
section to another within the same term, reflecting both a general
evolution and refinement over time and also the strengths, weaknesses, and
preferences of the specific instructor. This course is no different, although in
practice it is much closer to the catalog description than most. The two key
differences are that, currently, the course provides a brief and qualitative
introduction that doesn't start with NAND gates as the primitive building block,
but looks at how a NAND gate itself works and is constructed. Similar attention
is given to the D-type flip-flop that is used as the basic building block for
sequential logic. In addition, students will not use a programming language of
their choice, but rather will use the Python scripting language for a number of
practical and pedagogical reasons.
The Elements of Computing Systems - Building a Modern Computer from First Principles
Noam Nisan and Shimon Schocken
ISBN: 978-0-262-64068-8
The MIT Press, 2005
CODE - The Hidden Language of Computer Hardware and Software
Charles Petzold
ISBN: 978-0-7356-1131-3
Microsoft Press, 2000
How CODE fits into the Elements of Computing Systems course
All of the software directly related to the projects for this course can be found at the following website:
To run some of these programs, you will need the Java Runtime Environment, as well.
It is recommended that you install Python 3.3.3 from the above site, as this is the version that the instructor and grader will be using and your code must run successfully on the grader's platform.
The course has the following grading groups:
Assignment Type | Each | Total | Weight |
Participation (5) | 10 | 50 | 5% |
Quizzes (13) | varies | 200 | 20% |
Python (5) | 20 | 100 | 10% |
Projects (20) | 30 | 600 | 60% |
Final Exam (1) | 50 | 50 | 5% |
TOTAL | 1000 | 100% |
Please note that this is a goal. Things may come up that will alter the final distribution of points. In general, each person's grade will be computed two or even three ways and the each person's raw score will be the highest among them. First, according to their percentage of the total points actually available; second, as a weighted percentage using the weights as above (if a category is removed entirely, the weights of the remaining categories will be adjusted to keep the relative weighting the same); and third, according to any new weights that might be announced.
Most weeks there will be an on-line quiz that must be completed prior to class on the day it is due. More specifically, no later than the submission deadline for electronically submitted work. Each quiz will focus on the reading material that the course is moving into. The quizzes will generally (but not always) consist of ten to twenty multiple-choice questions falling into two categories: basic concept questions concerning the new material and deeper comprehension questions concerning previously covered material. Over the course of the semester, the plan is to have a total of two hundred quiz questions each worth one point toward the overall course total. The primary purpose of the quizzes is very simple -- to encourage you to read the material prior to it being covered in class. A secondary purpose is to revisit concepts covered earlier in the semester but that the next project draws upon, which also serves the goal of discouraging a binge-and-purge approach to the material.
In order to prepare students to solve the programming projects effectively using Python, there will be several initial programming projects intended to expose students to the key data structures, functions, and techniques that will be useful.
The bulk of the work in the course, as well as the bulk of the points, will be the twelve Nand2Tetris projects from the Elements of Computing Systems text. These will nominally be accomplished at the pace of one per week, but some may be allowed more or less time depending on the complexity of the project.
There will be be a final exam in the course. The plan is for it to be a 100 question multiple choice exam drawing heavily upon the questions from the quizzes, although it may containing additional question allowing for the possibility of earning extra credit.
All assignments are due, via submission to Blackboard, before 6:00AM on the assigned due date. In general, submission will NOT be accepted late as this delays the ability to make solutions available or to get grading done in a timely manner. Exceptions will be made only by prior arrangement (with special case exceptions) for bonafide reasons and will generally have a 20% per day late penalty.
To be clear, circumstances that were known in advance and could be planned for will seldom constitute a bonafide reason for failing to submit an assignment on time. You are responsible adults on the verge of becoming practicing engineers. A key part of this is accepting the responsibility for good time management and the consequences for poor time management. If you choose to put off starting a project until just before it is due because you had three exams in two days or because you won't be back in town from a sports or interview trip until then, this is a choice you have every right to make -- but it IS a choice YOU made. Don't expect others to suffer due to poor planning on your part.
As a final note, don't push the submission deadline and put yourself in a position of having to submit in the last few minutes before the deadline expires. If the assignment is time-stamped by the Blackboard server as being 6:00AM or later, then it is late and will not be given credit. Keep in mind that the clock on the Blackboard server may not exactly match your watch, your computer's clock, or the official universal coordinated time maintained by NIST. Also, don't rely on the submission going perfectly smoothly. Give yourself a cushion and set your own personal deadline and treat that as though it were the official deadline. If you choose, for instance, midnight then if it ends up getting done a half hour late you are just fine. Also, if routinely plan to get it done and submitted the day before it is due, then if you run into an unexpected hurdle, you not only have time to deal with it, but you also have the opportunity to consult with your instructor the following day and still be able to work on it and submit before the hard deadline.
First off, let's get past the notion that there is some ideal time for homework to be due. No matter what time is chosen, some fraction of students are going to find some reason to criticize it and some of those reasons are going to be reasonable, at least on the surface. However, nearly all of these criticisms implicitly assume that students will not be submitting until the actual deadline and ignoring the fact that students can submit at whatever time they choose, as long as it is before the deadline. Having said that, it is an inescapable fact that students have multiple demands on their time and that the adage about the squeaky wheel getting the grease is the rule rather than the exception. With this in mind, the deadline for anything that is due and that is to be submitted electronically will be 6AM on the due date.
In the unlikely, but possible, event that something is to be submitted in hardcopy form, submissions will be accepted at the beginning of class on the due date. Note that this does NOT mean that you can print out your files that were due electronically that morning and turn them in when you come to class. This only applies if the specified method of submission is hardcopy.
Why 6AM? The answer to this lies in why certain other obvious times were NOT chosen. If any time during the school day, say 8AM, noon, the beginning of class, the end of class, or 5PM, were chosen then students that procrastinated would be tempted to skip class (either this one or some other course) in order to finish the assignment and get it submitted -- this is fair neither to the student nor to the instructors whose classes are skipped. Another obvious choice is midnight, but this has two problems -- first, there is a good chance that other assignments will also be due at midnight and also, students routinely stay up late working on homework until well past midnight. Having an assignment due in the middle of this common work period is disruptive and often leads to students pushing the deadline too hard and submitting slightly late. By having the deadline be 6AM, few students will willingly plan to stay up that late (or get up that early) to work on an assignment, and thus will tend to naturally set an earlier "soft" deadline for themselves associated with when they prefer to call it quits for the night and go to bed. If the assignment ends up dragging on a bit later than that, they can deal with it without running them afoul of the "hard" deadline.
The next decision to be made is what day of the week assignments, particularly the project assignments, will generally be due. For this course, that will normally be Friday, though there will be some exceptions to that.
Why Friday? The real driving factor here is the Help Sessions that are held each Tuesday evening. In order to make these most effective, the course material for a given project will normally be introduced in class on Wednesday and completed on Monday. Students should then be in a position to start the project by Monday evening and have worked at it enough by Tuesday evening in order to come to the Help Session prepared to ask for targeted help. By the same token, Tuesday evening is soon enough after the material is presented and far enough in advance of the due date that students that are struggling with the concepts and getting started can come to the Help Session and still have a reasonable chance of completing the project on time. Another motivation for having the projects due on Friday is to remove that burden from the weekend load. There will almost certainly be plenty of other courses that expect/assume that the bulk of the work will be done on the weekend, so the goal here is to not compound that situation unnecessarily. Finally, the goal is to give the grader a reasonable opportunity to get submissions graded and results posted prior to class on Monday.
Having said all of this, there will usually be one thing, be it a quiz, a Python assignment, or an ECS project, due each day that class is held (there are exceptions, particularly later in the semester, in which nothing is due). Thus, the day of the week that project assignments are due will vary quite a bit and be driven by the combination of how much time each project is given and the exact schedule of holidays throughout the semester.
A common pitfall many students seem to fall into is that, since the assignment isn't due until Friday (well, effectively Thursday night), students haven't even looked at the assignment on Tuesday night and don't feel any particular pressure to do so. As a consequence, they don't come to the Help Session and don't start working on the project until Wednesday or even Thursday night. That's a choice you are free to make, but do NOT expect any sympathy or concession when you are unable to complete the project by the deadline -- you will get neither.