Thrival Guide

Why a survival thrival guide?

We want you to not only survive CS135, but to thrive in CS135. The dictionary says “thriving is a condition beyond mere survival, implying growth and positive development.”

CS135 is designed to be well within the reach of all university students. Be confident that you can master the content and succeed! However, the nature of computer science can make any introductory course a challenge to those who do not develop the right work habits. This survival thrival guide is a collection of guidelines, tips, suggestions, and background information to help you make the best of your opportunities. It is based on the experience of first-year students facing their first university course in computer science.

Course philosophy

We designed CS135 for students in diverse programs, keeping in mind the large range of possible ways in which computer science might be integrated into future studies. By choosing to focus on fundamental concepts and study them in depth, we are giving students transferable skills on which to build (rather than providing a shallow overview of the breadth of the field of computer science).

The material in CS135 lends itself very nicely to being built up in successive layers, where a new layer is added only when the previous one is completely explained and understood. One of our goals is to progress through the material in small steps rather than huge leaps.

Doing the assignments is the key to doing well in the course. The process of arriving at the answer is more important than the answer itself.

Each component of the course has a role to play: lectures, tutorials and assignments teach you the material and give you a chance to practice; assignments and the midterm provide diagnostics, giving you feedback on whether or not you are on the right track; and assignments, the midterm, the final exam and class participation are all used for assessment (computing your mark in the course).

Lectures illustrate concepts and techniques; assignments give you practice in those concepts and techniques, strengthening your existing skills and teaching you new ones. Most of the learning in CS135 takes place through your working through problems on your own. In many cases the final answer isn’t particularly relevant; it’s going through the process of arriving at the final answer that’s important. Doing the assignments is the key to doing well in the course. Skipping assignments would be like trying to learn to play a musical instrument without practicing, attempting to master a language without speaking it, or claiming to be an outstanding artist or athlete based solely on theoretical understanding of the underlying principles of the field.

In previous offerings of first-year courses, we have discovered that the number of assignment questions submitted was a better predictor of final grades than were high school marks. As such, these components account for a significant portion of the final grade. Do not be tempted to skip any of the assignments!

You must earn an overall passing grade in the assignments in order to pass the course.

You will not only miss essential practice, but you may also miss an important insight into a concept that is important in a subsequent assignment or that will be tested by a final exam question. You must earn an overall passing grade in the assignments in order to pass the course.

Learning to Learn

Dan Wolczuk, a popular Math Prof at UW, presented a “Learning How to Learn Seminar” recently. It was recorded as a series of six videos that you may find valuable:

Obtaining Higher Learning Enhance your performance and become a better learner by attending the Learning how to Learn Seminar Series. Learn how to engage with course material at a university level and improve your thinking and learning skills.
Thinking About Your ThinkingThe ability to think about one's own thinking, called metacognition, is considered to be one of the most important skill sets. In this seminar you will be introduced to metacognition and learn how to apply it to your studies and beyond.
Embracing Failure A fear of failure can be extremely paralyzing. It can lead to stress, anxiety, and procrastination. In this seminar, we will discuss how to view failure, and, in particular, how to develop a growth mindset.
Learning in Lectures Do you find that lectures are mostly a scramble between trying to listen to the professor and take notes? In this session, I will show you how to improve your efficiency and comprehension during lectures.
The Neuroscience of MemoryUsing fMRI scans, neuroscientists have discovered a great deal about the brain. In this seminar, we will see how to use these discoveries to make learning more efficient and long lasting.
Effective StudyThere is much to accomplish in your school life and your time is a precious and limited resource. In this seminar you will learn to recognize the signs of ineffective study habits and how to redirect your efforts to study smarter, not longer.


The course content is divided into a series of Study Modules . In general, each builds upon the previous one. It is important to master each one before moving on.

These study modules are discussed in lectures. Some lectures might cover a complete module and go on to the next; other modules may take several lectures to cover.

Class participation marks assume you’re in class and attending the section you’re registered in.

The instructors work from the same set of lecture notes, though each will say different things, and possibly write different examples on the board or data projector. If you have to miss your lecture, it is better to attend another lecture than not attend any that day. However you should be aware that as the sections may drift a little out of sync, you may still end up missing some material. In addition, you should be sure that you are not taking a seat from someone who is legitimately enrolled in that section.

Another option, particularly for those who are able to study effectively on their own, is to read the commentary and watch the videos prepared for use during the COVID pandemic.

Deadlines are firm.

For possibly the first time in your life, no one is forcing you to go to lectures. You are free to not attend. This honour system is built on the assumption that this freedom will be exercised responsibly. Other aspects of this assumption include the assumption that students will complete the required work on time, as deadlines are firm and no “bonus assignments” are handed out to bolster marks.

