<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><generator uri="https://jekyllrb.com/" version="4.3.2">Jekyll</generator><link href="https://pedagogy.cs161.org/feed.xml" rel="self" type="application/atom+xml" /><link href="https://pedagogy.cs161.org/" rel="alternate" type="text/html" hreflang="en-US" /><updated>2023-01-28T12:34:29-08:00</updated><id>https://pedagogy.cs161.org/feed.xml</id><title type="html">CS Pedagogy</title><subtitle>A blog featuring pedagogical articles written by EECS uGSI&apos;s, GSI&apos;s, and Professors at UC Berkeley. Hosted by the CS 161 course staff, featuring guest posts from other computer science courses on campus.</subtitle><author><name>Pedagogy</name><email>cs161-staff@berkeley.edu</email></author><entry><title type="html">Onboarding Concurrent Enrollment Students</title><link href="https://pedagogy.cs161.org/2022/09/02/onboarding-concurrent-enrollment-students/" rel="alternate" type="text/html" title="Onboarding Concurrent Enrollment Students" /><published>2022-09-02T00:00:00-07:00</published><updated>2022-09-02T00:00:00-07:00</updated><id>https://pedagogy.cs161.org/2022/09/02/onboarding-concurrent-enrollment-students</id><content type="html" xml:base="https://pedagogy.cs161.org/2022/09/02/onboarding-concurrent-enrollment-students/"><![CDATA[<p>So, it turns out that writing a masters’ thesis takes time away from writing blog posts. Who knew.</p>

<h2 id="what-are-concurrent-enrollment-students">What are concurrent enrollment students?</h2>

<p>Concurrent enrollment students (abbreviated CE students for the rest of the post) sign up for classes through <a href="https://extension.berkeley.edu/">UC Berkeley Extension</a>. Sometimes these are students studying at other universities, or Berkeley alumni who want to come back and take another class.</p>

<p>One particularly common source of CE students is <a href="https://globe.berkeley.edu/">the GLOBE program at Berkeley</a>. I honestly don’t know much about this program, except that it sends us a handful of CE students every semester, and that its students come from a group of pre-approved partner universities.</p>

<p><a href="https://summer.berkeley.edu/">Berkeley’s Summer Sessions program</a> also allows non-Berkeley students to enroll in Berkeley classes over summer. I’m not sure if these students follow the exact same process as CE students, but the end result for course staff is pretty similar.</p>

<h2 id="does-ce-require-extra-staff-hours">Does CE require extra staff hours?</h2>

<p>In my experience, in a large, scalable CS class, CE students don’t require too many staff-hours compared to a Berkeley student. (There are still a few logistical hiccups that arise, though, which is what this post is for.) As long as we’re clear about the prerequisites and requirements of the class upfront, students seem to do a pretty good job self-selecting into classes that they’re qualified to take. CE students also seem to pick up on Berkeley’s course platforms (e.g. Gradescope, Piazza/Ed, office hours queue) pretty naturally; in many semesters of taking on CE students, I’ve never really had to put in extra time explaining how a Berkeley CS class runs. Of course, I can’t say that this will be true for all classes, or that there won’t be exceptions to this.</p>

<h2 id="whats-in-it-for-berkeley">What’s in it for Berkeley?</h2>

<p>Setting aside the fact that CE programs give non-Berkeley students a chance to experience Berkeley CS, enrolling CE students has benefits for our classes and students too. CE students pay for classes by the unit, which means that CE programs usually generate revenue for the department (and therefore the university). This revenue can be used to alleviate some of Berkeley’s CS funding problems; the extra money from CE students is sometimes used to expand Berkeley CS class capacities to hire more staff and enroll more Berkeley students from the waitlist.</p>

<h2 id="enrolling-ce-students">Enrolling CE students</h2>

<p>CE students sometimes need to wait until the first or second week of classes before they receive approval from the department and the university to enroll in classes. This can create additional overhead for staff, who need to manage extensions to help CE students get caught up in the class, and for students, who need to catch up in the class. Also, I have no proof for this, but I suspect that some CE students will apply for a class and never hear back about how to enroll or start working on the class, which causes them to give up and withdraw their application.</p>

<p>CE applications are only visible by the instructor, so this fall is the first time I’ve actually been able to view them. <a href="https://sis.berkeley.edu/sites/default/files/how_to_approve_or_deny_a_concurrent_enrollment_application_instructors_ja.pdf">Here’s a guide for how to find their applications and approve them.</a> If you’re not the instructor for the class, you’ll probably want to bug the instructor early (before the semester) about this. In Fall 2022, the first wave of applications showed up for me on August 10, though the department didn’t start approving applications until August 23 (the first week of classes).</p>

<p>The CE application portal UI is…not the best. In particular, there’s no way to download a CSV or any reasonable list of students that we can use to build a roster. Here’s a Python script that takes the raw text of the CE application portal and builds a CSV roster. To provide an input to the script, open the page listing all the applications, Ctrl+A and Ctrl+C to copy the raw text, and paste the text into a text file to pass into the script. (Credit to Nicholas Ngai for the script!)</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">#!/usr/bin/env python3
</span>
<span class="kn">import</span> <span class="nn">csv</span>
<span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">date</span>
<span class="kn">import</span> <span class="nn">re</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">Any</span>

<span class="n">student_re</span> <span class="o">=</span> <span class="n">re</span><span class="p">.</span><span class="nb">compile</span><span class="p">(</span><span class="sa">r</span><span class="s">'(\d+)\s+Concurrent Enrollment Request\nName([^,]+),([^\n]+)\nSID(\d+)\nEmail:([^\n]+)\nBerkeley Status:([^\n]*)\nSubmission Date:(\d{4})-(\d{2})-(\d{2})'</span><span class="p">)</span>

<span class="c1"># Get content.
</span><span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s">'your-raw-text-dump-filename-here.txt'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
    <span class="n">text</span> <span class="o">=</span> <span class="n">f</span><span class="p">.</span><span class="n">read</span><span class="p">()</span>

<span class="c1"># Get all matches.
</span><span class="n">matches</span> <span class="o">=</span> <span class="n">student_re</span><span class="p">.</span><span class="n">findall</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
<span class="n">rows</span><span class="p">:</span> <span class="nb">list</span><span class="p">[</span><span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">m</span> <span class="ow">in</span> <span class="n">matches</span><span class="p">:</span>
    <span class="n">rows</span><span class="p">.</span><span class="n">append</span><span class="p">({</span>
        <span class="s">'request_id'</span><span class="p">:</span> <span class="nb">int</span><span class="p">(</span><span class="n">m</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span>
        <span class="s">'last_name'</span><span class="p">:</span> <span class="n">m</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span>
        <span class="s">'first_name'</span><span class="p">:</span> <span class="n">m</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span>
        <span class="s">'sid'</span><span class="p">:</span> <span class="nb">int</span><span class="p">(</span><span class="n">m</span><span class="p">[</span><span class="mi">3</span><span class="p">]),</span>
        <span class="s">'email'</span><span class="p">:</span> <span class="n">m</span><span class="p">[</span><span class="mi">4</span><span class="p">],</span>
        <span class="s">'berkeley_status'</span><span class="p">:</span> <span class="n">m</span><span class="p">[</span><span class="mi">5</span><span class="p">],</span>
        <span class="s">'submission_date'</span><span class="p">:</span> <span class="n">date</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">m</span><span class="p">[</span><span class="mi">6</span><span class="p">]),</span> <span class="nb">int</span><span class="p">(</span><span class="n">m</span><span class="p">[</span><span class="mi">7</span><span class="p">]),</span> <span class="nb">int</span><span class="p">(</span><span class="n">m</span><span class="p">[</span><span class="mi">8</span><span class="p">])),</span>
    <span class="p">})</span>

<span class="c1"># Write CSV.
</span><span class="n">writer</span> <span class="o">=</span> <span class="n">csv</span><span class="p">.</span><span class="n">DictWriter</span><span class="p">(</span><span class="n">sys</span><span class="p">.</span><span class="n">stdout</span><span class="p">,</span> <span class="p">[</span><span class="s">'request_id'</span><span class="p">,</span> <span class="s">'last_name'</span><span class="p">,</span> <span class="s">'first_name'</span><span class="p">,</span> <span class="s">'sid'</span><span class="p">,</span> <span class="s">'email'</span><span class="p">,</span> <span class="s">'berkeley_status'</span><span class="p">,</span> <span class="s">'submission_date'</span><span class="p">])</span>
<span class="n">writer</span><span class="p">.</span><span class="n">writeheader</span><span class="p">()</span>
<span class="n">writer</span><span class="p">.</span><span class="n">writerows</span><span class="p">(</span><span class="n">rows</span><span class="p">)</span>
</code></pre></div></div>

<p>Once you’ve built a roster, you can add these students to all your course platforms (e.g. bCourses, Ed/Piazza, Gradescope) and maybe let them know that they can follow along with the class while waiting to be enrolled. This fall, I made announcements in the first two lectures about the status of CE students so that they knew about their application status.</p>

<p>A lot of CE students try to email the instructor directly, which is understandable. Sometimes this can lead to emails getting dropped, though, so getting a roster and reaching out proactively might be a more reliable way to reach out to all CE students.</p>

<h2 id="ce-stats">CE stats</h2>

<p>In past semesters, we usually received around 10-20 CE students per semester, usually from the GLOBE program. I don’t know if there were other CE applications I wasn’t aware of, or if the program policy has changed since then.</p>

<p>In Fall 2022, as of August 15 (5 days after the applications opened), we had:</p>
<ul>
  <li>CS 161: 71 concurrent enrollment applications, 21 listed GLOBE on the application</li>
  <li>CS 188: 106 concurrent enrollment applications, 25 listed GLOBE on the application</li>
</ul>

<p>We don’t know what the drop rate is like yet; we’ll have to wait until the drop deadline later in September to see how many of the applicants are still on our roster.</p>

<p>Fun fact: The CE system sends me an email for every application submitted. Waking up to 150+ unread emails was not very fun.</p>]]></content><author><name>Peyrin</name></author><category term="start of semester" /><summary type="html"><![CDATA[So, it turns out that writing a masters’ thesis takes time away from writing blog posts. Who knew.]]></summary></entry><entry><title type="html">Setting up 61A’s OH Queue</title><link href="https://pedagogy.cs161.org/2022/09/02/setting-up-oh-queue/" rel="alternate" type="text/html" title="Setting up 61A’s OH Queue" /><published>2022-09-02T00:00:00-07:00</published><updated>2022-09-02T00:00:00-07:00</updated><id>https://pedagogy.cs161.org/2022/09/02/setting-up-oh-queue</id><content type="html" xml:base="https://pedagogy.cs161.org/2022/09/02/setting-up-oh-queue/"><![CDATA[<h2 id="set-up-okpy">Set up okpy</h2>

