UCSD CSE 12 Spring 2023
Basic Data Structures and Object-Oriented Design
Greg Miranda
This course focuses on two main topics: The basics of organizing data for efficient computation, and the design of programs that use collections, classes, and interfaces.
Each week, we will explore topics in these areas interactively during lectures. You will read beyond what we explore in lecture, complete programming assignments to hone your coding and program design skills, and take exams that test your understanding of what you’ve learned. After, you’ll be better at designing and understanding programs and the structure of data they work over.
This web page serves as the main source of announcements and resources for the course, as well as the syllabus.
On an average week in CSE12, you can expect to spend 4-6 hours on videos, reading, lecture, and discussion; 2-3 hours on programming practice; and 4-6 hours working on your programming projects. If you find yourself spending dramatically more time than this, it’s a good idea to contact the course staff and discuss more efficient strategies in office hours.
Course Components
There are a few components to your grade in the course:
- Course engagement activities (Stepik exercises and surveys) (18%)
- Lecture Participation (10%)
- Programming assignments (32%)
- Exams (40% - 50%)
Letter grades will be assigned based on the following grading scale:
We may adjust the above scale to be more lenient (depending on a number of factors that we will not publicize), but we guarantee that we will not adjust the scale to make it harder to get a better grade. We will not adjust the scale for individual students.
Problem Sessions – Lectures
Most course content will be presented asynchronously through videos and readings, with associated interactive activities which should be completed before lecture. Lectures will involve problem solving with your classmates along with an opportunity to ask quesitons about the material. Participation is not required at problem-solving sections, but it is highly encouraged.
It is very important that students watch all pre-leture videos and go through the Stepilk readings as this is the primary way to learn the CSE 12 material.
In-person lectures will be led during the normally-scheduled lecture times in the normally-scheduled room, led by the instructor. These sessions will be recorded by podcasting but will not be available remotely while they are ongoing. You can find the recordings in the Canvas Media Gallery or at podcast.ucsd.edu
Since these lectures may be mostly student discussion, the recordings are mostly an archive of any live demos that come up rather than a presentation of core content. It can be helpful to watch the first few minutes of each lecture to see any annoucements. Not all annoucements are made on Piazza.
Starting with the second lecture, we will take attendance during lecture (except exams). You must attend at least 20 lectures to earn full credit for lecture participation. To receive credit for attending, you must make sure to check-in during lecture (check-ins will happen at random times in the middle of the lecture), we will not accept any check-ins after lecture and credit for attendance will not be given retroactively. The correct code for the lecture (given by the instructor during lecture) must be used or credit will not be given for attending the lecture.
Attendance check-ins will be handled through Gradescope therefore it’s highly recommended to download the Gradescope mobile app to your phone so you can upload your worksheets. Otherwise, you will need to hand-in your worksheets to the instructor after lecture and come to office hours to get them back. If the file has not uploaded by the end of lecture, hand-in the worksheet before you or the instructor leaves the room. We will not accept any worksheets once Gradescope closes (10 minutes after the lecture is scheduled to end) and the instructor leaves the room.
Discussion
Remote discussion will reinforce concepts from class and introduce concepts that are especially helpful for completing programming assignments. Discussions are also an opporunity to ask questions about the assignments as well as the course material. They will be recorded. Attendance is encouraged but optional.
Discussions will also be recorded through Zoom and made available in the Canvas Media Gallery. A link to the discussion will be provided in the calendar and in Canvas.
Stepik Exercises and Course Engagement
Along with each lecture will come some required pre-lecture work. Most often this will be reading and activities from our Stepik textbook, and will also sometimes include surveys or check-in quizzes so we can get your feedback about the course and check on your understanding.
The Stepik online texbook records your progress, and we give a schedule of expected times to finish the readings (i.e. they are due before the lecture in which they are assigned). There is no penalty for completing these late, but they are assigned so that you will be prepared to participate in problem solving session and so that you know the expected pace of the course.
The due date for Stepik exercises is the beginning of the lecture in which they are assigned. You may turn them in late without penalty by the last day of class in Week 10: June 9th, 2023 at 10pm. After this time, no late submissions will be accepted, for any reason.
To ensure you get credit for the Stepik exercises, you must fill out this form by Friday of Week 2. Starting in Week 3, we will strive to post Stepik grades to Canvas every week.
Programming Assignments (PAs)
Most weeks there will be a programming assignment. Direct practice with programming will make up the majority of your work in the course.
There are several opportunities to get feedback on your work and improve:
-
Shortly after the deadline for each assignment, the autograded portion will automatically grade your submitted code and for the manually graded portion, a staff member will grade your work and get feedback on what, if anything, you need to fix.
-
After you receive your grade you can continue to improve your assignment based on the feedback from grading. You can resubmit your work to the Late/Resubmit submission which will be open for up to three weeks (less for those assignemtns near the end of the quarter). Once the Late/Resubmit submission closes, your submission will again be graded.
There is no penalty for resubmissions, you can still earn full credit. We will take the highest score between your original submission and your late/resubmission.
The Late/Resubmit process applies if your submission is late. You should strive to complete each PA before it’s posted deadline as the PAs are practice for the exams. You will also receive earlier feedback and an extra grading attempt if you submit before the original deadline.
For those assignments near the end of the quarter, the deadline for all late/resubmissions will be Friday of Week 10 at 10pm. We will not accept any submissions after that time, for any reason.
Each student gets a free “slip day” for each programming assignment (PA) that allow an automatic 24-hour extension to submit the PA. You do not have to ask to use your slip day. Just submit your assignment after the deadline (but before 24 hours after the deadline) to automatically use your slip day. There is no penalty for using this free slip day.
It’s the student’s responsibilty to check that the autograder worked and that all files have been properly uploaded (by checking the Code tab). We only accept PAs through Gradescope before the slip-day deadline. We will not accept any files through email or Piazza.
Collaboration
This is not the same collaboration policy you have seen in your other programming courses. Read it carefully.
In your professional programming life, some of your work will be highly collaborative with lots of expert advice available from senior developers and from sites like StackOverflow. This is a common case in companies, in academia, and on open-source projects. It’s a great way to get exposed to new techniques, share knowledge, and generally enjoy teamwork. In contrast, some of your work will involve figuring out programming problems on your own, where you are the first person to encounter an issue, or the first person to try using a new library in the context of your application. You should get experience in both types of situations; we might call the former kind of problem open to collaboration and the latter closed to collaboration.
In terms of courses, this split also makes sense. Programming assignments serve (at least) two roles. First and foremost, they are a mechanism for you to learn! By directly applying the techniques and skills we discuss in class, you get practice and become a better programmer. Second, they are an assessment mechanism – as instructional staff we use them to evaluate your understanding of concepts as demonstrated by your programs. Open collaboration can reduce frustration while learning and give you chances to enjoy collaboration and lots of help, but may not let us accurately evaluate your understanding. Closed assignments are an opportunity for you to demonstrate what you know by way of programming.
There are two types of assignments in this course, open and closed:
-
Open assignments, for which you can talk to anyone else in the course, post snippets of code on Piazza, get lots of help from TAs, and generally come up with solutions collaboratively. TAs will be happy to look at your code and suggest approaches and fixes.
There are a few restrictions:
-
Any code that you didn’t write must be cited in the comments at the top of all of your submitted code files.
Example: On an open assignment, you and another student chat online about the solution, you figure out a particular helper method together. Your comment should say “//The FOO function was developed in collaboration with Firstname Lastname”
Example: On an open assignment, a student posts the recursive method calls they used to solve a problem you were struggling with. Your comment should say “//I used the code from https://piazza.com/class/id-of-post”.
Example: You and another student sit next to each other, and point out mistakes and errors to one another as you work through the assignment. As a result, your solutions are substantially similar. Your comment should say “//I collaborated with Firstname Lastname to develop my solution.”
- You cannot share an entire repository of code or paste an entire solution into Piazza. Keep snippets to reasonable, descriptive chunks of code; think a dozen lines or so to get the point across.
- You still cannot use code that you find online (no copying code from StackOverflow or blogs online), or get assistance or code from students outside of this offering of the class. All the code that is handed in should be developed by you or someone in the class.
- You are responsible for understanding all the code you have written. All of the programming problems on the PAs may show up on exams, where you will need to have a thorough understanding of the PA to answer the questions.
This doesn’t mean the staff will be handing out answers. We’ll mostly respond with leading questions and advice, and you shouldn’t expect a direct answer to questions like “am I done?” or “is my code right?”
There is no guarantee the assistance you get from your classmates is correct. It is your responsibility to use your judgment to avoid using an idea on Piazza that is wrong, or doesn’t work with your solution; we won’t necessarily tell you one way or another while the assignment is out.
If we see that you used code from other students and didn’t cite it at the top of your file, the penalty will range from a point deduction to an academic integrity violation, depending on the severity. Always cite your work!
Note: collaboration does not mean turning in the same file. Collaboration is different than partners or pair programming. You must still do your own work.
-
-
Closed assignments, where you cannot collaborate with others. The closed assignments this quarter are the programming assessments (exams). You cannot ask clarification questions but you can report potential issues as private posts on Piazza or to staff members. Staff will not look at your code or comment on it. There will no Lab/office hours during closed exams. These programming assesments are take-home exams.
On closed assignments/assessments:
- You cannot look at or use anyone else’s code in any way.
- You cannot discuss the assignment, even in general terms, with anyone.
- You should expect that staff members will politely say “The course policy says I can’t help with that” if you ask a question about your algorithm or code.
- You cannot post publicly about the assignment on Piazza or elsewhere online.
- All of the examples in the open section above would be academic integrity violations.
Programming assignments will explicitly list whether they are open or closed collaboration.
You should be familiar with the UCSD guidelines on academic integrity as well.
Do not post your PA solutions publicly on any site, including Github. If you fork the Github starter code repos and upload your code to the repo, you are required to make the repo private. It is an academic integrity violation to publicly post your code. This remains true even after the course is over. If you with to share the code wish an employer in the future, upload the code to Google Drive or Dropbox and share the link to the folder.
Exams
There will be two midterm exams during the quarter, held during the scheduled lecture time:
- Week 4 - Friday 4/28/2023
- Week 8 - Friday 5/26/2023
The final exam will be:
- Week 11 - Friday 6/16/2023, 8am - 11am, room will be announced in Week 10
Seats will be assigned for all exam sessions and announced beforehand, and you must bring your school ID to the exam. All work on exams is to be done on your own, and you are not allowed to use any electronics or study aids during the exam (aside from those needed for University-approved academic accommodations). You may not speak to any other student in the exam room while the exam is in progress (including after you hand in your own exam). You may not share any information about the exam with any student who has not yet taken it (including students in future quarters of CSE12).
The first two exams will each be worth 8% of your final grade. The final exam will be worth 24% of your final grade. The final exam will have a specific structure – it will be broken into three parts corresponding to material from the first exam, the second exam, and the remainder of the course. Your grade for each midterm will be the maximum of the midterm grade and the score you get on the corresponding part of the final exam.
For example, if you get 50% of the points for midterm 1 and 100% of the points for midterm 2, and then score a 75% on part 1 of the final, 25% on part 2, and 100% on part 3, you would get:
- MAX(0.5, 0.75) * 8 = 6 points for midterm 1 (0.75 was higher, so the final increased the midterm score!)
- MAX(1, 0.25) * 8 = 8 points for midterm 2 (0.25 was lower, so the original midterm score was used)
- 0.75 * 8 + 0.25 * 8 + 1 * 8 = 16 points for the final exam (the score on the final exam is the same regardless of how the midterms went)
- A total of 30 out of 40 exam points towards your final grade
This policy also covers what happens if you miss a midterm for any reason. If you are absent for a midterm, you get a 0 initially, and then whatever score you get on the final for that section will be applied to your midterm grade. There are no make-up midterms, and the final exam policy is governed by the university’s policies.
Making Up for Participation Using the Final Exam
You are highly encouraged to attend lectures. However, if you have personal reasons for not wanting to join the lecture, you can choose not to attend them and still receive a perfect grade in the class (however your final exam will be weighted more).
If you participate in at least 20 of lectures after the first lecture (or if you miss up to a maximum of 6 lectures), you receive 100% for your total participation grade (10% of your entire grade). If you participate in fewer than 20 of lectures (i.e., miss more than 6 lectures), your final exam score replaces that portion of your participation grade.
Three examples:
- 20 or more lectures attended: You receive 100% for your 10% participation grade and your final exam is now worth 24% of your grade.
- 0 lectures attended: Your participation portion of your final grade is 0% and your final exam is now worth 34% of your grade.
- 12 lectures attended: You receive 100% for 6% (60% of 10%) of your final grade for participation. Your final exam is worth 28% (24% + 4%) of your final grade.
Policies
Academic Integrity
Individual assignments will describe their academic integrity requirements. You should pay attention to the descriptions of what collaboration is allowed and expected on each assignment.
One challenge we face as an instructional team is verifying that students are submitting their own work given the number of remote and asynchronous options we provide. In the past, we relied on in-person, ID-checked exams to mitigate this particular challenge to academic integrity. Assignments and exams will come with specific policies for what types of collaboration is allowed, but we have one course-wide policy – we may reach out to students to schedule a check-in on their understanding of work they’ve submitted if we’re suspicious about an academic integrity violation. This would involve a video conference with a TA or instructor to check that the student has the understanding demonstrated by their work. This is in addition to any video screencasts that are submitted as a part of the exam.
We don’t expect to use this option much (certainly you are a student that acts with integrity!), but we state it clearly in the syllabus in case it becomes necessary so it isn’t a surprise to anyone.
You should be familiar with the UCSD guidelines on academic integrity as well.
Regrades
Mistakes sometimes occur in grading. Once grades are posted for an assignment, we will allow a short period for you to request a fix (announced along with grade release). If you don’t make a request in the given period, the grade you were initially given is final.
Diversity and Inclusion
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){:target=”_blank”}. 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 the 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/.