You may be tempted to skip lecture because the text of all lecture slides is available on the web; surely you can do just as well reading them? If we thought that, we wouldn’t be lecturing. The slides are like basic musical chords over which we improvise a melody; the chords alone do not make up the whole song. Not everything is written down on the slides. It’s not that we’ve deliberately left things out; it’s just that we don’t design the slides to be the sole source of learning, but rather as an aid in lecturing.

The handouts contain the text of the slides so that you don’t need to scribble madly while we display them. That frees up your time so that you can take proper notes on what we say in class. We’ve seen students write down only what we write on the board, or not write anything down at all, figuring that the slides do all their work for them. That’s a mistake; you can’t possibly remember all of what is said in all of the lectures you will attend during a term. Taking notes helps fix information in your long-term memory, keeps you active, and allows you to preserve insights that you gain during the course of a lecture.

You can’t remember all the important stuff in a lecture; take notes.

Going to lectures reserves three hours of dedicated time each week during which you are thinking about course material, with the aid of someone who understands it thoroughly. It’s rare for a student to be disciplined enough to skip lectures and adequately substitute for that experience. Of course, not every minute of lectures is “quality time”, but you won’t know what you’re missing if you don’t attend. Take something discreet to do (like your math homework or a good novel) during the stretches where there’s an extra example of something you already understand, and make sure you keep one eye and ear on what’s going on. You’re sharing space, so don’t do anything that might annoy or distract your classmates: don’t let your cell phone ring, don’t rustle food wrappers loudly, and don’t play video games on your laptop.

The textbook

CS135 wouldn’t exist if it weren’t for the textbook, “How to Design Programs”. It was an important resource in designing and implementing CS135. That said, over time we have developed our own approach to the material, reordered some of it, provided different emphases, etc. The textbook authors have since released a second edition of the text that increases the drift between CS135 and the text dramatically.

You may want to refer to the free, on-line 1st edition as another source, but we don’t assume that you will.


It is on assignments that poor work habits may be most obvious, since programming, approached incorrectly, can quickly become a timesink. It’s possible to spend far too much time on CS assignments, because it’s easy to believe that you’re really close to a solution and the next change you make to your program will have it running perfectly. Hours go by before you realize it. Don’t waste your time grinding away at a question; if you feel you’re not making progress, go on to another question, or even switch to working on another course, and come back later.

We’ve had students say, “I can’t find an example in the textbook that looks like this assignment question”. We try not to ask assignment questions that look like examples, because we want you to be able to write programs from scratch, not just modify examples that you don’t fully understand.

Use the design recipe.

Some students try to do CS assignments by looking at the assignment for the first time while sitting in front of their computer. They read the first question and immediately start to write a program. We’d like to suggest a more productive approach. Read the assignment away from your computer, and think about how you might solve the questions. The lectures and the textbook teach something called the “design recipe”. This is a process to go through in writing a Racket function or set of functions to solve a problem. The authors of the textbook came up with the design recipe by observing students in the lab and noticing when and how they ran into difficulties, and what worked to help overcome their difficulties. We encourage you to use the design recipe by assigning marks to its various components (since they help us to see that you understand what you are doing). You can, of course, get your program running and then put in all the components worth marks afterwards. But following the process properly will save you time and reduce frustration. In CS 135, the programs you have to write are usually quite small; most of your time should be spent on thought.

Use the Basic Tests.

The design recipe may include templates, which are function skeletons derived from data definitions. Some students in previous offerings of CS135 have reported that the assignments took half as much time when they used the templates as we suggest.

We also provide “Basic Tests”. Basic Tests do some minimal testing that helps catch problems like function names that are spelled incorrectly or take the wrong number of parameters. They can help you save many marks from forehead-slapping mistakes. Read more about them in Assignments > Basic Tests .

You will probably use you own computer with free software for this course. Please review details on how to electronically submit your work , and some details of the program style that we expect.

We have scheduled assignments (roughly one per week) so that the work is spread out evenly across the term. We recommend that you start each assignment shortly after finishing the previous assignment, putting in a solid but not excessive amount of time. This allows you to have time to set it aside and come back to it later. Starting early allows you to discover difficulties and get help, and you will find that when you return to questions fresh, you will see ways to solve problems that you couldn’t see before. Although this advice holds for any course, it is particularly important for computer science.

The UW Library has a Math Assignment Planner that is also applicable to Computer Science assignments. You may find it helpful.

