Welcome to CSE 29! We are excited to have you in this course. CSE 29 introduces an exciting range of topics in systems programming, including: (1) how a single program executes on a computer, (2) higher-level programming in C, (3) software tools for interacting with a computer via the command line, and (4) the basics of what happens when multiple programs run simultaneously.
It’s all very cool stuff every programmer should know!
CSE 29 assumes you have familiarity with basic programming (CSE 8A, 8B, or 11). You will be doing a lot of hands-on assignments in C (the greatest language ever, naturally) using the software tools (e.g., gdb, git) we learn in this course. These tools are fundamental for collaborating effectively in software development teams and will help you build practical skills that extend beyond the classroom.
Students who successfully complete CSE 29 will be able to:
Describe how a single C program runs on a computer
Read, write, debug, and test C programs
Use software tools to work with C programs (e.g., GDB - GNU Debugger)
Use effective programming practices like incremental development, debugging, testing
Describe how multiple programs can run at the same time on a computer
We will be using the following free online textbook (required)
Dive Into Systems: https://diveintosystems.org/book/
Learn C Programming: a beginner's guide to learning C programming the easy and disciplined way (Available online for free at our UCSD library!)
Additional Readings (Optional):
The C Programming Language (2nd Edition) by Brian Kernighan and Dennis Ritchie.
Link to textbook: here
Computer Systems: A Programmer’s Perspective (3rd Edition) by Randal E. Bryant and David R. O'Hallaron.
Link to textbook: here
NOTE: You need NOT purchase any textbook for this course! Readings will be assigned from the above FREE ONLINE TEXTBOOK and other online sources.
Our course website can be found here: https://sites.google.com/ucsd.edu/cse29winter2025/
The course webpage contains basic information, syllabus (that you are reading right now!), schedule (including office/lab hours), materials (notes, slides, etc) and staff contact information. You should check our course website often!
We will be using Canvas (www.canvas.ucsd.edu) for publishing your grades for this course. The grades you see on canvas is YOUR OFFICIAL GRADE, and it is your responsibility to CHECK THEM REGULARLY to make sure they are recorded correctly.
We will use Piazza as our course discussion board. Please ask all course content related questions via Piazza. Make your post public unless it contains personal information. This will help you get the fastest response possible to your post. DO NOT POST YOUR CODE as a public post on Piazza as it will be considered as an Academic Integrity (AI) violation. When posting a question on Piazza, make sure to select the appropriate folder for your question. For example, if you have a question on Exams, you should select the Exams folder.
Please DO NOT use the Canvas mailing feature (i.e., Canvas messages) to contact the instructor or TAs. We will NOT be reading canvas messages and so we will not respond to those messages. Use Piazza for all course communications. For personal issues, please use the instructor's email.
🚨🚨🚨
Please read this carefully because this course follows a DIFFERENT GRADING POLICY from standard ones.
There are two high level course components in CSE 29: Assignments and Assessments.
Certain course components will add up to 100 points in the Assignments category and certain course components will add up to 100 points in the Assessments section. Your final grade will be determined by:
Final Grade = minimum (Total Assignment Grade, Total Assessment Grade)
We are enforcing this minimum policy to ensure that students demonstrate their own understanding of the course objectives, without relying on external resources (e.g., LLMs).
Assignments (total of 100 points)
PAs: 40%
Labs: 25%
Participation (0 - 10%)
Lecture: 7%
Discussion: 3%
PrairieLearn Review Quizzes: 25%
Assessments (total of 100 points)
Skill Demonstration #1: 15%
Skill Demonstration #2: 15%
Exams
Midterm: 30%
Final: 40%
By default, we will use the standard scale of 90%—100% = A, 80%—89.9% = B, 70%—79.9% = C, 60%—69.9% = D, and <60% = F. These cutoffs may be lowered if need be, but they will never be raised. In other words, we may make it easier to get a certain letter grade, but never harder. Pluses and minuses (e.g., A+, A-) will be given at the professor's discretion.
Final Letter Grade = minimum(Assignments Grade, Assessments Grade)
Example:
If you score 97% (A grade) on the Assignments and your score on the Assessments is 86% (B grade), then your final letter grade will be computed as follows:
Final Letter Grade = minimum(Assignments Grade, Assessments Grade) = minimum(A grade, B grade) = B grade
The grading policy is designed to ensure fairness and accurately reflect each student's understanding and skills in the course. Here's why we use the method of taking the minimum between your assignment grades and your assessment grades:
Assignments (like programming assignments and labs) are crucial for practicing and learning, but they can sometimes involve getting help from others -- whether that's TAs, tutors, friends, or online resources. While collaboration and seeking help can be valuable, the primary goal of the assessments (like exams and skill demos) is to evaluate your own individual understanding and proficiency.
To prevent scenarios where a student might rely heavily on external help for assignments and still receive a high grade that doesn't accurately represent their knowledge, we use the min(assignments, assessments) approach. This way:
If you get external help for assignments and do well on them (let's say an A), but struggle with the assessments (C), your final grade will reflect the lower score (C).
If you work independently on assignments and achieve a B, and demonstrate that same level of understanding on the assessments (B), then your final grade will be a B.
This method encourages honest effort in assignments and aligns your grade more closely with the skills you demonstrate independently during assessments. It rewards the hard work of students who genuinely engage with the material themselves, even if they struggle, by ensuring their final grade reflects what they can do on their own.
As stated above, there are two high level course components in CSE 29: Assignments and Assessments.
There will be a total of 4 Programming Assignments (PAs). The PAs will be 2 weeks long. Typically, we will release a PA on Wednesday, which will be due at 11:59pm PT on the Tuesday after next (13 days later). PAs are worth 40% of your assignment grade. All PAs should be done individually! All PAs will be counted towards your assignment grade. No PAs will be dropped.
All labs will happen on Fridays and the goal is for you to take this as an opportunity to learn software tools and apply them in this course. There will be lab sessions starting as early as 10 AM and the latest lab session will start at 4 PM. There will be a lab report that will be due every week at 11:59 PM on Saturdays. Each lab section will be lead by TAs and tutors who will be helping you during the labs throughout the quarter. You are required to attend the lab you signed up for unless the staff specifically emailed you about switching sections. Lab participation is worth 25% of your course assignments grade. No labs will be dropped.
Lab participation will be graded out of 2 total points:
1 point for submitting a lab report with screenshots on Gradescope
1 point for timely attendance and participation during lab
Timeliness is critical for labs. If you arrive after a predefined grace period of your scheduled lab, you will forfeit attendance points. However, you may still earn a maximum of 1 point by submitting the lab report on time.
You are allowed to make up TWO missed labs throughout the quarter. If you miss a lab or its report submission deadline and would like to make up, you should do BOTH OF the following:
Submit the lab report on Gradescope by 11:59 PM on Thursday following the lab, AND
If you did not attend the lab on time, visit any of the TAs/tutors during their office/tutor hours to explain your lab work by 11:59 PM on Thursday following the lab. If you attended the lab on time, you do not need to do so.
If you satisfy both of the above conditions, you earn full credit for the lab. If you do not satisfy at least one of the conditions, you earn 0 points for the lab. You will not be able to make up for more than 2 missed labs.
At the end of each week, there will be a Review Quiz (RQ), which will be released before the first lab on Friday and then due at 11:59 PM PT (Pacific Time) on Thursdays. The review quiz will cover topics from the the readings, lectures, and discussions. You have to ensure that you do the readings and attend/watch lectures before taking the review quizzes. Review quizzes will be on Prairie Learn. Review quizzes must be done individually. No RQs will be dropped. You can attempt the review quizzes multiple times (before the deadline) until you get them correct! You will be given time to get started on the review quiz during the lab sessions.
Lectures will consist of active learning, where you will work alone and in groups to solve problems and answer problems. Discussions will be problem solving sessions where we will be solving worksheet problems. 10% of your assignments grade will be from lecture and discussion participation (7% for lectures and 3% for discussions), so attending lectures and discussions regularly and engaging with the activities will be key.
➡️ Lecture participation will be recorded via webclicker that you will fill out during lecture. You must use webclicker using your UCSD email to get participation credit. You must submit these questions during lecture. You must attend the lecture you are signed up for. If you are unable to attend a lecture, please make sure to watch the lecture recordings on your own. You will not be able to receive credit for lecture participation through watching lecture recordings. You can miss up to 4 lectures without any penalty.
➡️ Discussion participation will be recorded via completed worksheets submitted on Gradescope. You must submit the worksheet at the end of the discussion. You must attend the discussion section you are enrolled in. If you are unable to attend a discussion, please make sure to watch the discussion recordings on your own. You will not be able to receive credit for discussion participation through watching discussion recordings. You can miss up to 2 discussions without any penalty.
Opting Into or Out of Lecture + Discussion Participation
In week 3 of the quarter, you will have the option of opting into participation or opting out. If you choose to opt in, participation will be worth 10% of your assignments grade. If you choose to opt out, participation will be worth 0% of your assignments grade and your final exam grade will be worth 50% of your assessments grade (i.e., your final exam grade will be worth 10% more).
Skill demos will happen three times throughout the quarter (with the last one being optional). The first two skill demos will have 1 question and be 45 minutes long and will be similar to your previous review quizzes. The skill demos will be held on Prairie Learn at the Triton Testing Center (TTC) and you can schedule them anytime within a span of one week.
Skill Demo #1: Week 4
Skill Demo #2: Week 8
(optional) Skill Demo #3 : Week 11 (UPDATED 2025-01-17)
We recognize everyone learns at a different pace and thus provide another skill demo opportunity. This is Skill Demo #3 which will be optional, have two questions, and last a total of 110 minutes.
Question 1 of Skill Demo #3 will be testing a similar concept to Skill Demo #1
Question 2 of Skill Demo #3 will be testing a similar concept to Skill Demo #2
Skill Demo #1 will be worth 15% of your assessment grade and be calculated as max( Skill Demo #1 score, Q1 Score of Skill Demo #3).
Skill Demo #2 will be worth 15% of your assessment grade and be calculated as max( Skill Demo #2 score, Q2 Score of Skill Demo #3).
Details on scheduling your skill demos:
Skill demonstrations for this course will be administered by the Triton Testing Center (TTC) in the Computer-Based Testing Lab in AP&M B349. The TTC’s rules concerning testing are the rules for this course. You must schedule your skill demos in advance, and it is recommended that you do so as soon as possible. Scheduling for all skill demos is open now! To schedule, visit prairietest.com and log in with your UC San Diego credentials. More information about testing policies and procedures can be found on the TTC’s website. You may also email tritontesting@ucsd.edu for assistance.
Please note that, if you plan to use OSD-approved accommodations for your skill demo, you will take it at the TTC’s Pepper Canyon Hall location. You must schedule your skill demo at least three days in advance through the RegisterBlast system.
Policies and Procedures for testing at TTC – AP&M.
A physical photo ID is required for testing. Electronic IDs and photographs of IDs are not accepted.
Students should arrive 5-10 minutes before their scheduled testing time. Testing starts promptly at the session’s indicated start time. Late arrivals will be admitted when staff are available and additional time will not be given.
All personal items must be stored in the lockers near the stairway and elevator before entering TTC – AP&M.
There will be two exams in this course: a midterm and a final exam. The exam dates/times are shown below:
Midterm Exam: Thursday, February 6, 2024 during your scheduled lecture time
Section A00 @ CENTER 115
Section B00 @ Ledden Auditorium
Final Exam: Saturday, March 15, 2024 @ 11:30 AM - 2:30 PM for both sections
Location TBA
The final exam will be cumulative and will cover all topics discussed in the course. The final exam is worth 40% of your assessment grade. The midterm exam is worth 30% of your assessment grade.
Replacing your midterm with pre-midterm section of the final (ADDED 2025-02-11)
There will be portions of your final exam that cover the same content that was covered on your midterm exam. We will calculate the score you get on the pre-midterm content section of your final exam, and if and only if it is higher than your midterm grade, we will replace your midterm score with what you scored on the pre-midterm section of the final. You do not need to opt in to this policy, we will do this replacement automatically.
Both the midterm and final exams will be held in-person.
Each student gets four free “slip days” that allow an automatic 24-hour extension on any programming assignment (PA). You do not have to ask to use your slip days. Just submit your assignment after the deadline (but before 24 hours after the deadline) and it will be automatically deducted from your account. You may submit your PAs up to two days late. You can only use a maximum of 2 slip days for any PA. No PA can be submitted more than 2 days late.
Once you use up your free slip days, you can still submit assignments late but for each late day you will be docked 20% of the grade for that PA. You cannot submit a PA more than 2 days late. For example, if you submit your PA anytime between 12:01am - 11:59pm on the day after the PA is due, your PA will be graded only for a maximum of 80% total points. And if you submit it anytime between 12:01am - 11:59pm on the second day after the PA is due, your PA will be graded for a maximum of 60% total points. After 2 days no late PA submissions will be accepted.
You will have the opportunity to resubmit programming assignments (PAs) after receiving feedback for all PAs. Once a PA is graded and returned, you will have three additional days to submit a modified and improved version of your assignment. For example, if your PA1 grade is released on February 1, you will have until February 4 at 11:59 PM to resubmit. Resubmissions will be managed as separate assignments on Gradescope, clearly labeled with “Resubmission” in the title.
During this resubmission window, all previously hidden test cases will be fully visible, allowing you to identify and fix issues in your initial solution. We are doing this to help you learn from your mistakes, gain a better understanding of the material, and improve your overall performance.
Your final grade for each PA will be the average of your on-time submission grade and your resubmission grade. The formula is as follows:
PA# Final Grade = average( PA# on-time submission grade, PA# resubmission grade)
For example, if you earn 80% on your initial submission and 90% on your resubmission, your final grade for that PA will be 85%.
🚨However, if your resubmission grade is lower than your initial grade, your final grade may decrease. To avoid this, you are encouraged to test your solution thoroughly and ensure you address all feedback before resubmitting.
For the final PA (PA4), a special resubmission window will be available during the last week of the term to finalize grades. This policy gives you the chance to improve your understanding and performance while rewarding thoroughness in your initial submission.
If you enrolled in the course late, you will have until the end of Week 3 to submit any programming assignments or review quizzes that you may have missed before the time you enrolled in the course. For example, if you joined the course at the beginning of Week 2, then you may submit the Week1's PA1 and RQ1 anytime before the Friday of Week 3 (i.e., Friday, January 24th) to get credit for it. You will be expected to submit all the remaining course work starting from the time you are enrolled (in this example, Week 2) normally with other students.
You will NOT be able to make up any missed labs, discussions, and lecture participation.
To submit these missed assignments, please check for an assignment on gradescope that will be named as 'Late-Adds Only'. For example, PA1 (Late-Adds Only).
As a reminder, we drop 4 lectures and 2 discussions without any penalty. For more details on this refer to the Course Components section above. If you have any concerns at the end of the quarter due to this policy, feel free to bring it up to the instructors or TAs.
We, the course staff of CSE 29, highly encourage you to collaborative work with other students in the class on labs and take home assignments. However, it is your responsibility to make sure you understand the concepts in assignments you collaborate on.
IMPORTANT: If you are collaborating with someone with the intent of copying code or review quizzes to get points, even though you may feel you are doing well, you may still end up failing the course if you do not do well on exams and skill demos.
You and a friend are working on a PA together. You two come up with different solutions, so you discuss, test, and see what works together.
You ask your friend to help you understand a problem you are stuggling with on the review quiz. You share your thought process with your friend and your friend helps you in overcoming your learning barrier.
“Alright, you take part 1 of the PA and I’ll do part 2 of the PA?” “Cool.”
Your friend completes the PA. You copy it and submit it as your own, and you do not understand it as your own, meaning you may fail the skill demos.
You are with a friend working on a review quiz. You just copy what your friend is writing down on the quiz, and you do not understand it on your own, meaning you may fail the midterm and final exams.
If you are found cheating, we will enforce the UCSD Policy on Integrity of Scholarship. This means: You will get an F in the course, and the Dean of your college will put you on probation or suspend you or dismiss you from UCSD.
The basic rule for CSE 29 is: Start early! Work Hard! Make use of the expertise of our amazing CSE 29 staff to learn what you need to know to really do well in the course. Don't cheat!
Collaboration is highly encouraged, however if you copy code from a friend or an external source without understanding it on your own, it will be considered cheating and you may be reported to the academic integrity office. If you’re unsure what counts as cheating, feel free to reach out to the instruction staff for clarifications.
Generative AI Policy
These following policies regarding generative artificial intelligence (AI) use apply only in CSE 29, and may not necessarily apply in other classes at UCSD or reflect the university’s stance on AI use in education.
Can I use generative AI for assignments?
No. In CSE 29, the use of generative AI tools (e.g., ChatGPT, GitHub Copilot) for assignments is prohibited. While these tools can support learning in other contexts, relying on them for coursework undermines the integrity of your learning and assessment. Violations of this policy may result in penalties, including failing grades on assignments or the course.
If you use features that were not taught in this class, then those submissions will be flagged and those students will have a scheduled in person code review with the staff to explain random parts of their code, with the possibility of being reported to the Academic Integrity Office.
We highly recommend checking the Collaboration Do's & Don'ts for explicit examples when communicating with students over discord and when we would flag certain submissions.
UCSD provides additional resources for students about how to uphold academic integrity.
We expect that all students will need help at some point in this course. If you find yourself needing help, this is not cause for embarrassment: it is completely expected, and our goal is to ensure that you are able to receive the help you need. Please be sure to seek help early and often through any (or all!) of the following resources:
Your Study Group: Building a support system of friends with whom you can struggle and work through the challenges you encounter is one of the best ways to seek help. You will quickly understand how much you can learn by working together!
Office Hours: The instructors and the Teaching Assistants (TAs) are always willing to help you during our office hours. Ideally, office hours should be reserved for conceptual questions: coding-specific questions are best asked of the tutors during Tutor Hours. All office hours can be found on the Course Calendar.
Tutor Hours: There are many in-person tutor hours in which tutors are willing and available to help you with any questions you might have. They will be posted on the Tutor Hours. You can get help by raising a ticket on the Autograder. Please read Tutoring - Student Procedures to understand how to get help.
Piazza: Please use the Piazza discussion board for any questions related to the Programming Assignments (PAs), material in the course, or course logistics. Piazza allows you to post questions anonymously (to other students) if you don’t feel comfortable revealing your name. In general, all content related questions should be posted only on Piazza. You should ask specific questions related to your PA code during Tutor Hours. You should NOT publicly post any code on Piazza as it will be treated as an AI violation.
Email: If would like to discuss anything confidential with your instructors (e.g., personal issues preventing you from being successful in this course), then please email your instructors directly.
We are committed to fostering a learning environment for this course that supports a diversity of thoughts, perspectives and experiences, and respects your identities (including race, ethnicity, heritage, gender, sex, class, sexuality, religion, ability, age, educational background, etc.). Our goal is to create a diverse and inclusive learning environment where all students feel comfortable and can thrive.
Our instructional staff will make a concerted effort to be welcoming and inclusive to the wide diversity of students in this course. If there is a way we can make you feel more included please let one of the course staff know, either in person, via email/discussion board, or even in a note under the door. Our learning about diverse perspectives and identities is an ongoing process, and we welcome your perspectives and input.
We also expect that you, as a student in this course, will honor and respect your classmates, abiding by the UCSD Principles of Community (https://ucsd.edu/about/principles.html). Please understand that others’ backgrounds, perspectives and experiences may be different than your own, and help us to build an environment where everyone is respected and feels comfortable.
If you experience any sort of harassment or discrimination, please contact your instructor as soon as possible. If you prefer to speak with someone outside of the course, please contact the Office of Prevention of Harassment and Discrimination: https://ophd.ucsd.edu/.
We aim to create an environment in which all students can succeed in this course. If you have a disability, please contact the Office for Students with Disability (OSD), which is located in University Center 202 behind Center Hall, to discuss appropriate accommodations right away. We will work to provide you with the accommodations you need, but you must first provide a current Authorization For Accommodation (AFA) letter issued by the OSD. You are required to present their AFA letters to faculty (please make arrangements to contact your instructor privately) and to the OSD Liaison in the department in advance so that accommodations may be arranged.
If you are experiencing any basic needs insecurities (food, housing, financial resources), there are resources available on campus to help, including The Hub and the Triton Food Pantry. Please visit http://thehub.ucsd.edu/ for more information.
To further support our department’s commitment to diversity, equity and inclusion, we also offer a range of resources and initiatives that address the needs of our diverse community:
Website: https://cse.ucsd.edu/diversity_equity_inclusion
Office Hours: https://cse.ucsd.edu/diversity/dei-committee-faculty-mentorship-hours
Contact the committee: cse-dei-leads@ucsd.edu
The Office for Equity, Diversity, and Inclusion (EDI) is committed to building individual and departmental capacity to address barriers to success for our underrepresented faculty, staff, and students, to further efforts toward inclusive excellence and foster a more welcoming and supportive campus climate. EDI supports the campus community through a number of initiatives, programs, workshops and a variety of other resources.
“This public acknowledgment serves to honor and respect Indigenous peoples and their land on which our campus resides. UC San Diego was built upon the territory of the Kumeyaay Nation. From time immemorial, the Kumeyaay people have been a part of this land. Today, the Kumeyaay people continue to maintain their political sovereignty and cultural traditions as vital members of the San Diego community.”