A close look at what goes on "under the hood" of a computer, examining how machine code for a C program runs on a linux computer. Sometimes called "Computer Organization", a course like this one is a required part of most computer science degree programs, typically taken by in the second or third year.
Topics include a review of the C programming language, machine-level data representation and assembly language, processor organization, system performance, memory caching and virtual memory, code compilation and linking, processes, signals, and some networking.
Prequisites: Permission of the instructor. Two previous computer science courses such as Introduction to Computer Science and a Data Structures course, or the equivalent are required, including familiarity with the unix shell and C programming language.
By taking this course, students will see the inner workings of the unix operating system. In particular, they will
We'll meet twice weekly in a zoom session, Tue and Fri from 2-4pm, to make sure we're all on the same page and to discuss the material.
I'll post regular course notes describing what you should be doing, as well as twice weekly assignments. I may also post some videos of myself explaining some topics if that seems appropriate.
We'll be following a Carnegie Melon course which has videos, pdf slides, and packaged coding "labs" , all by the authors of the textbook.
So the course will consist of :
While I've taught this course a number of times before at Marlboro College, doing it entirely online is new to me, so this plan may well change as we go along. Please do give me feedback about what is and isn't working.
You should expect to spend at least twenty hours per week on this course, and perhaps more depending on your background and inclinations.
This material is technical and detailed; you'll need to both to dig in and study the sources, and to be persistent in working on the assignments and labs.
All work in this class is to be completed and submitted by each student - none of these are to be submitted as group projects. However, you may work with others if you choose, as long as you document in your submission what was your work and what wasn't. You may also search online for hints as needed - as long as you clearly quote your sources, and give credit where credit is due.
For all the work that you turn in, I am looking for you to demonstrate that you understand the material and have engaged with the problem fully. Simply finding an answer online and quoting it is not enough - your goal should be to convince me that after reading, studying, and with whatever assistance you found, you have understood and accomplished the task at hand.
A note on attribution, code, and the culture of programming...
The "culture" surrounding programming is one that encourages sharing and collaboration. Open-source software, online communities such as StackOverflow, GitHub/Gist, and the fast-paced nature of the technology world have all led to a vast collection of places where programmers can quickly and easily get help in solving common and not-so-common problems. This is a fantastic and vital part of being a 'programmer', and I encourage you to use and contribute to these communities.
This being said, there are a few important guidelines that MUST be followed in order to strike a balance between collaboration and academic integrity:
Here's an example of quoting your sources : a lot of the preceding language in this syllabus is from Andrew Cencini's Fall 2019 Intro CS course. ("Hi Andrew!")
This is the schedule I have in mind as of Oct 19. It may change depending on how things go.
In any case, go by what's on the assignments page for what's due when.
date calendar deadlines book topic
---- -------- --------- ---- ----
Tue Oct 20 first_class
Wed 21 chap 1 shell, C, tools
Thu 22
Fri 23 HW 0
Mon 26 chap 2 bits, bytes, ints
Tue 27 HW 1
Wed 28
Thu 29 plan day
Fri 30 data lab due chap 3 machine code
Mon Nov 2
Tue 3 HW 2
Wed 4 plan day
Thu 5
Fri 6 bomb lab due
Mon 9
Tue 10 plan day HW 3
Wed 11 chap 6 cache memory
Thu 12
Fri 13 attack lab due
Mon 16 chap 8 processes
Tue 17 HW 4 (memory)
Wed 18
Thu 19
Fri 20 HW 5 (processes)
Mon 23
Tue 24 shell lab due
Wed 25 thanksgiving
Thu 26 thanksgiving
Fri 27 thanksgiving
Mon 31 chap 9 virtual memory
Tue Dec 1 HW 6
Wed 2
Thu 3
Fri 4 malloc lab due
Mon 7 chap 11 networking
Tue 8 HW 7
Wed 9
Thu 10
Fri 11 last_class proxy lab due
The labs are challenging. I would like you to
Your course evaluation will be based on
For each of those four pieces I'll assign a letter grade (A=excellent, B=good, C=fair, etc) and then average those grades.
For the homework part, a reasonable effort to engage in the material for a homework assignment is worth 1.0 point. If there are for example 10 assignments, then there are a total of 10 possible points for homework complete. Turning in a partial assignment or a late work is worth less than 1.0, perhaps 0.5 depending on how late or how much is done. I often use placeholder words such as "yes" (i.e. 1.0) or "partly" (i.e. < 1.0), and then use my judgement to assign numeric values and an overall grade at the end of the term.
For the labs, your work will be judged on how how well it shows your understanding of the material. Explain what you did in a way that would make sense to someone else in the course, including a bibliography of your sources and enough context to make it clear what you're talking about.
If circumstances outside of your control - illness, technology issues, your dog ate your homework - get in the way, please do let me know, and we will try to work things out.
Questions about anything at all? Ask jim.
Bennington College provides reasonable accommodations to students with documented disabilities when such accommodations are requested and necessary to ensure equal access to College programs and facilities. If you believe you are entitled to an accommodation speak with Katy Evans, the Academic Services and Accommodations Advisor, about any disability-related needs. If approved, you will receive a memo detailing your specific accommodations; it is your responsibility to provide me with the memo and discuss the implementation of accommodations. Note that I will not be aware of your needs if you do not share this memo with me. Accommodations are not retroactive, so the sooner we meet to discuss your needs, the better. Also, students experiencing mental and/or physical health challenges that are significantly impacting their academic work are encouraged to speak with their faculty advisor and member of Academic Services (academicservices@bennington.edu or 440-4400) about the impact and to connect with resources through health and psychological services (440-4426 or 440-4451).
At Bennington College, we understand that basic needs (food, housing, and wellness) have a direct impact on academic performance, mental-emotional-physical health, professional development, and holistic success of our students. If you have a personal circumstance or need that will affect your learning or performance in this course, please let me or your faculty advisor know so that we can direct you to available resources to help support you during the term.
Bennington College is committed to fostering the intellectual growth of all students, and to creating a learning environment where human cultural diversity is valued and respected. To that end, in this course all students can expect a respectful, welcoming and inclusive environment. I hope that all students in this course will openly share their unique perspectives and, just as importantly, respect the perspectives, comments, and contributions made by every other student and guest that participates in this course during the term. If you feel that at any time that this goal is not being met, please don’t hesitate to see me, or speak with a college administrator (e.g., from The Office of Diversity & Inclusion, Student Life, or Academic Services) to share your concern.