How to Start an Assignment Early

  • As soon as the assignment is released, read it over. Take some time to consider what is actually being asked.
  • You may not understand how to approach every question the first time you read over the assignment. That is normal! Identify the concepts you do not understand, and watch out for those concepts in the course materials.
  • As you work through the course content, work through each of the examples and be sure that you understand them.
  • At least several days before the assignment is due, start working on your implementation:
    • Begin with your design recipe by writing your purpose and contracts for your functions and then write your examples and tests.
    • Sketch out the code and helper functions outside of Dr. Racket, perhaps even with a pen and paper. This will help you understand your approach to solving the problem without getting tripped up by the syntax.
  • Implement your helper functions in Dr. Racket. You can write test cases for these and, in fact, should test each of them to be sure that they work before moving on.
  • Use your helper functions to build the main function and then test it.
  • If your solution does not work follow these troubleshooting steps:
    • Write a test case to illustrate the problem.
    • Use define/trace to help you understand what your functions are consuming and producing.
    • Use the Dr. Racket stepper to help you trace through your test case.
  • If you are still struggling, take a step back and consider:
    • Are you are trying to implement too much code at once? If so, break the problem down and get a little working at a time. Use simpler and smaller test cases to identify what is working.
    • Is your approach to the problem incorrect? If so, go back to working out your strategy outside of Dr. Racket.
    • Do you need a break? Sometimes, it is helpful to work on another question or even to get some rest. Sleeping on a mystery is a great way to subconsciously find solutions. Of course, sleeping when you are stuck works less well when you start your assignments at the last minute.

If you follow the above approach you will probably have very little debugging to get a correct solution, and the design recipe will naturally guide you toward writing better code.

You should try to complete the whole assignment, but if it turns out that you don’t have time to do it all, submit what you have, even if it is incomplete. You will still get written feedback from the markers, and you may get some marks as well. When you skip an assignment, you are likely to find the next one more difficult. Do your best to avoid skipping assignments, and make sure you have a sense of how to do each question, even if you don’t submit each one. Finally, when you get back your assignments, don’t just glance at the mark and toss it aside. Learn from your mistakes.

Look over your marked assignments; learn from your mistakes.

Model solutions will be posted on the course web site shortly after each assignment is due. In some cases several alternate solutions will be presented. Study these to make sure you understand the material; this will pay off on later assignments and on exams. This is true even for students who receive perfect marks, as even a solution that has no obvious flaw might be able to be improved in elegance or other attributes. If nothing else, knowing how to find a shorter solution will be of great benefit on exams.

Midterm exam

The midterm exam has a diagnostic purpose: it gives you feedback on what you thought you understood (but didn’t) and what you thought you didn’t understand (but did). Having a chance to take an exam before the final also gives you an indication of what that experience might be like. As with assignments, if we don’t make them worth some percentage of the final grade, students tend not to take them seriously, and so their value is lost. So the midterm accounts for a modest fraction of the final grade.

Midterm questions will resemble assignment questions, except that we can’t ask you questions that will take too much time, either to discover the answer or to write it down. You also won’t have a computer to use during the midterm (or on the final exam), meaning we can’t ask you questions for which you need to go through a process of discovery and refinement (as we can on assignments). We won’t ask you to write down memorized definitions. Obviously, you need to know the syntax of Racket and the meanings of terms and phrases that we use. But we will test that understanding by asking questions where you need to use this material, not just repeat it from memory.

The course does change from term to term.

The best way to do well on the midterm is to learn the material as it’s presented in class and exercised in tutorials and on assignments. It helps to plan for exam study as part of your weekly schedule. Start preparing review sheets as you learn material rather than waiting until right before an exam. During the midterm exam period, there is a temptation to neglect all courses except the one with the next exam; if you do this, you may find yourself behind and unable to catch up. Your studying should be active. Find questions in the textbook not already assigned and write out complete answers. Course personnel will be happy to answer any questions you encounter along the way.

Be careful about using midterms from past years as study guides. Each term, we create the midterm from scratch, and the course does change from term to term. Past midterms may give you a misleading sense of what this term’s tests will be like. As with assignments, we won’t ask you to do things that are just minor tweaks on lecture examples; we try to design questions that test deeper understanding. We also recommend not cramming at the last minute. This type of study results in shallow, easily forgotten understanding of a sort inappropriate to CS135. Cramming works best when you have to repeat definitions and do things nearly identical to what you’ve already done, and we’re not going to ask you exam questions like that.

1A midterm marks are a shock to some students, because they’re the first confirmation that grades tend to be lower in university than in high school. We don’t plan it that way, but we’re probably asking more of you than your high school did, so it makes sense. We don’t have a predetermined average or failure rate in mind, and we will not adjust the marks with a “bell curve” or any other method, unless we feel that a test was somehow flawed. We try to design tests that are good indicators of the necessary breadth and depth of knowledge. Typical midterm averages in first-year CS courses are between 65% and 75%.

Don’t let a low mark throw you. Examine your study and work habits, with the advice of an instructor or tutor, and see what you can do to improve the results of the next test. As a significant fraction of your mark is based on the final, you have adequate opportunity to improve your performance.

Don’t let a high mark lead you to become complacent and slack off. CS135 gets harder as the term progresses (most courses do, since later material can build on earlier material). But the course is designed so that students can do well if they approach it correctly.

