This course provides a programmer’s view of how computer systems execute programs, store information, and communicate. It enables students to become more effective programmers, especially in dealing with issues of performance, portability, and robustness. It also serves as a foundation for courses on compilers, networks, operating systems, security, and computer architecture, where a deeper understanding of systems-level issues is required. Topics covered include: data representations, computer arithmetic, machine-level code and its generation, performance evaluation and optimization, memory organization and management, processes and concurrent computation, and networking technology and protocols.
Prerequisites: CS 54 and 62, or CS 60 and 70.
Lectures take place on Tuesdays and Thursdays 1:15-2:30 in Seaver Commons Classroom 102. See the schedule for details. Each lecture will feature one low-stakes quiz (topics also listed on the schedule).
Labs will be Wednesdays 7-8:15pm in Edmunds 219/229.
Joseph C. Osborn (Email: joseph.osborn@pomona.edu) | Office hours for Spring 2025 are Mondays and Fridays 9:30am to 11:30am in Edmunds 113. |
Angie Zhou | Mentor Hours: TBD | |
Max Linden | Mentor Hours: TBD | |
Julianne Louie | Mentor Hours: TBD | |
Tara Mukund | Mentor Hours: TBD | |
Vivien Song | Mentor Hours: TBD |
There will be nine weekly assignments in CS 105. These assignments are supposed to be fun and challenging, and they should help you learn the material covered in this course.
Assignments will generally be released on Thursdays, with work starting during the Friday lab; they will all be due the following Thursday at 11:59pm PT. See the assignment page for details.
The assignments are done in a pair programming paradigm. Adequate performance on all the assignments is required to get a passing grade in the course. Assignments will be started in the laboratory sessions and will be completed with a partner. It is your responsibility to complete the assignments and turn them in on time.
You have a budget of ten late days that may be used at your discretion to submit assignments after the deadline with no penalty. Both you and your partner must spend a late day available to use one. Further extensions after you have exhausted all your late days will be granted only in exceptional circumstances.
All laboratory exercises will be done on itbdcv-lnx04p.campus.pomona.edu, a machine configured for this class. Everyone registered should have an account when classes begin. This machine is remotely accessible when connected to Pomona campus wifi (or ethernet) or when connected to the Pomona VPN. I will try to make assignments compatible with other machines, but you might encounter some problems if you are unable to connect. If this becomes a problem for you let me know, and I will make accommodations as necessary.
There will be 5 check-ins this semester. Each check-in will be comprised of 2-3 questions about topics covered in the preceeding weeks (13 total topics).
You can improve your grade on any topic by answering a new question on that topic (the extra chance question). This extra chance question may be taken either after a later check-in (there will be 30 minutes allocated after each of Check-ins 2-5 for this purpose) or during the week 15 Tuesday class period.
You may re-take as many or as few topics as you would like, but you may only re-take each topic once. Re-takes will not lower your grade, but lower scores may result in sad faces from your professor.
Finishing all the assignments successfully is required to pass the class. After that, grades are computed on a point basis, as follows:
In general, collaboration is encouraged in this course. This means that you may discuss approaches to solving problems with anyone in this class, including students, faculty, and TAs. As specified in the department policy, you may help, or receive help, in using systems and tools, in debugging code, and in working with high-level design issues. You may use the internet to look up error codes or other issues you encounter while debugging, but searching for solutions online, seeing help from people not in the class, or using ChatGPT to generate solutions is forbidden. The rationale here is that you are trying to learn the material, and implementing programs is a bit of friction you can use to climb the gradient of understanding. The labs, in other words, are incidental, and you'll learn more (and do better on checkpoints) by working hard through wrong answers than you will by completing the assignment for full marks.
The actual solutions to the laboratory exercises and the code you submit must be your own and your partner’s. Except for material from the textbook or lecture, you may not copy, retype, view, or share a copy of any file. If you have any questions about what is appropriate or inappropriate collaboration, please speak with the instructor. When in doubt, credit your sources.
Course materials provided to you, including graded papers and exam summaries, are for your use in the course. You are encouraged to use them to the fullest extent, but you are not to publish them or distribute them to other people or organizations.
I am committed to ensuring that everyone can successfully master the material in this course. If you have a disability (for example, mental health, learning, chronic health, physical, neurological, etc.) or area of neurodivergence (e.g. autism, ADHD, giftedness, dyslexia, or others) and expect barriers related to this course, it is important to request accommodations and establish a plan. I am happy to help you work through the process, and I encourage you to contact the Student Disability Resource Center (SDRC) as soon as possible.
I also encourage you to reach out to the SDRC if you are at all interested in having a conversation. (Upwards of 20% of students have reported a disability.)
If you have extended time or other exam-related accomodations, you should plan to take the course check-ins at the SDRC. In such cases, I will try to be available to answer any questions via slack; I encourage you to confirm my availability in advance.