<p>OH queue pulls its roster from okpy, so you need to first set up an okpy instance for your class.</p>

<ol>
  <li>
    <p>Visit <a href="https://okpy.org/">https://okpy.org/</a> and sign in.</p>
  </li>
  <li>
    <p>You should see a list of classes. See if someone’s already created a class for your semester.</p>

    <p><img src="/assets/posts/2022-09-02-setting-up-oh-queue/oh-queue-setup-1.png" alt="List of classes on okpy" /></p>
  </li>
  <li>
    <p>If you don’t see your class, then visit <a href="https://okpy.org/admin/course/new">https://okpy.org/admin/course/new</a> to create a new class.</p>

    <p><img src="/assets/posts/2022-09-02-setting-up-oh-queue/oh-queue-setup-2.png" alt="New class setup on okpy" /></p>

    <p>Make a note of the “Offering” tag you use here (following the pattern in their example should be fine).</p>
  </li>
</ol>

<h2 id="enroll-staff-in-okpy">Enroll staff in okpy</h2>

<p>To give your staff admin access to the queue, they need to be registered as staff in the okpy class.</p>

<ol start="4">
  <li>
    <p>Back on the okpy homepage, click on your class.</p>

    <p><img src="/assets/posts/2022-09-02-setting-up-oh-queue/oh-queue-setup-3.png" alt="Class homepage on okpy" /></p>
  </li>
  <li>
    <p>Click on “Enrollment” in the left sidebar.</p>

    <p><img src="/assets/posts/2022-09-02-setting-up-oh-queue/oh-queue-setup-4.png" alt="Class homepage on okpy" /></p>
  </li>
  <li>
    <p>In the “Batch Enroll” section on the right sidebar, click the “Enroll from CSV” option and add all your TAs.</p>

    <p><img src="/assets/posts/2022-09-02-setting-up-oh-queue/oh-queue-setup-5.png" alt="Enrollment page on okpy" /></p>

    <p>You can leave the Course Login and Section fields of the CSV blank, but the CSV expects blank strings for these two fields. For example, you must have the extra comma at the end of: <code class="language-plaintext highlighter-rouge">evanbot@berkeley.edu,EvanBot,12345,,</code></p>

    <p>Adding as Instructor, Teaching Assistant, Reader, or Lab Assistant should all be sufficient to give staff access to the OH Queue. I don’t think they make any real difference in terms of OH Queue permissions.</p>
  </li>
</ol>

<h2 id="enroll-students-in-okpy">Enroll students in okpy</h2>

<p>Optionally, if you want to restrict your OH queue to only be accessible by students, you can register all the students in the okpy class. Note that this also means you have to sync the okpy roster periodically, which involves extra overhead.</p>

<p>The simplest way to enroll students is probably to sync with bCourses, which is what we show here. You can probably also manually enroll (using the same steps for enrolling staff, but adding as Student) if you want.</p>

<ol start="7">
  <li>
    <p>Back on the okpy homepage, click on your class again. Click on “bCourses” in the left sidebar.</p>

    <p><img src="/assets/posts/2022-09-02-setting-up-oh-queue/oh-queue-setup-6.png" alt="bCourses page on okpy" /></p>

    <p>Fill out the fields to connect your okpy class to bCourses. You will probably need to visit your bCourses class to get the URL and create a new access token.</p>
  </li>
  <li>
    <p>Click “Enroll Students from bCourses”.</p>
  </li>
</ol>

<h2 id="set-up-oh-queue">Set up OH Queue</h2>

<p>Finally, you have to set up the OH queue for your class to point at the new okpy class you made. This section assumes that you already have an existing OH queue made for your class; if not, contact 61A staff.</p>

<ol start="9">
  <li>
    <p>Visit <a href="https://auth.cs61a.org">https://auth.cs61a.org</a>. You should be redirected to an OKPy login.</p>
  </li>
  <li>
    <p>At this point, you should see a section of config for your class like this:</p>

    <p><img src="/assets/posts/2022-09-02-setting-up-oh-queue/oh-queue-setup-7.png" alt="CS 161 config section on auth.cs61a.org" /></p>

    <p>If you don’t see this section, you have to ask a head TA from a previous semester to add your email as a course administrator, or ask 61A staff to add you.</p>
  </li>
  <li>
    <p>Under “Set new endpoint”, enter the new okpy endpoint (recall the “Offering” tag from before; also can be found on the okpy homepage).</p>
  </li>
  <li>
    <p>Check that your new TAs can log into the OH Queue as staff. Newly-added TAs may need to log out and log back in again before their staff access appears.</p>
  </li>
</ol>

<h2 id="setup-hack-use-the-same-class-every-semester">Setup hack: use the same class every semester</h2>

<p>A lot of Berkeley CS classes don’t use okpy for students anymore. The least reliable step of this process is passing 61A auth admin access to new head TAs every semester (the “Set up OH Queue” section). One way to make this process more robust is to create a dummy okpy class that only enrolls the TAs for every semester, and always have the OH Queue pointing at that dummy okpy class.</p>

<p>CS 161 has a dummy okpy classes <code class="language-plaintext highlighter-rouge">cal/cs161/fa00</code> that only enrolls the current semester’s TAs. With this dummy class, you only need to do the “Enroll staff in okpy” section of the setup here to update the staff roster.</p>

<p>If you don’t have students enrolled in your okpy class, be sure to go to your OH Queue, click on “Admin”, and set “Should only students on the roster be allowed to log in?” to “No” so that students who are not in your okpy class can stil make tickets.</p>

<p><img src="/assets/posts/2022-09-02-setting-up-oh-queue/oh-queue-setup-8.png" alt="OH Queue admin settings" /></p>]]></content><author><name>Peyrin</name></author><category term="start of semester" /><summary type="html"><![CDATA[Set up okpy]]></summary></entry><entry><title type="html">Student Support Flowchart</title><link href="https://pedagogy.cs161.org/2022/07/07/student-support-flowchart/" rel="alternate" type="text/html" title="Student Support Flowchart" /><published>2022-07-07T00:00:00-07:00</published><updated>2022-07-07T00:00:00-07:00</updated><id>https://pedagogy.cs161.org/2022/07/07/student-support-flowchart</id><content type="html" xml:base="https://pedagogy.cs161.org/2022/07/07/student-support-flowchart/"><![CDATA[<script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>

<div class="mermaid">
graph TD;A(<b>Academic Distress</b><br />Sudden Decline in Work and Grades<br />Repeated Absences<br />Disorganized Performance<br />Multiple Extension Requests<br />Bizarre content in writings or presentations); A--&gt; B{Check In}; B --&gt; |Just Academics| C{What are academic barriers}; G{Refer} --&gt; I; B--&gt;|Desperate requests for faculty<br />or staff time and attention| G; B--&gt;|You find yourself providing more<br />personal than academic support| G; C --&gt;|Format of Material| D{What formats work best?}; D--&gt; H; H(Share study materials in applicable formats<br />If you don't have something on hand,<br />follow up with the student later.<br />Reach out to campus orgs and course staff<br />about available study materials); C --&gt;|Pacing of Course| E; E(Meet and make a plan:<br /><a href="https://pedagogy.cs161.org/2022/01/21/student-support-meetings-guidance/">Student Meetings and Planning Guidance</a>); F(Access to Basic Needs<br />Family Emergencies<br />and many more ....); C --&gt;|Life Circumstances| F; F --&gt; G; I(<a href="https://csi.berkeley.edu/campus-community-resources/">Resources from CSI</a>);

</div>]]></content><author><name>Vron Vance</name></author><category term="student support" /><summary type="html"><![CDATA[Student Support Flowchart]]></summary></entry><entry><title type="html">An Incompletes Guide for TAs</title><link href="https://pedagogy.cs161.org/2022/06/11/incomplete-guide-for-tas/" rel="alternate" type="text/html" title="An Incompletes Guide for TAs" /><published>2022-06-11T00:00:00-07:00</published><updated>2022-06-11T00:00:00-07:00</updated><id>https://pedagogy.cs161.org/2022/06/11/incomplete-guide-for-tas</id><content type="html" xml:base="https://pedagogy.cs161.org/2022/06/11/incomplete-guide-for-tas/"><![CDATA[<p>Helping students from previous semesters resolve their incompletes is one of the more overlooked aspects of running a large class. One philosophy to incompletes I’ve heard is that students are responsible for completing the class on their own, which means they’re not a huge burden on staff. While this is certainly a valid approach to granting and resolving incompletes, I think it fails to properly serve struggling students who are most in need of our support. When managed properly, I believe that incompletes can be a powerful tool to reduce student stress and improve course equity, and as with all the efforts to improve equity that we talk about on this site, I think incompletes should be treated as an integral part of the class, rather than an afterthought.</p>