Final exam

Start studying early, study actively, and don't cram.

Most of the comments we made above about midterms also apply to the final exam, but there are some key differences. The final exam isn’t diagnostic, but straight assessment. For that reason, it makes up the most significant component of your final mark, which will be viewed by observers as an indication of how well you have mastered course material. Also, you don’t get the final exam back, so there is no chance to learn from your mistakes.

In order to pass the course, you must pass the weighted exam mark.

You should approach the final in the same fashion that we recommended you approach the midterm: start studying early, study actively, and don’t cram.

In order to pass the course, you must pass the weighted exam mark (the sum of each exam percentage multiplied by its weight, all divided through by the total exam weight)

Final grades

You’d think that there wouldn’t be much to do once the final exam is over: enter the grades into the spreadsheet, and submit the final marks. But we have to make sure that the marks reflect what we know of the students with whom we’ve been in contact. We go over the spreadsheet looking for anomalies (for example, students who have good marks up until the final exam). We also go over the exams of all students with computed final marks between 46 (sometimes lower) and 49, looking for evidence that they deserve to pass. The students who end up failing (and we hope that this number is as small as possible) are those for whom we cannot find any evidence that they should continue with a successor course. In previous years, these were students who did poorly on the midterm exams and didn’t take steps to improve their habits, or those who did okay on the first midterm, worse on the second, and submitted few or no assignment questions in the second half of the course.

Since entry to CS136 requires a mark of 60 or better, we will review the situation for students with computed final marks between 56 (sometimes lower) and 59 as well.

Getting help and avoiding trouble

Sources of assistance

We encourage you to ask course personnel for help. The tutors have regular office hours, as do each of the instructors; the tutors answer e-mail sent to the course account, and the instructors will answer personal e-mail. Generally, office hours are not used enough, except perhaps right before an assignment is due.

Note that course personnel tend to be available during the day; if you like to work late at night, that’s okay, but be warned that help is generally not available at that time.

The most effective help sessions are ones where the student was ready with specific questions after having worked through the provided examples and after making some attempts at working out a solution on your own before coming for help.

Note that a great deal of assistance can be found in FAQs and on our forums! Always check there first.

Getting help from fellow students can be problematic. While we encourage you to talk about ideas learned in the course content or from the textbook, you should avoid asking others about specific questions on assignments. You might find yourself accused of plagiarism, which we discuss in the next section.


Plagiarism is the act of representing someone else’s work as your own. Some students do this deliberately, believing that getting a good mark on an assignment by copying from a friend or from one of the many homework sites is more important than doing the work themselves to learn the material. This will hurt them on the midterms and final exam. But it also hurts other students, because the plagiarist has earned marks they do not deserve, and that will be taken as evidence of their having demonstrated skills that they do not really possess. When they turn out to be incompetent, in later classes or in the workplace, it reflects badly on their classmates; even those who earned their marks fairly will come under suspicion.

For this reason, UW takes a firm stand against plagiarism. The standard penalty for plagiarism on assignments in all CS courses is a zero on the assignment, a deduction of at least 5% in the final mark, and a letter to the Associate Dean for Undergraduate Affairs to be placed in your file; penalties are more severe for cheating on exams, as well as for repeat offences in this or other courses. We have access to software that analyzes assignment submissions for similarities and isn’t fooled by simple tricks like renaming identifiers. We will also be monitoring homework sites for solutions to our assignment and exam questions.

Do not take notes during discussions with other students.

Some students inadvertently stray into plagiarism by not being careful when they talk with others. Confine such discussions to high-level overviews of general concepts, not details of how to solve specific questions. Do not take notes during such discussions, and when you write or type up the ideas, use your own words and phrases. A good way to make sure that your write-up is different from others’ is to leave some time between the discussion and the write-up (planning for this has the nice side benefit of getting you to start on your work earlier). Don’t look at someone else’s programs written for an assignment, or show your programs to someone else. Don’t search on the Web or in books other than the textbook for answers to assignment questions, or even for hints.

Assume that ChatGPT and similar tools are like another student. Feel free to "chat" about the big ideas, but don't ask it for the answer to an assignment and don't show it your code.

The penalty is applied equally to those who use answers supplied by others and to those who supply the answers. “Helping” a friend by showing them your assignment is not only unfair to others and a violation of academic rules, but it will also result in you being penalized along with your friend. Don’t do it.


Thriving in CS135 isn’t like running an obstacle course; it’s more a matter of applying common sense. Look for the reasons behind everything you’re asked to do in the course—if you can’t figure them out, ask an instructor or tutor, who should be able to answer your questions—and keep those reasons foremost in your mind as you do your work. It’s important to us that you not only get through the course, but that you enjoy yourself and see the material as interesting and valuable.