Tips for Success in CS 15

Welcome to CS 15! We're so happy to have you here! You have an exciting semester ahead of you, and we can't wait to support you as you take your problem-solving, programming, and debugging skills to the next level. To summarize what you’ll learn this semester, we can look to the extended course title:

Data Abstractions Every Working Programmer Must Know
Their Use, Implementation, and Performance

We'll talk about the different data structures that computer scientists use to store and manipulate data, and model real-world concepts in their programs. You'll learn to build a number of different data structures, when to use each one, and how to think about their performance in terms of both speed and memory use. These are the concepts you'll learn about this semester, but there are plenty of other skills you'll acquire along the way. You'll learn to design solutions to big problems, work collaboratively with peers and course staff, ask for help when you need it, test your code effectively, debug when things go wrong, and document the programs you write.

These are big goals, and in order to achieve them, this course will have a relatively high work load. Expect the workload to be consistent throughout the semester — each week, you'll be expected to apply what you’re learning in lecture to a hands-on programming assignment. This will help you strengthen your understanding quickly. We provide extensive support along the way, too — take advantage of the resources this course provides, and we will help you thrive this semester!

To get you started on the right foot, here are some tips for success in CS 15.

Staying Engaged

Regular homework assignments and weekly labs will give you plenty of opportunities to work with new concepts directly, but to really get all you can out of this course, we recommend that you:
  • Attend every lecture, take handwritten notes (writing notes by hand is more effective than typing), and ask questions when you get lost
  • Read the additional study materials posted on the course website — like this one! Great start!
  • Set aside some time each week to go over new concepts, and make sure you fully understand an assignment before you turn it in
  • Be active on our on-line forum. If something is confusing you, it's likely that it's confusing someone else, too. The online discussion forum is one way we cultivate a learning community in CS 15 — lean on that when you get stuck! Your peers, TAs, and professors alike all want to help you and see you succeed.
  • Collaborate with classmates. As long as you're mindful of our academic integrity policies, working with other students is a great way to improve your understanding and master difficult concepts. Make sure to keep discussions high-level (in English) — share ideas, not code!
  • Come prepared for labs. Labs are a great place to try out something new in a low-pressure environment, with lots of support from classmates and TAs. Most weeks we will post a prelab to introduce you to lab material or give you a chance to get familiar with an interface you will use. If you spend some time reading the prelab and thinking about the new material before the lab, you can use the lab as a time to clear up any confusion and ask lots of questions! Labs aren’t graded for perfection — if you show up, work hard, ask questions, and submit what you've got, you'll do quite well. The more engaged you are in lab, the more the work you do there will prepare you for the homework assignments and save time down the road!

Homework and Projects

Whether you're coming to us straight from Comp 11, took it a few semesters ago, or started your CS learning journey another way, the problems you solve and programs you build in this class will most likely be bigger and more complex than what you're used to. Here's a list of tips and tricks to help you approach these larger-scale problems.

Starting an Assignment

  • Start early and make a plan: We recommend setting aside some time the day a new assignment gets released to read the spec very carefully. Make note of important details, and create a plan so that you'll know what you need to get done before the assignment is due. It helps to work on these assignments a little bit at a time, ideally in 1–3 hour blocks — you know what works best for you! Having a clear understanding of what's required at the beginning of the week will help you plan for success. We strongly discourage students from trying to complete assignments in one sitting, or putting them off until the night before they're due. You'll do better work — and save time in the long run — if you give your brain a break between sessions.
  • Compile early and often: Don't wait until you've written half your code to start compiling — you’ll waste time debugging loads of errors that would've been much easier to catch and fix early on. Compiling early and often makes it easier to catch your mistakes.
  • Test as you go: Similarly, make sure to test your program incrementally as you develop it. As a rule of thumb, anytime you write a new function, you'll also want to write tests for that function &mdahs; right then. Consider a variety of cases: What should happen if your data structure is empty? What if it contains one element? Many elements? Repeating elements? Writing unit tests incrementally as you develop your program helps you find bugs before your program gets too complex, and it also forces you to consider edge cases and define the right behavior.
  • Comment as you go: Commenting is one of the most annoying things to deal with when coding, but it is extremely important. When writing code, it is easy to remember what a section is supposed to do or why you included it, but after a few days those details often fade. If you take a few days between working on an assignment you might find that your code suddenly doesn't make sense to you. Even worse, the TAs grading your code probably won't understand it either. By commenting as you go, these headaches can be avoided. Additionally, commenting and style will almost always be a significant portion of your grade. After finally getting your code to work, a lot of the time the last thing you want to do is spend more time explaining stuff you wrote days ago. Save yourself some of that trouble by taking a moment to explain a tricky section when you write it.