<h2 id="what-makes-managing-incompletes-hard">What makes managing incompletes hard?</h2>

<p>First reason: every student’s incomplete is unique. There are so many variables that you’ll pretty much never get two incompletes that look the same:</p>
<ul>
  <li>What was the student’s original semester?</li>
  <li>What assignments does the student still need to complete?</li>
  <li>Does the student have any special accommodations or extenuating circumstances?</li>
  <li>How does the student’s broader school career or life interact with their incomplete? For example, they might need to finish the class to graduate this semester, or they might be unable to work on anything this semester because they have a full-time job.</li>
</ul>

<p>Second reason: Incompletes inherently span multiple semesters. Between semesters, the class and its staff can change, and reconciling that can get really tricky really quickly.</p>
<ul>
  <li>If the student takes an exam in a future semester, how do we account for the course content potentially being different?</li>
  <li>If the student is working on an old or obsolete assignment, how do we support that?</li>
  <li>What were the grading policies in the original semester?</li>
</ul>

<p>As a result, managing incompletes requires a unique skill set that intersects with pretty much every aspect of running a class, including:</p>
<ul>
  <li>People skills to emphathize with struggling students and offer each student personalized support unique to their specific incomplete situation.</li>
  <li>Infrastructure/software know-how to make sure the student has access to the necessary class software across semesters.</li>
  <li>Solid understanding of course material, possibly across different iterations of the class.</li>
  <li>Detective skills to track down buried information from old semesters.</li>
  <li>The persistence to navigate the web of bureaucratic red tape and fill out paperwork for all the weird edge cases associated with incompletes.</li>
</ul>

<p>I’ve never met anyone who has all these skills, but luckily, there should be TAs on staff who specialize in each of these things, so perhaps communicating with other staff members is actually the single most important skill for someone managing incompletes.</p>

<p>With that in mind, what are some best practices to help streamline the process of managing incompletes?</p>

<h2 id="document-everything">Document everything</h2>

<p>It’s extremely easy to lose information between semesters. Even when I managed incompletes for multiple semesters, I would have trouble locating information from old semesters. Keeping a record of everything that persists across semesters saves everyone the trouble of doing detective work on old buried spreadsheets and contacting long-graduated TAs for obscure pieces of data.</p>

<p>My best recommendation here is to create a central resource (e.g. Google Drive shared drive) for incompletes, using an account that all future staff members will have access to (e.g. a shared access account like cs161-staff@berkeley.edu). Some examples of things that might be worth documenting:</p>
<ul>
  <li>DSP accommodation letters for students taking incompletes.</li>
  <li>Grading policies in each semester (e.g. grading bins, exam averages for scaling purposes, any rounding or shifts that were applied).</li>
  <li>All email communication from students taking incompletes. As an aside, this is also where a shared access account can be useful; you could direct all emails there, which avoids important information getting buried in someone’s personal email.</li>
</ul>

<h2 id="grading-worksheets">Grading worksheets</h2>

<p>In my mind, the ideal way to hand off an incomplete to future semesters is to create a worksheet listing all of a student’s completed work and grades so far, as well as all the work the student needs to complete to resolve the incomplete. This worksheet should also provide an exact mathematical formula for calculating a final grade, so future staff can simply plug in numbers from the completed assignments. “Take the student’s project 3 grade out of 100, multiply by 0.1, add it to 74.5, and if the result exceeds 78, the student gets an A.”</p>

<p>Well, that’s easier said than done. Grading policies and assignments change across semesters, and often we have to get creative with blending work from different semesters. One recent example I can think of: Fall 2021 61C had 11 homework assignments, but Spring 2022 61C compressed the same questions into 10 homework assignments. How do you reconcile this for students who completed some assignments from fall and some assignments from spring? (Maybe we’ll put up a future post about how to deal with these kinds of assignment and content inconsistencies.)</p>

<p>Also, there unfortunately isn’t a great universal tool for streamlining calculations like this, especially when we have to get creative with them. For now, we’ve been using Google Sheets, but spreadsheets can get complex and buggy very quickly.</p>

<p>Although we usually can’t create perfect grading worksheets, I think it’s a useful way to provide transparency for staff and students. Students get a clear breakdown of what needs to be finished and how it affects their grade. Staff have all the grading information readily available and can either directly follow it, or use it to make an informed grading decision.</p>

<h2 id="communicate-with-students">Communicate with students</h2>

<p>In <a href="/2022/06/10/incomplete-guide-for-students/">our incompletes guide aimed at students</a>, we stressed that communication with staff is the best way to ensure an incomplete gets resolved smoothly. This is true in the other direction as well; responsive staff can help the student stay on pace to finish their incomplete and resolve all the tricky logistical questions associated with taking the class across different semesters.</p>

<p>It’s not required, but I think it’s ideal for staff to proactively check in with students to make sure things are going smoothly. Also, staff are in a better position than the student to preemptively point out any potential differences in the class between semesters and how to navigate those differences.</p>

<p>Student communication and documentation go hand-in-hand; as we talk more with the student to learn more about their specific situation, documenting that information can be helpful for resolving the incomplete later down the line (e.g. if resolving takes more than one semester).</p>

<h2 id="offload-logistics-from-students-when-possible">Offload logistics from students when possible</h2>

<p>Finishing a class while dealing with differences across semesters and extenuating circumstances is hard enough without all the logistics and bureaucratic red tape associated with incompletes.</p>

<p>Academic advising is probably the best resource for navigating policy-related questions, but as staff managing incompletes, we’ve accumulated a bit of experience with incompletes policy as well. A student might not know offhand the policy behind incompletes lapsing to an F or how to extend an incomplete lapse date, but as a TA who’s submitted dozens of petitions to extend incompletes, I’m pretty familiar with the process. Being able to proactively offer this information to students is another way to help them streamline the process and avoid any difficult, last-minute problems that might arise from not knowing policies ahead of time.</p>

<p>This point also ties into documentation; as incomplete management duties transfer between TAs, building a knowledge base of incompletes policy (e.g. common mistakes, what to do in unusual situations) can make things easier for everyone. I’m hoping that posts on this site are a first step toward building a more sustainable knowledge base for incompletes!</p>

<p>See also: <a href="/2022/06/10/incomplete-guide-for-students/">An incompletes guide for students.</a></p>]]></content><author><name>Peyrin</name></author><category term="student support" /><category term="incompletes" /><summary type="html"><![CDATA[Best practices for TAs managing incompletes]]></summary></entry><entry><title type="html">An Incompletes Guide for Students</title><link href="https://pedagogy.cs161.org/2022/06/10/incomplete-guide-for-students/" rel="alternate" type="text/html" title="An Incompletes Guide for Students" /><published>2022-06-10T00:00:00-07:00</published><updated>2022-06-10T00:00:00-07:00</updated><id>https://pedagogy.cs161.org/2022/06/10/incomplete-guide-for-students</id><content type="html" xml:base="https://pedagogy.cs161.org/2022/06/10/incomplete-guide-for-students/"><![CDATA[<p>Sometimes, real-life things come up over the course of a semester, and you find yourself unable to finish a class by the end of the semester. That’s what incomplete grades are for! In short, you see an I grade on your transcript after that semester. Then, some time in the future, you complete the class, and the I grade gets replaced with your final grade. This post collects some tips for successfully navigating your incomplete.</p>

<p>Disclaimer 1: This post isn’t an official policy post. The official documentation (and other advising resources) should be the source of truth for any questions related to policy. 
You can find the official UC Berkeley documentation on incompletes here: <a href="https://lsadvising.berkeley.edu/policies/incomplete-grades">College of L&amp;S</a>, <a href="https://engineering.berkeley.edu/students/undergraduate-guide/policies-procedures/grades/">College of Engineering</a>.</p>

<p>Disclaimer 2: I’ve never personally taken an incomplete as a student, so I can only offer my perspective as a TA who’s managed incompletes for several semesters.</p>

<h2 id="communicate-with-course-staff">Communicate with course staff</h2>

<p>If I could only give one bit of advice, it would be this.</p>

<p>The nature of incompletes is such that each student is in a unique situation, with their own individual logistical preferences and course-related preferences. For example:</p>
<ul>
  <li>When do you plan to finish the incomplete?</li>
  <li>Are there any extenuating circumstances that are still ongoing that might affect your ability to finish the incomplete?</li>
  <li>Do you work best synchronously with a future semester of the class, or asynchronously finishing assignments on your own time?</li>
  <li>What parts of the content do you feel comfortable or uncomfortable with?</li>
</ul>

<p>Unlike a regular offering of the class, where we can plan out a course schedule for all students, there’s no one-size-fits-all schedule for incompletes. We can still guide you through finishing the incomplete, but since we don’t have the ability to read minds, we need to hear updates from you on your progress and your situation in order to best work with you.</p>

<p>For most classes, email is probably the cleanest way to keep in touch with course staff. Most classes will have their own email address (e.g. cs161-staff@berkeley.edu) that gets transferred to the incoming head TAs and instructors every semester. If a course hasn’t gotten in touch with you first, this is a great place to start reaching out to the staff in a new semester. Keeping all communications in the same email address also makes it easier for staff to quickly look up past communications from you and get a better picture of your overall progress so far. This isn’t a hard rule; some TAs or instructors might prefer keeping in touch with you through their personal email, which does have its privacy benefits. The important thing is that you’re in regular contact with staff one way or another.</p>

