CS 14 is a course that will cover the basic topics of computing architecture. More specifically, we will see how basic propositional logic can be the basis for computing any function. From there, we will develop computing devices with memories and programmable instructions -- in essence, we will see the basics of how CPUs and full computer systems are constructed.
Here is a brief list of many (but not all) of the topics that we will cover, in roughly the order that we will cover them:
A good deal of time will be spent in our digital lab, where we will create computing circuits from basic electronic parts. That is, we'll be working with chips, wires, buttons, and blinking lights. There will also be some time spent on assembly language programming, as we will need to understand how CPU's are programmed before building such a computational device.
This course should be fun, as there is a great deal of hands-on experience with the material. It is also a great demystifying course, as you will have a much better understanding of the operation and principles behind the computers that surround us. Note, however, that it is a course with a great many details, as well as a course that is exceedingly cumulative. It will be critical that you stay on top of lectures and labs at all times.
Lectures are every Monday, Wednesday, and Friday at 10 am in Seeley Mudd 206.
Labs are on Thursdays, in Seeley Mudd 006 (a.k.a. the digital lab), and last for 50 minutes each. There are three lab sections:
You will have registered for one of these sections, and you must attend the lab section for which you have registered. While you may request to attend a different lab section from your usual one due to a transient conflict, the lab sections must be kept small and balanced in numbers, so section-jumping will not be allowed.
You will be responsible for all of the lectures and labs, and so missing either is strongly discouraged. I will not teach material twice, so if you miss a lecture or a lab, you're on your own. If you must miss lecture or lab due to an illness or other emergency situation, contact me and we will arrange to handle the situation. If you have a conflict with a lecture or lab -- for an athletic event, performance, or other extra-curricular activity, or to depart early for or arrive late from a vacation, or any other non-emergency -- then the choice is yours to miss or attend. I do not want to know why nor even that you are missing class. You have elected, voluntarily, not to attend, and you must be prepared to obtain and learn the material that you missed on your own.
Participation will be a very important element of this class, both in the lectures and the labs. As you will see in the grading section, below, your participation will affect your final grade in a substantial way. The points to be earned for partitipation are not perfunctory! You really must participate in order to earn these points. Participation implies preparation: If you do not understand the material, then you should come and talk to me immediately in order to get up to speed.
The text we will use is Patterson and Hennessy's, Computer Organization and Design: The Hardware/Software Interface, Third Edition. You can find this book at the Jeffery Amherst College Store. This is one of the few well-written CS texts, and is worth having. It will also be the case that the book will provide more in-depth presentation of many of the topics that we cover in lectures. It is strongly recommended that you regularly review the lecture material by reading the relevant text.
There will also be a body of references for the chips that we use in labs. These will be posted in PDF format on the course's Documents page. I will also bring copies to labs, but you may find the online versions easier to keep track of, depending on your organizational proclivities.
There will be a number of labs and problem sets. The deadline for each will be stated clearly on the assignment, down to the minute. The assignment will also state the manner in which you are expected to submit or show your work. Late submissions will receive failing grades. Futhermore, failure on any one of the labs may result in a failing grade for the course. The labs are too important to the course not to be completed.
An extension for any assignment must be requested, in writing (email counts as writing), at least 48 hours prior to the deadline. The determination as to whether or not a particular situation merits an extension will be made on a case-by-case basis. Scheduled events are not sufficient reason to warrant an extension. Rather, extensions are intended for unusual circumstances that prevent you from planning your time well in order to meet the deadline. Note that a sudden onset of illness less than 48 hours before a deadline will be treated as a special case.
There will be three exams in this course:
Your final grade will be determined by a formula roughly like the one below:
You will be expected to do your own work on all labs, problem sets, and exams in this course except where explicitly noted on the assignment. While I encourage you to interact with your classmates and discuss the material and assignments, there is a limit to the specificity of such discussions. I seek to make that limit clear here.
It is acceptable to discuss any assignment for the class with a classmate. You may even discuss your approach to a particular problem, or review relevant material for a problem with another person. However, you may not show another your work, nor see another's work. On programming assignments, that means no sharing of code, whether that be proper, formal, compiling code or mere pseudocode. On circuit designs, that means no sharing of circuits or circuit diagrams. Most importantly, if in doubt, ask me. If you are unusure whether or not a particular kind of communication would rise to the level of academic dishonesty, then you should contact me immediately and find out.
There will be so many details to remember and understand in this course that it is easy to miss the forest for the trees. Don't forget, now and then, to consider the bigger picture: that from one simple level of capabilities, you can create another, fundamentally different, more complex level. As you repeat this process, you develop something so complex from components that are so simple that it seems nearly impossible that the former could arise from the latter. Only because we have seen the progression, step by step, do we see how it is done.