Written by Julie Zelenski, with modifications by Nick Troccoli
Awesome work in CS107 so far! Now that we've completed the midterm exam, we've compiled some information and advice about looking ahead towards the rest of the quarter, including how to interpret your progress so far, and what you can do to finish the quarter off strong.
I'm spending a lot of time on this course, but feel like I'm not getting the results I want. What can I do?
That definitely sounds frustrating. You might feel the only path to better results means investing even more time, but we want to encourage you to make a reasonable time commitment and instead get a better results for it. Our advice is to break down what you're doing, reflect on which activities are benefitting you the most and which are not, and take steps to do more of the former and less of the latter. Here are some options to consider:
- Reading. The textbook acts as a companion to the course material. Some appreciate the thoroughness of the textbook, others find it dense and hard to understand. If a textbook chapter (or the entire book) doesn't work for you, seek out other resources, such as CS107 guides on the resources page, or lecture materials. There will never be an important concept taken solely from the reading.
- Lab. Lab is valuable time to build conceptual understanding and get hands-on practice with the support of your peers and the TA. If aren't feeling the value of lab thus far, consider a new approach: switch to a better time for your work schedule or work style, explore a more productive pairing, or try to approach the exercises differently. For example, consider skimming the exercises beforehand and deciding which are the topics on which you most need to focus, and use those priorities to apportion the lab period for maximum benefit to you. A few students even occasionally drop into a second lab during the week when they left their first lab with unfinished exercises or lingering issues to resolve - you are welcome to do this if you'd like!
Assignments. The assignments are the largest time investment in the course. What are some approaches to working efficiently?
- Focus on design and code quality at every step, not just at the end. Leveraging library functions, unifying common code, and avoiding unnecessary special cases means less code for you to write, test and debug. Using descriptive names, logical control flow, and decomposing into manageable chunks makes your code easier to analyze, test and get correct as you go. Make these investments right from the start and you can reap the benefits throughout the entire process.
- Reflect on maximizing work session productivity. At the end of a work session that was particularly productive or unproductive, take a look backwards and try to figure out what made it so. What did you know by the end of the session that you wished you had known at the start? Do you make use of all the resources you have available to you? It can be so frustrating having spent multiple hours tracking down an issue by yourself only to see the question already answered on Piazza/website/textbook; know how to search and use these resources. Take advance of course resources for help -- on forum, in email, office hours, we're here to help!
- Develop incrementally. Some students are drawn to writing 100% of the code up front and expecting to test/debug/polish it all together later. However, this approach results in difficult challenges debugging, getting things working, and knowing what part of your code is working and what is not. It also reduces your flexibility to make design changes later if you encounter design flaws. If instead you attempt one task at a time, your testing/debugging is isolated only to the latest code, which is a much more tractable job. It also gives you much better fallback options if things take longer than expected because you can stop at any point with a reasonable outcome. A program that is 80% complete but what's there is 100% correct is a satisfying result that can earn a lot of points. A 100% complete program that is only 80% correct is typically much farther from finished and earns much less in grading.
- Use the point breakdown in the assignment writeup to make informed decisions about where to focus. Everyone should first aim toward baseline functionality to pass sanity check, but beyond that, you have choices. Keep in mind that the reward offered may not always be commensurate with the time required to achieve it. Some boring tasks earn easy points for paying attention to assignment details and correctly handling them (robustness cases); other tasks are rewarded with fewer points.
Exams. Check out our exam advice page for recommendations about achieving success on exams.
If I'm not satisfied with my performance in CS107, can I still succeed in CS?
Yes! Whether you are interested in studying more about computer systems, or studying in other areas, CS is a much, much larger discipline than any one class, including CS107.
I don't find CS107 as interesting to me. Are there other topics or areas I can learn more about?
Absolutely! CS107 covers systems, which is an area including topics such as lower-level languages, infrastructure, and underlying technologies like compilers, networks, security, operating systems, and more. But this is just one area to explore; if you're interested in higher-level languages, higher-level technologies, data science, machine learning, or other topics, we highly recommend exploring what interests you most. We hope that, regardless of your interest, CS107 will provide a foundation for you to better understand how underlying technologies work, and for you to more efficiently implement and debug programs.
How can I interpret my grades so far to know how I'm doing overall?
The way the coursework (assignments and labs) grade is calculated is by summing assignments and lab participation, and dividing by the total number of points possible. While not guaranteed to match the current quarter, the median performance on coursework in past quarters has been low 90s % (A-) from functionality scores averaging about 90% of possible, a few on-time bonus points, mostly [ok] code review, and 100% lab participation. While a half-credit outcome (or even a total zero) on one assignment can affect your grade, it is not necessarily a catastrophic situation. You can earn credit as well with the on-time bonus points.
In terms of course website information, Gradebook is the best way to get an overview of how you’re doing in the course so far. You can combine this with the following to get a better picture:
- the overall course grade breakdown in the general information handout
- the assignment statistics posted in the announcements section
- the relative point totals for each assignment, listed on each assignment page
- the statistics for the midterm, posted on the midterm info page
Should I change my grading basis from letter grade to CR/NC?
Some students choose CR/NC in order to pursue what they want from the course without the pressure to do things simply for grades; other students go this route to substitute a letter grade on their transcript with CR/NC. In either case, it relaxes the intensity and gives some latitude in picking and choosing what is worth your investment. The CR is a testament of passing performance but with vagueness about the exact letter grade. You earn units, but the CR does not figure into your GPA. Any course grade C- or better earns CR. The university deadline for changing grading basis is around the end of the 8th week (See registrar's academic calendar for this quarter's deadline).