<p>What are some things you can communicate with staff about?</p>
<ul>
  <li>Your progress on assignments so far, and your plans for future progress. For example: “I finished Project 3 this week, and now I think I just need to finish Project 4 and take the final exam, which I plan on doing this May.”</li>
  <li>Requests for access to the current semester’s resources. For example: “Can I get access to this semester’s Piazza?”</li>
  <li>Logistical questions about the work you’re completing. For example: “I didn’t make any progress on Project 4 in my original semester. Should I be working on this semester’s project or my original semester’s project? Which autograder should I submit to?”</li>
  <li>Logistical questions about the incomplete. For example: “I don’t think I’ll be able to take the midterm this semester. What are my options? Can I take it in a future semester, or clobber it with my final exam score?”</li>
</ul>

<p>Why is it helpful for staff to know these things?</p>
<ul>
  <li>When managing incompletes, I’ve frequently forgotten to record a student’s finished assignments. If you have an email record of finishing the assignment, this makes fixing any mistakes much easier.</li>
  <li>Every semester, if I don’t hear from the student, I have to guess whether each student is planning on taking the exam or not. Confirming that you’re taking the exam makes it easier for us to send you reminders and relevant logistics emails.</li>
</ul>

<p>Communication is really important, but your privacy is important too. If there are some extenuating circumstances you aren’t comfortable sharing, you’re not obligated to share them with staff. It’s completely okay to vaguely refer to real-life things coming up without specifying, and we can work from there.</p>

<h2 id="make-plans-and-schedules">Make plans and schedules</h2>

<p>An incomplete is great for giving you extra time on assignments. However, an incomplete can also be really dangerous–by pushing deadlines so far into the future, or in some cases, removing all deadlines entirely, it’s easy to fall into long-term procrastination.</p>

<p>Procrastinating for a long time (on the order of multiple semesters or years) on an incomplete is not ideal for a few reasons.</p>
<ul>
  <li>The longer you wait to finish your incomplete, the more you forget and have to re-learn content from the original semester. I don’t have hard data for this, but I’ve anecdotally noticed a trend that incomplete students finishing much later will sometimes score lower on exams. I wonder if it’s because they’re taking the exam possibly years after watching the lecture and completing some of the assignments.</li>
  <li>No matter how long you procrastinate, there’s always going to be one final deadline, which is your graduation. This is even more important if finishing the class is required for you to graduate–we’ve had students who had to delay their graduation solely because they never got around to resolving an incomplete in our class.</li>
</ul>

<p>This isn’t to say you absolutely have to finish the incomplete as soon as possible. Life throws a lot of things at you that should take priority over your incomplete, and part of the reason for taking the incomplete is to be able to focus on more important things first before coming back to the class. The key difference between an incomplete being a helpful way to focus on real life and an incomplete being an enable for infinite procrastination is the ability to plan ahead.</p>

<p>On a macro semester-by-semester level, it helps to set a target semester for finishing your incomplete. Depending on the amount of work you have left, an incomplete can almost be like an extra class you’re taking but getting no units for. For example, it can add an extra exam to your finals week. I’ve seen students take a reduced courseload in a particular semester with the intent of finishing their incomplete that semester. I’ve also seen students reserve a summer semester to follow along with the summer offering of the class and finish the incomplete by August. These both seem like good approaches to block out a semester for your incomplete.</p>

<p>On a micro assignment-by-assignment level, it also helps to plan out how you intend to finish the work in the class. For some classes, you can figure this out by following along with a new semester of the class, and using their deadlines. If you and staff are both okay with coming up with a custom schedule that gives you more time on each assignment (reminder: communicate with staff), then you can aim to follow that instead.</p>

<p>Plans are great, but real life might still understandably take precedence. It’s okay to replan if necessary, though be careful not to endlessly kick the incomplete to later, and remember to keep in contact with course staff about your new plans so we can best help you.</p>

<h2 id="communicate-with-advising-if-needed">Communicate with advising (if needed)</h2>

<p>Incompletes are a mess of bureaucratic red tape, and navigating them properly can understandably be intimidating. Sometimes you’ll have logistical questions that have nothing to do with the course content:</p>
<ul>
  <li>How do you extend an incomplete deadline? (Get a form signed by your instructor, and send it to your college.)</li>
  <li>What happens if I don’t finish the incomplete by the deadline? (It lapses to an F.)</li>
  <li>What does it mean to freeze an incomplete, and how do I do that? (Freezing means acknowledging you won’t finish the class and permanently retaining the I on your transcript. You submit a form for this too.)</li>
</ul>

<p>These are some common questions we’ve gotten over the years. I included the answers in parentheses as reference, but I don’t think any of the answers are immediately obvious unless you look them up. In many cases, we’ve gotten far more obscure questions that even university staff have trouble answering.</p>

<p>If you encounter questions like this, academic advising is usually where we tell everyone to start. They might not know the answer, but they can at least point you in the right direction.</p>

<p>Here are the links to UC Berkeley’s academic advising: <a href="https://lsadvising.berkeley.edu/appointments-advice">College of L&amp;S</a>, <a href="https://engineering.berkeley.edu/students/advising-counseling/ess-advising/">College of Engineering</a>.</p>

<p>Finishing an incomplete can seem daunting, but we want to help you get through it as smoothly as possible! Hopefully this post gives you a good starting point for approaching your incomplete.</p>

<p>See also: <a href="/2022/06/10/incomplete-guide-for-students/">An incompletes guide for TAs.</a></p>]]></content><author><name>Peyrin</name></author><category term="student support" /><category term="incompletes" /><summary type="html"><![CDATA[Tips for students, collected from TAs managing incompletes]]></summary></entry><entry><title type="html">Making a Pedagogy Blog</title><link href="https://pedagogy.cs161.org/2022/05/11/making-a-pedagogy-blog/" rel="alternate" type="text/html" title="Making a Pedagogy Blog" /><published>2022-05-11T00:00:00-07:00</published><updated>2022-05-11T00:00:00-07:00</updated><id>https://pedagogy.cs161.org/2022/05/11/making-a-pedagogy-blog</id><content type="html" xml:base="https://pedagogy.cs161.org/2022/05/11/making-a-pedagogy-blog/"><![CDATA[<blockquote>
  <p>This post is adapted from an experience report about putting this blog together that I wrote for an education class.</p>
</blockquote>

<p>The <a href="https://pedagogy.cs161.org">CS 161 pedagogy blog</a> is a public resource for EECS GSIs (both first-time and returning) containing best practices, how-to guides, and a general knowledge base that often gets lost and re-learned because of GSI turnover across semesters. This resource was created in collaboration with veteran and administrative TAs from CS 161 and CS 61C.</p>

<p>Creating a knowledge base for future semesters has always been difficult to do sustainably. In particular, writing about best practices often gets delayed or never happens because there’s a high barrier to entry for writing a comprehensive guide. I’ve personally written incomplete or partial guides before, but ran out of time or commitment to finish them as managing courses got busier over the course of a semester. One reason why we formatted this site as a blog was to ensure that the barrier to writing down information was low enough that TAs would be encouraged to write more consistently, even if that meant writing in smaller chunks.</p>

<p>Also, even when things are written down, organization is often an issue; documents can get lost in Google Docs, making them difficult to find or inaccessible to new TAs who don’t have specific links. The time spent organizing various pieces of writing can also be a barrier to entry, as it takes time away from writing. A blog format prioritizes getting knowledge down in writing during the semester over the organization of that writing, which can always be done by later TAs or during less busy times (e.g. summer).</p>

<p>Blog posts can be independent and short, which makes it easier for TAs to periodically contribute small tidbits of knowledge to the blog that will hopefully build up over time. Also, the date-based organization of a blog eliminates the immediate need for organization, and tagging and categorizing posts gives us a rough grouping of posts that we can use to organize posts later. As the blog grows to have more than a few dozen posts, periodic reorganization will be needed to make specific resources more findable, but for now, we’ve found that the search and tag features are generally enough to find the relevant information.</p>

<p>If you’re wondering why a few posts on this blog are dated from 2021, before the blog was actually created: these are resources that had previously been posted in less accessible places, such as Google Docs or Slack, but we moved them to the blog for better visibility. One particularly useful knowledge base I’m hoping to transfer to the blog in the future is past Piazza forums (e.g. announcement templates, posting statistics). Finding other buried or lost resources is one of our priorities as the blog continues to grow.</p>

<p>Something nice about this site is that its different posts can have different target audiences. Onboarding and training first-time TAs is part of our job as veteran TAs, and when writing down advice on how to train first-time TAs, I realized that the guide ended up containing the information we would want first-time TAs to read anyway. Also, many of the best practices that work well for our classes are also applicable to other classes, and being able to link blog posts to other classes has been a nice way to share information this semester while keeping that information in an accessible place (as opposed to, say, a Slack DM that would disappear soon). Finally, transparency about our teaching practices is something we value in the classes we teach, and I’ve found that posting about our thinking behind certain policies is a good way to communicate our thought process to curious students. This is especially useful since many of our students are interested in eventually applying to be join course staff.</p>

