TA 1:1 - Week 4

Written by Peter Benitez and James Varah, and Nick Troccoli

The week after assign1 is due (week 4), you'll meet 1:1 in-person for 15 minutes with the TA who graded your assign1 submission. During this meeting you'll have a chance to explain your assignment implementation, your process for completing it, and a chance to apply what you learned on the assignment in other contexts. This is your chance to show off your understanding of your own implementation and communicate about your process! This is also meant to provide practice for communicating about your work as you would do in other industry and project settings.

The motivation behind the 1:1s is to (1) help benefit assignment learnings as much as possible and put emphasis on both the process of completing the assignments as well as the completed work, (2) help build skills to communicate your work, and (3) provide a chance for more frequent check-ins and discussions about your work in the course.

Logistics

The first 1:1 will take place M-F during week 4. Each TA will have slots available on various days during the week - specifics of how to sign up will be shared closer to week 4. Please bring a laptop (so that you and the TA can reference your code during the 1:1) - you can bring one if you have one, or you can also check out a laptop from the Lathrop Tech Desk (click here for more information), or email the Head TA if you aren't able to get one for your 1:1. The 1:1 is entirely oral; you won't be asked to write any code or write answers to questions.

Structure

The 1:1 has two parts:

  1. Work understanding: Your TA will ask questions guided toward your understanding of your implementation and your problem-solving process. For example:
    • Why you chose particular test cases, and at what point in your development you added them
    • Bugs or errors you ran into and how you resolved them
    • Asking you to explain a portion of your code and how it works
  2. Applying what you learned: these questions are related to the bigger picture aspects of the assignment, such as layering, abstraction, and possible filesystem modifications vs. what you implemented on assign1. We won't ask wholesale about other filesystem designs (for instance Windows FAT), but, for example, we do want you to be able to think critically about what possible changes might mean, and how you think through benefits, drawbacks, and changes required to implement it. You may be asked to, for example:
    • Talk through how you would design or implement a new feature on top of your existing code or in a similar system. (for example, how would you implement a check in your Unix v6 implementation where, given a path to a file, you could determine whether its payload data is stored contigouously? Or, provided the design of another non-filesystem piece of software, explain how you could use the layering approach on assign1 to improve the design.)
    • Evaluate tradeoffs between different designs (for example, what would the benefits and drawbacks be of enlarging the inode size in Unix v6?)

Preparing

The best way to prepare is to squeeze the most out of your work on assign1; here are some specific tips:

  • Understand every line of code you write and why: don't make a change unless you understand why it must be made, and why it works.
  • Orient yourself with the needed provided code: make sure you know how the codebase is structured; you don't need to memorize every file and what it does, but you should be particularly familiar with all the layers you implemented and how they connect, as well as provided code that you rely on (for instance, readSector).
  • Make the most of testing and debugging: as you're working, reflect on how you are approaching testing and debugging on this assignment. In particular, every bug is an opportunity to resolve a misconception or unintended issue; reflect on what you learned each time you resolve a bug, and why the fix you implemented solves the problem without introducing any new issues.
  • Reflect on big picture takeaways: you're implementing a full filesystem - rock on! Take the time as you work to reflect on your accomplishment, and the big picture takeaways of layering (and how that benefits you on the assignment) and abstracting away complexity, seeing name resolution (mapping from filename to inode number) play out directly in your code, and how the design you implemented is just one possible design. As you go, ask yourself about possible modifications; "what if we instead did X? or Y? What are the pros/cons? What would that look like in the context of Unix v6 and assign1's implementation?

Grading

Each TA 1:1 is worth 2.5% of your overall grade. Details about specific grading criteria coming soon!