If we have a reasonable understanding of what computers can do, a logical next step is to think about how they can do it. If I write var = var + 1;
in C, what does the computer actually do, "behind the scenes," to make that happen? What are all of those parts inside the computer, and how do they work together? And how are they designed to be as efficient as possible?
We will approach these questions from two different directions. Computer science contains an abundance of abstraction, and this course investigates several layers of abstraction below what you have likely previously studied. In one direction, primarily in lab, we'll start from a very low level, the physical building blocks of digital electronics, and work upwards, building more and more complex structures as we reach towards a complete computer. In the other direction, we'll work from what we know of high-level programming languages down towards the physical implementation of a machine that can execute such code. In the middle, the two directions will often meet, joining to form a complete connection from code to electrons.
For an idea of the specific topics covered in the course, see the rough schedule for the semester.
Semester schedule — tentative - see Moodle for up-to-date details.
Moodle — reading, assignments, quizzes, announcements, and other online resources will be posted here.
Online Resources — notes, readings, and other resources will be posted here. I will link to relevant entries from Moodle, but it doesn't hurt to browse and see what else is there.
The final grade will be based roughly on the following breakdown:
Assignments | 35% |
Labs | 25% |
Exam 1 | 15% |
Exam 2 | 15% |
Engagement | 10% |
Assignments will be posted on the course's Moodle site, usually about a week before they are due, and they will be collected there as well. Submissions should be in the form of PDF documents*.
The labs will be hands-on explorations of hardware concepts, generally involving designing, building, and testing digital logic circuits. The labs will prepare us for a final class-wide project of designing, building, programming, and testing a complete, working CPU.
Lab assignments will be posted on the course's Moodle site. Reports should be submitted on Moodle as PDF files. The desired format of the reports will be specified on Moodle.
Assignments and Labs will be due at set times; they will be considered late at any point after that time. An assignment will lose 10% of the total possible points for every day or partial day it is late, and after five days it will not be accepted.
Assignments can't be accepted at all after solutions have been handed out or the graded work has been returned to the class.
Every student has two "grace tokens" that they may use for extensions in instances where they are unable to complete work by the assigned deadline. To use a grace token on an assignment, contact me before the assignment deadline, explain why you need an extension, and we will determine an appropriate extension, which will be granted with no grade penalty. Some assignments may not be eligible for grace tokens due to immediate use of or feedback on the submitted work, but most will be.
There will be two exams during the semester, held in class.
If you would like to request a regrade, submit a request in writing (via email) within one week of receiving the graded assignment, exam, etc. Indicate exactly which part you believe deserves a different score and why.
Class time will be complementary to the reading, and you will need both in order to learn all of the material in this class. Many class sessions will involve material and/or practice that you will not be able to find or make up elsewhere. Furthermore, each student benefits from the engagement of all others in the class. Part of your final grade will be based on that engagement. Attending every class period on time and prepared will earn a base of 70%; points can be gained by constructive participation, in class or out, such as asking questions, answering them, responding on Piazza or Discord, sharing insights or useful/interesting resources with the class (posting on Discord, for example), investigating concepts beyond the requirement in class, working on small independent learning projects, and in many other ways. Points can be lost for excessive (more than 3) unexcused absences, disrupting class (e.g., regularly showing up late), poor participation in group exercises, and the like.
Absences can be excused with documentation from health services or the Dean of Students' office, or if arrangements are made with me more than a week in advance. In general, if you know you will be missing a class, let me know as soon as you can.
If any concept, piece of code, compiler error, or anything else related to this course is ever unclear to you, please come see me during my office hours. One-on-one, I can help you bridge the gap from what you do understand to what you want to understand. It will generally be the easiest, fastest way to clarify something.
If you cannot attend any of my regularly scheduled office hours, I'm more than happy to setup another time to meet. Just let me know.
And to make sure that misunderstandings and difficulties do not go unaddressed, I will often ask that anyone who receives a C- or below on any assignment or exam come see me to see what we can do about improving that going forward.
I strongly encourage you to form study groups with your classmates, compare notes, explain concepts to one another, and generally help each other learn the material in this course.
Any material turned in for a grade must be your own individual work, though. You may work on concepts with other students, but I ask that you not discuss assigned problems until after the work has been turned in. Giving or even showing your solutions or code to another student is not allowed.
This has two goals: 1) let the grades be a reflection of each student's own work, and 2) avoid situations where one person solves a problem and another records the answer as their own work without really learning. I understand that the line between discussing concepts and solving problems can be vague, so I ask that you use your own judgement with those two goals in mind and ask me if a situation is unclear.
For details on the university's policies regarding academic honesty, please read the sections of the student handbook on conduct, cheating, and plagiarism. Cheating of any form can result in failing the course and a report to the associate provost. If you are ever unsure of whether something might be crossing that line, just ask me, and I'll be happy to provide guidance.
Illinois Wesleyan University strives to make all learning experiences as accessible as possible. If you anticipate or experience academic barriers based on a disability (including mental health and chronic or temporary medical conditions), it is your responsibility to register with Accessibility Services. Please note that accommodations are not retroactive and accommodations cannot be provided until I receive an email from Disability Services. Once the email is sent, please make arrangements with me as soon as possible to discuss your accommodations confidentially so they may be implemented in a timely fashion. For more information contact Disability Services by visiting 110 Holmes Hall, calling 309-556-3231, or emailing cshipley@iwu.edu.
Our university's mission statement includes, "The University through our policies, programs and practices is committed to diversity [...]" Our school and this course are made stronger by the mix of people that come into it bringing a diversity of ideas, experiences, and backgrounds. I expect everyone in this course — instructor, TA, and student — to contribute to an inclusive atmosphere that respects the diversity of all others in it. Dimensions of diversity can include sex, race, age, national origin, ethnicity, gender identity and expression, intellectual and physical ability, sexual orientation, income, faith and non-faith perspectives, socio-economic class, political ideology, education, primary language, family status, military experience, cognitive style, and communication style. The individual intersection of these experiences and characteristics must be valued in our community. If you have related concerns about the class environment or behavior of any in it (including me), you are welcome to raise them with me, and I will do my best to address them. If you are not comfortable speaking with me about them, you may also bring concerns to the Provost or the Office of Diversity and Inclusion.
Help each other. This is good advice for any course. By working out concepts with others or teaching someone about something you've already worked out yourself, you can greatly improve your understanding. Teaching or any other kind of back and forth will point out any gaps in your understanding, trust me; as a student, I learned a great deal and did well in many classes primarily because I helped others. In this course, helping each other is perhaps even more useful than normal, because the course is full of new kinds of ideas. Much of it will not be programming, will not be math, and will not be like anything you've done before. With everyone starting from a similar baseline, each person in the class might have a valuable insight or perspective on a particular concept that can be shared with the rest. The lab will also be very conducive to this sort of sharing; if you come up with a helpful way of working or thinking in the lab, let the rest of us know! There is no competition here.