<p>The essence of knowledge transfer means that this blog will take a few semesters before serving its initial purpose of training the next generation of TAs, but we have some plans for expanding the scope of the blog in the near future. So far, all posts have been written by veteran TAs, but we think posts from first-time TAs about their experiences would be useful for future first-time TAs. Also, it would be helpful to start incorporating posts from other classes to facilitate a two-way knowledge transfer between classes. Also, from talking with educators outside Berkeley, it seems like Berkeley EECS has a lot of teaching practices unique to our extremely large class sizes that other universities are unfamiliar with, so maybe this blog can be a first step to connecting with other schools.</p>]]></content><author><name>Peyrin</name></author><category term="knowledge transfer" /><summary type="html"><![CDATA[Why'd we make this website?]]></summary></entry><entry><title type="html">Our Exam Logistics Page</title><link href="https://pedagogy.cs161.org/2022/05/07/exam-logistics-page/" rel="alternate" type="text/html" title="Our Exam Logistics Page" /><published>2022-05-07T00:00:00-07:00</published><updated>2022-05-07T00:00:00-07:00</updated><id>https://pedagogy.cs161.org/2022/05/07/exam-logistics-page</id><content type="html" xml:base="https://pedagogy.cs161.org/2022/05/07/exam-logistics-page/"><![CDATA[<blockquote>
  <p>This post contains a snapshot of our student-facing exam logistics for the Spring 2022 Final! Feel free to adapt these logistics to your class’s exam procedure, and see our other exam-related posts for recommendations and guidelines on how to offer hybrid exams.</p>
</blockquote>

<h1 id="exam-logistics">Exam Logistics</h1>

<p>The midterm exam will be held in-person on <strong>Friday, February 25, 7:00–9:00 PM PT</strong>.</p>

<p>The final exam will be held in-person on <strong>Thursday, May 12, 3:00–6:00 PM PT</strong>.</p>

<p>If you would like to request an online exam for any reason or would like to request an alternate exam time, please fill out the appropriate exam adjustments form:</p>

<ul>
  <li><a href="https://docs.google.com/forms/d/e/1FAIpQLSfJihSCSN9IH0T7pYKhFAKTmPvkHSHbLB6q11ldh-bsirWAow/viewform">Midterm Adjustments Form</a></li>
  <li><a href="https://docs.google.com/forms/d/e/1FAIpQLScYez78x1RX50mxVcTFQbGfMbTYwYQVoBtk3QSGCgUGJDazGQ/viewform">Final Adjustments Form</a></li>
</ul>

<h2 id="scope">Scope</h2>

<ul>
  <li>The midterm scope is everything up to the end of the cryptography module: Lectures 1–12, Discussions 1–5, Homeworks 1–3, and Project 1.</li>
  <li>The final scope is everything covered through the class: Lectures 1–24, Discussions 1–12, Homeworks 1–7, and Projects 1–3.</li>
  <li>The textbook is a supplemental resource but is not officially in scope.</li>
</ul>

<h2 id="cheat-sheets">Cheat Sheets</h2>

<ul>
  <li>Students may prepare and bring use 2 two-sided cheat sheets for the midterm and 4 two-sided cheat sheets for the final. You may reuse your cheat sheets on the midterm for the final.</li>
  <li>Cheat sheets must be handwritten. Handwritten tablet notes may be printed and used. If you have handwritten tablet notes but no printer access, let us in a private post on Piazza.</li>
</ul>

<h2 id="in-person-exam-logistics">In-Person Exam Logistics</h2>

<ul>
  <li>In-person exams will be conducted in assigned exam rooms. You will receive confirmation of your exam room and seat number in the days leading up to the exam.</li>
</ul>

<h2 id="online-exam-logistics">Online Exam Logistics</h2>

<ul>
  <li>Online exams will be conducted via Zoom proctoring. Students will receive a Zoom link and name(s) of their proctors in the days leading up to the exam.</li>
  <li>If you’d prefer to upload a local recording instead of using Zoom, or you’d prefer to record a screen share and webcam feed instead, please reach out privately.</li>
  <li>
    <p>If you feel uncomfortable with proctoring, please reach out so you can discuss alternatives with an instructor.</p>
  </li>
  <li><strong>Before the exam:</strong>
    <ul>
      <li>Download Zoom on your smartphone and experiment with a video recording setup (see below). <a href="/sample-setups.html">You can see examples of setups from course staff here.</a> Please reach out privately on Piazza if you are having setup difficulties.</li>
    </ul>
  </li>
  <li><strong>On the day of the exam:</strong>
    <ul>
      <li>Join the Zoom meeting and position your smartphone so that we can clearly see your computer/tablet screen, and if possible, both of your hands. The exam won’t start until everyone’s in the Zoom room, so you may have to wait a few minutes.</li>
      <li>When the proctor has announced that the exam has started, the decryption password will be posted on Examtool.</li>
    </ul>
  </li>
  <li><strong>During the exam:</strong>
    <ul>
      <li>Only the 61A Examtool page should be on your computer screen.</li>
      <li>Submit clarification requests through the 61A Examtool. If your question is answered, it will be displayed as an announcement. Please check the announcements periodically during the exam.</li>
    </ul>
  </li>
  <li><strong>Technical issues:</strong>
    <ul>
      <li>Don’t worry if your video feed disconnects briefly during the exam.</li>
      <li>If you encounter significant technical problems, don’t worry about video proctoring and focus on finishing the exam.</li>
      <li>We may ask some students to take a short verbal exam after the exam and explain how to solve one or more problems that are similar to an exam question they got right.</li>
      <li>If you encounter Internet problems, write your answers locally and send them to cs161-staff@berkeley.edu as soon as the exam is over.</li>
      <li>If you need to use the bathroom, just leave the video feed on while you’re away.</li>
    </ul>
  </li>
  <li><strong>Privacy policy:</strong>
    <ul>
      <li>Course staff will not save any images or recordings from the proctoring session after the exam is over.</li>
      <li>Course staff will respect your privacy and not disclose any information from the proctoring session after the exam, except in cases of academic dishonesty.</li>
      <li>Every case of potential academic dishonesty will be manually reviewed, and you’ll be able to discuss the situation with the instructor.</li>
      <li>You have the option to join the meeting with your SID as your display name for anonymity.</li>
      <li>We will tell you who your proctor is before the exam. You have the option to switch proctors for any reason: please reach out privately before the exam if you would like to switch proctors.</li>
    </ul>
  </li>
</ul>]]></content><author><name>Shomil Jain</name></author><category term="exams" /><summary type="html"><![CDATA[A snapshot of our student-facing exam logistics]]></summary></entry><entry><title type="html">Students Who Frequent Office Hours</title><link href="https://pedagogy.cs161.org/2022/04/29/students-who-frequent-office-hours/" rel="alternate" type="text/html" title="Students Who Frequent Office Hours" /><published>2022-04-29T00:00:00-07:00</published><updated>2022-04-29T00:00:00-07:00</updated><id>https://pedagogy.cs161.org/2022/04/29/students-who-frequent-office-hours</id><content type="html" xml:base="https://pedagogy.cs161.org/2022/04/29/students-who-frequent-office-hours/"><![CDATA[<p>The phenomenon where a minority of people use up the majority of available resources is known by many different names: power laws, 80/20 rule, Pareto principle. No matter what it’s called, it definitely applies to how students use office hours at Berkeley. The majority of students never attend office hours or attend once or twice in the entire semester, while a small number of students use office hours weekly, if not daily, through the entire semester. Why is that, and what can we do about it (if anything)?</p>

<h2 id="causes">Causes</h2>

<p>I have two broad theories behind why a small subset of students use office hours so frequently. They’re not mutually exclusive, and the true reason probably lies somewhere in between.</p>

<p>Reason 1: Students try to extract answers from staff in office hours by asking vague questions and asking questions repeatedly to different staff members until they get answered. I think it’s important to note that not all students are doing this maliciously–it often stems from not understanding how to ask the right questions to get unstuck, a misconception that learning how to debug isn’t part of the assignment, or stress from other classes or extenuating circumstances leading students to try and finish assignments as quickly as possible at all costs. Nevertheless, dealing with students attempting to extract solutions is something that we discuss frequently with TAs, including in the pedagogy class for first-time TAs.</p>

<p>Reason 2: Students have a fundamental misunderstanding of the material that can’t be solved in a short office hours ticket. This is related to the idea of thrashing in office hours–in a model where each student gets a small bit of advice or help each time, a student who hasn’t fully grasped the fundamentals yet will be stuck repeatedly requesting help from different TAs, instead of being able to sit down for a longer tutoring session that would help them more in the long run. There might be a correlation between students who are thrashing in office hours and students who are struggling in school in general (e.g. extenuating circumstances, being from a marginalized background, etc.). Since our classes follow a somewhat MOOC-like model that requires some self-learning, struggling students might not have enough experience with self-learning or enough free time to efficiently self-learn the material.</p>

<h2 id="allocating-limited-resources">Allocating Limited Resources</h2>

<p>A small proportion of students using most of the resources becomes a problem when the resources are limited. This is the case with office hours at Berkeley–it’s not uncommon to wait over 2 hours in a queue before getting any help. Even in classes that have allocated as many staff hours to office hours as possible, the average wait time is probably still around 20-30 minutes, and it’s still not uncommon to wait around an hour before receiving help.</p>

<p>Most classes use a first-in, first-out queue to allocate limited OH resources. This queue does not take into account how often a student has used office hours in the past–whether it’s your first time or 100th time this semester, your queue is processed with equal priority.</p>

<p>However, knowing that a small number of students are making the majority of help tickets, it might be worth revisiting the first-in, first-out queue and really consider what it means to <em>fairly</em> allocate these limited resources to all students. For example:</p>
<ul>
  <li>Is it fair for someone who’s gotten helped 100 times this semester to get helped for the 101st time, ahead of someone who’s asking for help for the first time this semester? If we consider this unfair, then maybe some priority for infrequent users is needed.</li>
  <li>If there is a correlation between struggling students and frequent users, do we want to focus our resources on struggling students who need help the most? If so, then maybe some priority for frequent users is needed.</li>
