Skip to content

Latest commit

 

History

History
39 lines (29 loc) · 3.95 KB

15122.md

File metadata and controls

39 lines (29 loc) · 3.95 KB

15-122: Principles of Imperative Computation

Category Difficulty
HW 6
Exams 6

This class is designed to be taken after 15-112. This is an introductory programming course that introduces basic data structures and algorithms as well as proofs to ensure correctness of computer programs. The course starts out in C0, which is a simplified version of C with inbuilt support for proofs. The course transitions to full C near the end. In addition to the prerequisite of 15-112, this course has a co-requisite of 21-127.

What to expect

  • Homework: There are two weekly homework assignments, written and programming. Written assignments are early in the week, and these assignments tend to cover proofs and more high-level details about data structures and algorithms. Programming assignments are due later in the week. Some weeks do not have programming assignments, and some programming assignments take more than one week.
  • Exams: There are two midterm exams and one final. The first has a greater emphasis on the proofs taught near to the beginning of the course, while the second has a greater emphasis on later lecture material, e.g. more data structures.
  • Labs: The labs count towards your participation grade in the class, and generally aren't too difficult. You don't need to go to all of them to get a 100% participation score, but it is recommended to go to as many labs as early as you can, in case things come up as the semester goes on.

How to do well

  • Read the lecture notes. They are detailed and cover lecture content very completely.
  • Make sure to use good time management: the doubled weekly assignments can make it easy to miss a deadline for either the written or programming assignments.
  • Read programming assignment writeups carefully. They are detailed, and many questions you may have on the homework can be answered by the writeup itself.
  • Some units have extra review sessions on difficult topics, e.g. amortized analysis. Attend the review sessions if you find yourself struggling with the topic.

What to watch out for

  • The first exam tends to be particularly difficult for students. Most students do not have prior knowledge of writing proofs for computer science, and much of this exam is on proofs. Make sure to study and go to office hours and review sessions as necessary to understand this material.
  • Students tend to do more poorly on written assignments than the programming assignments. For the written assignments, make sure to give very complete answers and ask questions in office hours as needed.
  • Make sure to follow the style guide. You can lose points after the fact for style, although the homework writeup will usually describe these penalties.
  • The C0vm assignment is the culminating project of the course. It is generally more time-consuming, though not significantly more difficult, than other programming assignments. Make sure to practice good time management.

More tips

  • If you're having trouble understanding lectures, use OLI to cement the concepts near the beginning fo the class. The OLI has additional practice questions and goes into more depth on the concepts for the first 10 topics or so.
  • Make sure to understand what the writeups are asking for. For example, format your output as specified exactly by the write up else autolab won't be able to grade correctly!
  • Double check your proofs and written answers before handing them in. Check on diderot if stuck, there might be people with the same question as you!
  • START EARLY! this gives you time to go to OH for help.
  • Never underestimate OH! TA's are there to help you with concepts, writtens, and debugging. Don't be afraid to go.

Exams

  • Never underestimate the exams!
  • Review Sessions may not be enough! Grind old exams, practice midterms, and past writtens. They build intuition and sometimes similar questions show up! This will also help you work fast as exams can end up being a time crunch.