Debugging

  • Print everything: Simple print statements can be a great tool for isolating problems and understanding the behavior of your program. If you're trying to debug a crash or segmentation fault, be sure to write your debug output to cerr (the standard error message stream) instead of cout (the standard output stream)!
  • Depend on diagrams: A picture is worth a thousand words, particularly when you're trying to understand how your data structure is represented in memory and changes over the course of your program. If you aren't feeling confident about drawing memory diagrams, read the reference document on memory diagrams. If you are still unclear, come in and chat with us in office hours early in the semester — mastering this skill early on will help you do great work all term long!

Finishing an Assignment

  • Test thoroughly: Test your program on lots of different inputs, and try to cover as many edge cases as you can. Ideally, you've been testing along the way! Make sure you’re confident in your work before you submit it. If a reference implementation is provided, be sure to compare your program's output to that of the reference — little things like extra white space in your output can make a big difference, particularly for automated tests.
  • Review the requirements: Before you turn in your assignment, read through the specifications one more time, and make sure what you've done met the requirements. You should also make sure you are consistently following the style requirements! Save enough time to do a thorough job documenting and explaining your work in your README — good documentation and thorough testing go a long way!

Getting Help

This is a challenging class, and chances are, at some point in the semester, you may encounter some concepts that don't click right away. Don't panic. We expect this, and we have lots of tools in place to help you out. Following all the suggestions above will help put you in a position to succeed, but we understand that sometimes things come up, and if you're feeling overwhelmed, we want to help.

If you're struggling to get started on an assignment or feel totally lost, first, try to take some small steps forward. Print the assignment and read it thoroughly. Highlight where you have questions. Figure out what you don't quite understand, and then come see us. We offer open office hours in Halligan six days a week because the job of TAs is to support your learning. Take advantage of that resource. Ask for help after you've given things a try but are still struggling. Remember that we have this job because we want to help you succeed, so take advantage of it!

TAs are: coaches, cheerleaders, tutors, mentors, big believers in your ability to learn, and always committed to your success.
TAs are not: human debuggers, assignment solution vending machines, people to yell at when your code doesn’t compile.

We are deeply committed to ensuring you have a positive experience in CS 15 and get as much as you can out of this course. We 100% believe that each and every one of you is fully capable of mastering this material. Most of us were not perfect students in CS 15 — in fact, most of us are here because we struggled to learn some of this stuff, and we came out the other side, and we loved it enough to want to help someone else reach that milestone. Treat TAs with respect and kindness, and please remember that our job is to debug your understanding, not your program. If you do this, we can be a great resource to help your learning! Lean on us.

You can also reach the course staff, and your classmates, by posting on our on-line forum: It's is a great place to pose questions and get help from the broader CS 15 community, often faster than you could get help in office hours! Remember to mind the course policies, and if you need to post code on-line, make sure your post is private to only the instructors. As always, be respectful of your peers and course staff, and we'll be happy to help.

If you find that you're consistently having difficulty in the course and aren't getting enough support from office hours, the academic resource center (ARC) offers one-on-one tutoring. Visit their website for information on how to book a session! If you’re feeling overwhelmed or struggling with anything outside the realm of ordinary academic difficulties, reach out to your dean as soon as possible, and they will work with you and the professors to come up with a plan to support you and help you succeed.

We hope that these suggestions, along with the many resources and support systems at your disposal, will help you to enjoy this challenging and exciting course. We're so happy to have you here in CS 15, and we can’t wait for a great semester!