</ul>

<p>Also, what we as staff consider fair may not line up with what students consider fair. This might explain why the first-in, first-out queue has been around for so long, and why no attempt at changing this paradigm has succeeded–from a student’s perspective, this is the fairest way to distribute resources.</p>

<p>One situation where the first-in, first-out queue breaks down is at the start of office hours, when there is often a flood of students all requesting help. If help tickets are processed in order, and a dozen students make a help ticket at pretty much the same time, the first student might end up getting help an hour earlier than the last student. Some classes have tried to mitigate this by randomly shuffling the tickets when there’s a flood of tickets created around the same time, but this presents another scenario where we have to consider what “fair” allocation of resources means.</p>

<h2 id="limiting-help-tickets">Limiting Help Tickets</h2>

<p>If we believe that there’s a point where repeated help tickets are either unproductive thrashing or attempts at extracting answers, then we could consider an upper bound of resources that any one student can use. This could be considered fair in the sense that every student is working with the same limit, and the limit ensures more equal spread of resources to all students. However, if the students who end up hitting the limit are also the students who are struggling the most and need help, then this system might encounter other fairness and equity issues.</p>

<p>How would this upper bound look in practice? We could try to limit the number of tickets a student is allowed to make. If we set the limit to be high enough, only a small handful of the most frequent users would ever get close to the limit. For example, with a limit of 100 tickets over a semester, a student would have to attend office hours nearly every day to hit the limit.</p>

<p>There are a few problems with limiting tickets. Even if we think the limit is high enough that most students won’t reach it, the existence of the limit might discourage students from asking for help when they actually need help, for fear of “wasting” a ticket. This might disproportionately affect marginalized students who are more reluctant to ask for help in the first place. Also, the limit might incentivize students to try and maximize the help from each ticket (e.g. making one ticket to ask questions about several different assignments), which would cause each ticket to take longer. Students might also be unhappy when a help ticket is short or ends in the TA asking the student to come back later, which is often necessary when the student needs to do some individual work before getting more help.</p>

<p>Instead of limiting the number of tickets, we could also try to limit the time between tickets, so that a student who has already gotten help has to wait a certain number of minutes before getting help again. However, this approach may also incentivize students trying to maximize the help from each ticket.</p>

<p>Limiting tickets may also not solve the root problems of students thrashing between different TAs and students who try to extract answers and don’t try to solve problems on their own.</p>

<h2 id="contacting-frequent-users">Contacting Frequent Users</h2>

<p>Since this resource allocation issue is mainly caused by a small subset of students, there might be a solution that only involves those students, instead of a blanket policy that affects all students (e.g. limiting tickets). One possible approach is to reach out to the most frequent users, though we would have to be careful about what we say. If the wording is too strong, struggling students might be discouraged from asking for help in the future. If the wording isn’t strong enough, the message might be ignored and ineffective.</p>

<p>Ultimately, there isn’t one clean answer to this 80/20 power law phenomenon, and it’s not clear if this phenomenon is even a problem that needs to be solved in the first place. But it’s still worth noting that it’s a result of our current office hours model, and maybe a different model will deal with this phenomenon differently.</p>]]></content><author><name>Peyrin Kao</name></author><category term="office hours" /><summary type="html"><![CDATA[A small fraction of students use the most office hours resources. Why is that, and what can we do about it?]]></summary></entry><entry><title type="html">Experiences Applying for a Unit 18 Lecturer Position</title><link href="https://pedagogy.cs161.org/2022/04/23/experiences-applying-for-unit-18/" rel="alternate" type="text/html" title="Experiences Applying for a Unit 18 Lecturer Position" /><published>2022-04-23T00:00:00-07:00</published><updated>2022-04-23T00:00:00-07:00</updated><id>https://pedagogy.cs161.org/2022/04/23/experiences-applying-for-unit-18</id><content type="html" xml:base="https://pedagogy.cs161.org/2022/04/23/experiences-applying-for-unit-18/"><![CDATA[<p>I’m finishing graduate school with an MS degree this year, and I’ve spent a large chunk of the year looking around for jobs. Given that I’ve spent all my years in undergrad and grad school teaching, looking for a CS lecturer job seems like a natural career path, but finding a lecturer job without a PhD is easier said than done. It’s also forced me to ask myself some questions about what I’m looking for in my long-term career.</p>

<p>Disclaimer: I’m writing this to offer the perspective of someone who’s right in between graduating from school and starting their first job. If you’re in a similar situation, you’ll almost certainly get better advice by talking with others who have more experience than me and can actually speak to what the lecturer job is like after years in the position. There’s no way I would have made it through this process without the advice of all the faculty members I was able to ask for advice and guidance.</p>

<h2 id="why-not-phd">Why Not PhD?</h2>

<p>There’s no question that having a PhD opens up many more teaching opportunities, so I imagine that this is something I’ll have to keep answering for the rest of my life. At the moment, the short answer is: I don’t think I’m cut out for another 4-5 years of research. Maybe this is because of lack of involvement with the larger CS education research community (I still haven’t attended <a href="https://www.sigcse.org/">SIGCSE</a> yet), or because I don’t have a long-term project at the moment that I’d want to commit 4-5 years to. This could certainly change after a few years, but I’m pretty content with my decision to not pursue a PhD right now.</p>

<h2 id="unit-18-at-berkeley">Unit 18 at Berkeley</h2>

<p>To me, the most obvious position I could pursue was a teaching position at Berkeley. <a href="https://apo.berkeley.edu/unit-18-lecturer-and-senior-lecturer">Unit 18</a> (non-tenured lecturer) positions don’t require a PhD, and I already have a lot of experience with the teaching community at Berkeley. It also helped that Berkeley had a couple teaching positions open from some recent departures, so I knew they were looking for lecturers.</p>

<p>Applying within Berkeley was less about the formal application process and more about talking to people around the university about my interest in a Unit 18 job. I made at least three distinct pushes to communicate my interest to the relevant people:</p>
<ul>
  <li>In late 2021, I discussed the possibility of joining faculty to help offload some teaching load of other lecturers and prevent burnout from one person teaching the class too many times. Understandably, there was no budget to hire a new lecturer who wasn’t filling an immediate teaching need, so this fell through.</li>
  <li>In early 2022, there was a need to cover a large class in Fall 2022 that was missing an instructor. I hadn’t taught this class as an instructor before, but I offered to help teach the class, thinking that it could at least help me get my foot in the door for future teaching positions. This attempt didn’t entirely fall through, but it also didn’t result in me getting hired. My guess is that they were still exploring their options and hadn’t committed to anything yet.</li>
  <li>Around February 2022, <a href="https://twitter.com/ncweaver/status/1488493720710234116">Nick Weaver announced his intention to leave Berkeley</a>, which left a gap in the classes he usually teaches. These are the same classes I’ve been teaching for the past few semesters, so a proposal to hire me as a replacement for Nick was presented. I’m really grateful to Nick and the other instructors of these classes for putting in a good word for me. The combination of filling Nick’s teaching load and covering the aforementioned large class in Fall 2022 was a strong enough need that the department offered me a Unit 18 position to cover these teaching needs for the next year. (This hire isn’t official yet but hopefully will be made official in the next week or so.)</li>
</ul>

<h2 id="interviewing-elsewhere">Interviewing Elsewhere</h2>

<p>During the Berkeley hiring process, I also looked elsewhere for teaching positions just in case the Berkeley job fell through. I didn’t interview too widely, as staying in California is a relatively high priority for me at the moment, but I still learned a few things (perhaps obvious in hindsight):</p>
<ul>
  <li>Strong recommendations make a difference. The one university that interviewed me and made me an offer was one where I had been recommended by someone. Places where I didn’t get around to submitting recommendation letters never even got back to me.</li>
  <li>Finding places that will hire people without PhDs is hard. This is made even harder when your only prior teaching experience is as a TA (technically I also had summer instructor experience, but that’s not really a faculty position either). I’m thankful for all the other MS-only educators who offered advice on how to find these positions, and I’d suggest reaching out to others if you’re in a similar position. Berkeley luckily got back to me before I had to start widening my search too much, so I don’t have as much experience yet with this part of the job search.</li>
  <li>Experience in other places is important. Talking with faculty from other schools and learning about how other schools work was really eye-opening, and it does make me wonder what I’m missing out on by staying at Berkeley for now.</li>
</ul>

<p>I’m grateful for the other non-Berkeley school that made an offer; this university wasn’t in California, which made my decision to stay at Berkeley pretty easy.</p>

<h2 id="why-not-industry">Why Not Industry?</h2>

<p>I interviewed for several industry jobs with little success. I can’t really say which job I would have taken if I had gotten both industry and teaching offers. At one point, I considered a part-time teaching job and a full-time industry job so I wouldn’t be totally disconnected from the teaching community.</p>

<p>I’ve talked with a lot of people with great advice on many of the points in this post, but at the end of the day, I think the choice between industry and teaching is a question that you had to answer for yourself. On paper, taking a teaching job over an industry job comes with some clear sacrifices, most notably salary and benefits, so it really came down to whether my own interest in teaching outweighed the financial and career incentives associated with industry.</p>

<p>Some assorted thoughts that have been on my mind throughout this whole experience:</p>
<ul>
  <li>Getting paid to do something you actually enjoy doing seems like a rare privilege in life, and it’s an opportunity I didn’t want to pass up.</li>
  <li>The tech industry embodies many of the worst traits of the late-stage capitalist dystopia we live in, and I don’t know if that’s the kind of industry I can spend a career contributing to in good conscience. (Not an indictment of all tech companies here, of course.) Education seems to me like the space where I can at least try to affect some meaningful change.</li>
  <li>I’m in a privileged position where a teaching salary is enough for me to get by–I don’t have a family to raise, I don’t have student loans to pay off (thanks to teaching all the way through school), etc. I can’t say that I won’t miss the salary difference, but I’m lucky enough that it’s not make-or-break for me.</li>
  <li>Going into industry interviews with mainly teaching experience was a real fish-out-of-water experience for me (and perhaps this is a topic for another post). The job application process has made me think that maybe I belong more in the teaching community.</li>
</ul>]]></content><author><name>Peyrin Kao</name></author><category term="hiring" /><summary type="html"><![CDATA[Applying for a CS faculty job without a PhD]]></summary></entry><entry><title type="html">Doggos for April Fools’</title><link href="https://pedagogy.cs161.org/2022/04/01/april-fools/" rel="alternate" type="text/html" title="Doggos for April Fools’" /><published>2022-04-01T00:00:00-07:00</published><updated>2022-04-01T00:00:00-07:00</updated><id>https://pedagogy.cs161.org/2022/04/01/april-fools</id><content type="html" xml:base="https://pedagogy.cs161.org/2022/04/01/april-fools/"><![CDATA[<p>The first day of April has always attracted mixed reactions from students and
staff alike, usually by those on the receiving end of a joke (though those who
give jokes can often by ambivalent, too). For those unaware, April 1st is
generally regarded as a day for people to play jokes one another and mess with
the truth a little for the sake of light-hearted fun.</p>

<h2 id="the-usual-joke">The “Usual” Joke</h2>

<p>Unfortunately, a joke that goes gets used quite frequently by course staff is
to “announce” an upcoming midterm through a logistics post, email blast, or
some other course-wide communication. I don’t exactly blame people for doing
this; it maximizes the reaction from students while (usually) minimizing the
amount of thought and creative effort that has to go into actually coming up
with and planning the joke. I’m an uncreative person, and I’d probably come up
with that too.</p>

<p>The main issue that I’ve seen is that these jokes can be moments of very, very
intense stress, even if only brief. How would you feel if you <em>actually</em> forgot
that you had a midterm, performance review, or meeting with your boss for which
you haven’t prepared at all? Probably not great.</p>

<p>Is this going to be a big deal in the grand scheme of a semester or even a day?
No, probably not. The most common response I get when I this up is that “It’s
just an April Fools’ joke!” or “Oh, they’ll know it’s a joke,” and I completely
agree with those statements. I maintain that it’s a disservice to “baby”
students and neuter every interaction we have with them for the sake of “What
if X is perceived in this way?” (Though it is not to say that the amount of
thought that should be put be zero.)</p>

<p>That said, small moments of stress add up. No matter how quickly a student
realizes that there is no midterm or how little they may care about their grade
in the course, it’s going to be at least a moment or two of panic for most
people. And even if we don’t pretend to be allergic to stress, it’s still the
duty of staff to minimize <em>unnecessary</em> stress. And to be clear: <strong>April Fools’
counts as unnecessary.</strong></p>

<h2 id="small-moments-of-fun">Small Moments of Fun</h2>

<p>I don’t think this means that April Fools’ as a concept should be abolished.
When done right, it’s quite fun! And I think it’s an opportunity for courses to
be a bit more playful than they usually get to be in student interactions. The
day happens to fall between spring break and the end of the semester, a 5-week
period when students have no breaks or or long weekends.  That’s not fun, and
it’s especially at these times that lightening the mood, even just slightly,
can be welcome and helpful. As much as small moments of stress add up, small
moments of fun relaxation add up, too! Obviously, a well-executed joke won’t
solve systemic issues within a university environment, but there’s something to
be said about giving thought and time to the small moments of fun, as well.</p>

<p>For the last few Aprils, <a href="https://cs161.org/">CS 161</a> at UC Berkeley (the
course I teach) has actively chosen to avoid the “surprise midterm” April
Fools’ jokes and, in the process, had a little more fun with it: (expected)
midterms held over Club Penguin, a legitimate invitation to breach the email
account of a TA, and a pancake-themed change of course direction. The feedback
has always been positive and, crucially, these jokes escape the “I almost had a
heart attack” comments from students who, while relieved, had one more moment
of unnecessary stress than they would have had otherwise. The full archive of
jokes we’ve run in CS 161 is available at the bottom of this post.</p>

<h2 id="the-doggos">The Doggos</h2>

<p>As for this semester, I and a couple of head TAs from other courses decided to
work together to re-theme our courses around dogs (“doggos”). This theme was
chosen… entirely at random, only because I walked past a couple of dogs
hosted by <a href="https://pawsformentalhealth.org/">Paws for Mental Health</a> (whose
work also revolves around “small moments of fun”), but it was something we had
a laugh about as course staff and started planning.</p>

<p>We each undertook a subset of four possible changes:</p>

<ul>
  <li>Re-title our course websites to reflect some “doggo-fied” title (one of my
favorites was <em>EE 120: Signals and Systems</em> becoming <em>Woofs and Tail Wags</em>)</li>
  <li>Re-title our course Piazza and make a fake announcement post</li>
  <li>Re-title our course Gradescope</li>
  <li>Add a course logo (or modify an existing one) that was somehow related to
dogs</li>
</ul>

<p>Some courses even went through the trouble of renaming every single lecture and
assigned reading temporarily (shoutout to CS 152/252A!), which was above and
beyond what we expected!</p>

<p>Our group of cross-course TAs includes a couple artists, so we asked them to
come up with logos for us. They’re really awesome, and a gallery of them is
also available at the bottom of this post.</p>

<p>On top of working with head TAs and instructors of other courses, we also
managed to convinced <a href="https://vanshaj.dev/">Vanshaj Singhania</a>, current head of
software in CS 61A, to temporarily rename the 61A Office Hours Queue to the
“DoggOH Park,” which was a nice touch.</p>

<p>I want to emphasize that jokes like these are <em>useful</em> in giving students and
staff a moment to step back from stress and laugh, but they can’t <em>solve</em> the
issue of stress. Most of the other posts on this blog are meant to address more
systemic issues within student support and equity—this post does not join
their ranks.</p>

<p>But as important as those topics are, it’s important to not disregard the
smaller opportunities we have to impact student lives. My hope is that we can
learn to cultivate fewer little moments of stress and more little moments of
fun—the little moments matter, too!</p>

<h2 id="contributors">Contributors</h2>

<ul>
  <li>Coordinator: <a href="https://ngai.me/">Nicholas Ngai</a></li>
  <li>Courses:
    <ul>
      <li>CS 10: Madeleine LaBute</li>
      <li>EECS 16A: [I genuinely have no idea who helped make this happen.]</li>
      <li>EECS 16B: Maxwell Chen, Risheek Pingili, Mingyang Wang, Stella Zeng</li>
      <li>CS 61A: <a href="https://vanshaj.dev/">Vanshaj Singhania</a></li>
      <li>CS 61B: Ethan Ordentlich</li>
      <li>CS 61C: Caroline Liu</li>
      <li>CS 70: Richard Hu, Tarang Srivastava</li>
      <li>EE 120: Anmol Parande</li>
      <li>EE 122: Jacob Yeung</li>
      <li>EECS 151: Alisha Menon</li>
      <li>CS 152: Josh Kang</li>
      <li>CS 161: <a href="https://ngai.me/">Nicholas Ngai</a></li>
      <li>CS 162: Edward Zeng, Sean Kim</li>
      <li>CS 164: Anjali Thakrar</li>
      <li>CS 170: Rahul Arya</li>
      <li>CS 188: Saagar Sanghavi</li>
      <li>CS 189: Sean Lin, Sean O’Brien, Ishaan Srivastava</li>
    </ul>
  </li>
  <li>61A Software: <a href="https://vanshaj.dev/">Vanshaj Singhania</a></li>
  <li>Artists: Seung-Jin Yang, Ashley Zhang</li>
</ul>

<h2 id="doggo-gallery">Doggo Gallery</h2>

<p><img src="/assets/posts/2022-04-01-april-fools/1.png" alt="Various dog-themed course
mascots" />
<img src="/assets/posts/2022-04-01-april-fools/2.png" alt="Various dog-themed course
mascots" />
<img src="/assets/posts/2022-04-01-april-fools/3.png" alt="Various dog-themed course
mascots" />
<img src="/assets/posts/2022-04-01-april-fools/4.png" alt="Various dog-themed course
mascots" />
<img src="/assets/posts/2022-04-01-april-fools/16b.png" alt="Various dog-themed course
mascots" />
<img src="/assets/posts/2022-04-01-april-fools/126.png" alt="Various dog-themed course
mascots" />
<img src="/assets/posts/2022-04-01-april-fools/169l.png" alt="Various dog-themed course
mascots" />
<img src="/assets/posts/2022-04-01-april-fools/170.png" alt="Various dog-themed course
mascots" />
<img src="/assets/posts/2022-04-01-april-fools/184.png" alt="Various dog-themed course
mascots" /></p>

<h2 id="april-fools-archive">April Fools’ Archive</h2>

<blockquote class="paragraph">
  <h4 id="extra-credit-opportunity-spring-2020">Extra Credit Opportunity [Spring 2020]</h4>

  <p>Hey all, considering how hectic the last few weeks have been, staff has decided
to open up an extra credit opportunity.</p>

  <p>For the next 48 hours, you have legal permission to hack me for extra credit.</p>

  <p>The amount of extra credit earned will directly correlate with the difficulty
of the hack as follows:</p>

  <ul>
    <li>Display “Ryan is bad at security” on my personal website --&gt; 1/3 of a
letter grade</li>
    <li>Find a vulnerability in Delphi, which you first reveal as a question during
our talk --&gt; <strong>2/3 of a letter grade</strong></li>
    <li>Take over my LinkedIn and add “I got fired for being being bad at security”
under the description for each job --&gt; <strong>1 letter grade</strong></li>
    <li>Hack my CalCentral and enroll me in 161 over the summer --&gt; <strong>4/3 letter
grades</strong></li>
    <li>Compromise my email and ask ERSO to terminate my TA appointment --&gt; <strong>5/3
of a letter grades</strong></li>
    <li>Own my computer and give yourself an A+ --&gt; <strong>Automatic A+</strong></li>
  </ul>

  <p>Happy hunting!</p>

</blockquote>

<p><em>Credit: <a href="https://ryanleh.me/">Ryan Lehmkuhl</a></em></p>

<blockquote class="paragraph">
  <h4 id="midterm-2-logistics-spring-2020">Midterm 2 Logistics<sup id="fnref:1" role="doc-noteref"><a href="#fn:1" class="footnote" rel="footnote">1</a></sup> [Spring 2020]</h4>

  <p>In light of the campus directive that prohibits live Zoom proctoring, we have
changed the format of Midterm 2. It will now be held online at 5:00pm PST,
April 6 and proctored through Club Penguin. Please read this entire post
carefully, as it contains many important rules we expect everyone to follow to
ensure a fair midterm for all.</p>

  <p><strong>Before the midterm</strong>:</p>

  <p>Please create a penguin with a name that we can easily identify you with. We
understand that some common names may be taken, so if you cannot create an
identifiable name, please make a private post with your username before the
exam starts.</p>

  <p>Examples of good penguin names: evanbot, evanbot161, evan_bot</p>

  <p>Examples of bad penguin names: XxX__bot_of_the_evan_19340328__XxX,
hack_me_daddy_evan</p>

  <p>Day of the midterm:</p>

  <p>Please join the Antarctic server and congregate before 5:10pm PST at the Dojo.
We recommend logging in once before the exam so you don’t need to search for
the Dojo on the day of the exam. TAs have found that the ski lift may be a
useful shortcut if you’re running short on time.</p>

  <p>If you arrive early, please be mindful of other test takers before the exam
starts. In particular, <strong>snowball fights are not allowed at any time</strong>. Any
student caught starting a snowball fight may be reported for academic
dishonesty and/or reported to the Club Penguin moderators.</p>

  <p>Each student is allowed one cheat puffle to consult during the exam. The puffle
must be raised by yourself - you are not allowed to gift a cheat puffle to
another student. Please make sure your puffle is well-fed before the exam. We
will not be allowing any feeding during the exam and are not responsible for
any puffle deaths that occur during the exam.</p>

  <p>The exam is multiple-choice and will be administered through Card-Jitsu. At
5:10, a proctor will direct you to a Card-Jitsu game, and a PDF of the
questions will be posted on the course website. To answer a question, play one
of the following cards:</p>

  <ul>
    <li>Play a snow card to choose answer A</li>
    <li>Play a fire card to choose answer B</li>
    <li>Play a water card to choose answer C</li>
  </ul>

  <p>Using power cards against your proctor is prohibited. Any student caught using
a power card will be reported for academic dishonesty and/or reported to the
Club Penguin moderators.</p>

  <p>The exam ends at exactly 6:30pm PST. All penguins must stay at the dojo until
all exams are confirmed to be received, at which point you are allowed to
return to your igloos. Please remember to take your cheat puffles with you.
Course staff is not responsible for feeding any cheat puffles left behind.</p>

  <p>We understand that this exam format is new for everyone. If you have any
questions, please post a follow-up.</p>

</blockquote>

<p><em>Credit: <a href="https://peyrin.github.io/">Peyrin Kao</a></em></p>

<blockquote class="paragraph">
  <h4 id="welcome-to-eb-101-the-beauty-and-joy-of-pancakes-spring-2021">Welcome to EB 101: The Beauty and Joy of Pancakes [Spring 2021]</h4>

  <p><a href="https://cs161.org/">EB 101: The Beauty and Joy of Pancakes</a><br />
Spring 2021<br />
Instructor: EvanBot<br />
<a href="https://cs161.org/staff.html">and a team of talented TAs</a></p>

  <p>Thank you for your interest in EB 101. This is a light, fluffy 4-unit course
designed to introduce you to the many wonders and practical applications of
pancakes.</p>

  <p>We will be using Goolang for the course - if you have time at the beginning of
the semester, please go through some tutorials to get yourself familiar with
the language.</p>

  <p>Syllabus:</p>

  <table>
    <tbody>
      <tr>
        <td>Week 1</td>
        <td>What are pancakes?</td>
      </tr>
      <tr>
        <td>Week 2</td>
        <td>Introduction to stack</td>
      </tr>
      <tr>
        <td>Week 3</td>
        <td>Stack devouring and defenses against choking</td>
      </tr>
      <tr>
        <td>Week 4</td>
        <td>Hash and breakfast combos</td>
      </tr>
      <tr>
        <td>Week 5</td>
        <td>Midterm: Pantesting</td>
      </tr>
      <tr>
        <td>Week 6</td>
        <td>Symmetric and asymmetric garnishing</td>
      </tr>
      <tr>
        <td>Week 7</td>
        <td>Intro to batter &amp; cookies</td>
      </tr>
      <tr>
        <td>Week 8</td>
        <td>Pancakes integrity and waffle-in-the-middle</td>
      </tr>
      <tr>
        <td>Week 9</td>
        <td>Public recipe exchange + digital gift certificates</td>
      </tr>
      <tr>
        <td>Week 10</td>
        <td>Spring Break</td>
      </tr>
      <tr>
        <td>Week 11</td>
        <td><a href="https://en.wikipedia.org/wiki/Waffle_House_Index">Waffle House Index</a> and denial of service<br />Optional: Field trip to Waffle House</td>
      </tr>
      <tr>
        <td>Week 12</td>
        <td>Syrup Injection</td>
      </tr>
      <tr>
        <td>Week 13</td>
        <td>Special Topics:<br />Topic 1: <a href="https://www.youtube.com/watch?v=z_3JRYHvBdU">How cookie stuffing denies space for pancakes</a><br />Topic 2: Mechanics of Non Fudgeable Tootsies<br />Topic 3: Ask EvanBot Stuff</td>
      </tr>
      <tr>
        <td>Week 14</td>
        <td>NOPancake week</td>
      </tr>
      <tr>
        <td>Week 15</td>
        <td>Final Exam: Bake your own pancake</td>
      </tr>
    </tbody>
  </table>

  <p>Pizza:</p>

  <p>If you have a question, the best way to contact us is via <a href="https://piazza.com/berkeley/spring2021/cs161">the class Pizza
oven</a>. The staff (Bot and TAs)
will check the oven regularly.</p>

  <p>Collaboration Policy:</p>

  <p>Bot believes that most students can distinguish between tasting and eating.
Sharing a subtle point about stacking or garnishing is an interaction that we
encourage, but you must write your recipes strictly by yourself (with your
partner on projects). You must not ask for a pre-made stack on Stack Exchange
or other online sites; although you may ask for help with conceptual questions.</p>

  <p>Ethics:</p>

  <p>Bot will be discussing batters in this class, some of them quite sticky. None
of this is in any way an invitation to eat them raw other than with explicit
approval of recipe owners and the FDA. The existence of edible cookie dough is
no excuse. These issues concern not only professional ethics, but also UCB
policy and state and federal law. If there is any question in your mind about
what conduct is allowable, contact the instructors first.</p>
</blockquote>

<p><em>Credit: EvanBot</em></p>

<blockquote class="paragraph">
  <h4 id="welcome-to-doggo-161-spring-2022">Welcome to DOGGO 161! [Spring 2022]</h4>

  <p>Hello!</p>

  <p>Welcome to DOGGO 161: Defense Against the Feline Arts! While we may not have
the full semester remaining ahead of us, we’re excited to learn about attack
and defense systems, cognitive memory-based security, spellcasting, and
doggogram- and barkstream-based attacks!</p>

  <p>We have been made aware that some of you thought you were enrolled in another
course titled CS 161. The Cats and Sciences department has informed us that
they are offering no such course, and we suspect that feline operatives from
Sphynxford Junior College are targeting students at UC Barkeley using memory
safety attacks, to increase their university standing. We are working closely
with officials to discuss the best way to respond.</p>

  <p>If you’ve been affected by this, we hope you’ll be able to quickly catch up
with the course content. The current website has the current, up-to-date
schedule and syllabus. We recommend you look over the content and let us know
if you have any questions!</p>

  <p>Looking forward to a great semester with you all!</p>

  <p>-DOGGO 161 staff</p>
</blockquote>

<p><em>Credit: <a href="https://ngai.me/">Nicholas Ngai</a></em></p>

<h2 id="footnotes">Footnotes</h2>
<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:1" role="doc-endnote">

      <p>We actually had a Midterm 2 coming up! So this was not intended to cause
stress with a “surprise” midterm. <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name>Nicholas Ngai</name></author><category term="culture" /><summary type="html"><![CDATA[A fun joke to vent some stress for students and staff alike.]]></summary></entry></feed>