"Teach The Topic" Exam

For your 'midterm exam' grade you will be doing a take-home exam.  You will receive the exam (in printed form), be given a limited time to complete your work (the due date will be listed on the main page for this course), and will then hand in your work (on paper) to be graded. 

However, your are strongly, strongly encouraged to not think of this as an exam.  Instead, think of it as teaching someone else about each question's topic(s) by writing a short essay.  To be clear: for each question on the exam you will  develop an answer (typically either a small program or example output from a program that's given to you) then you will thoroughly explain both why your answer works AND the concepts that your answer uses.  Your explanation must be EXTREMELY thorough - someone who's passed 115/116 (but hasn't taken 142 yet) should be able to read through your explanation and have all their questions answered by your writing.

Again, think of this as teaching all the concepts, ideas, and knowledge needed for someone else to not just solve similar problem, but to be able to fully explain their solutions to those similar problems.

As such, you can think of the work you do for each question being divided up into two parts: your source code/program output/etc that the question asks for, and your explanation thereof.  Here are the basic 'rules' for each of the two parts:

  1. Your source code/program output/etc that the question asks for (aka "your solution")

    1. When all is said and done your source code/program output/etc will get you no points by itself.  Since you've got a week and can use Visual Studio simply providing the solution to the question doesn't really demonstrate any knowledge.  At the same time, you need a correct solution in order to demonstrate your knowledge of the concepts (you don't get credit for doing a good job of answering the wrong question). 
      Think of a correct, efficient solution to the question as an 'admission ticket' - it gets you in the door, but that's it.
    2. You're encouraged to use Visual Studio to help you implement programs and/or understand what output a program produces and why

      1. You're specifically being given the exam questions on paper so that you'll have to type this stuff into VS by hand.  Typing stuff in by hand will force you to look at the material in detail.
    3. WRITE OUT YOUR SOURCE CODE SOLUTION (OR YOUR OUTPUT FROM THE PROVIDED PROGRAMS) BY HAND ON PAPER

      1. If you don't write out the  source code / output by hand then you will get a zero for that question!
      2. This is done specifically to help reinforce your learning.  The repetition will help you remember (and subsequently, understand) the programs that you're writing.
      3. Failure to write out the source code or program output on paper in your own handwriting will get you a zero for that answer
      4. Make your handwriting legible.  If I can't read it you don't get points!
      5. Did I mention that not writing out the source code or program output on paper in your own handwriting will get you a zero for that answer? 
  2. Your explanation of your solution
    You're going to have to not just correctly provide a solution for the question you must also explain what's going on - how your program works, and why.  This will be the focus of the grading - you will need to provide thorough, clear explanations that demonstrate a solid knowledge of all the important concepts your soution uses.

    1. Without a clear, concise, intuitive, prose explanation you will get zero points for the question. 
      Since you can use Visual Studio to help you figure your solution to the question you won't be getting points for that in and of itself.  So while a correct answer is necessary, it isn't even close to sufficient for full credit.
      1. While spelling and grammar are important, the focus is on clear presentation of good ideas.  You're expected to fix all errors that your spell-checker shows you (i.e., no red lines under words) and your grammar is expected to good enough to be readable, but what's most important is that you have good ideas - that you clearly understand what's going on, and that you can clearly explain what's happening and why. 
      2. In particular: students who do not speak English natively should focus on good, clear ideas, and then just do as well as you can on the spelling/grammar.
    2. You need to demonstrate that you understand all the concepts involved in each solution. 

      1. Generally speaking you're only expected to explain substantial / important concepts that we've looked at in this class. A good rule of thumb for determining whether to explain something is that the more in-class time (for hybrid students), videos (for everyone) and exercises focused on a concept the more important it is that you explain it thoroughly.

        For example, if we didn't spend much (or any) time talking about the "using System;" statement at the top of your C# program then you don't need to explain it.  If we did spend a lot of time on arrays then you should thoroughly explain your usage of the array in your solution.

      2. It's recommended that you organize your writing around each concept (as opposed to writing out a line-by-line explanation of the code and trying to explain each concept as you go).

      3. If you've explained a concept in a prior answer you can refer back to that question rather than repeating yourself again.

        For example, if your used Console.WriteLine in question #2 (and explained how output works there) and also in question #5 you can write something into question #5 making it clear that your solution to question #5 uses console output and to please refer to your explanation in question #2 for more details.  If your solution to question #5 used Console.Write you might refer to question #2 for general information about output, then describe in detail how Console.Write differs from Console.WriteLine (and why you're using one rather than the other in you solution to question #5).

    3. While it's ok to type out your explanations (and ONLY your explanations - not the source code or program output), I encourage you all to use equations, pictures, and anything else that helps to clearly explain what's going on.  Because of that it may make more sense to write out your explanations by hand.

      1. You can write out some explanations(s) by hand, and type out (and then print) other explanations.
    4. You're not required to produce any particular length of writing. 
      BUT be aware that the instructor is expecting to get back an explanation that's about 1/3 to 1/2 of page for each concept (typed, single-spaced, with the 'normal' font for MS Word - 12 point Times New Roman or 11 point Calibri) .  Going substantially under (or over) this is probably a sign that you either haven't explained it well enough or else are including extra, irrelevant, 'padding' verbiage.
    5. Make sure to be very, very clear which question you're explaining.
      You must print out a 'cover sheet' for each question; there's a box in the top-right corner to put the question number.
    6. There may be some suggestions about what to include in your explanation at the bottom of this document.

Again, you need to provide a correct, efficient solution to each question, and then provide a thorough, thoughtful, informative explanation of all the concepts that your solution uses.

Here are other, miscellaneous instructions for the exam:

  1. You are NOT allowed to work with anyone else on this.  You need to write up your explanations on your own.

  2. How to assemble your exam for hand-in

    1. All your work needs to be handed in ON PAPER. 
    2. Print out the exam cover sheet (note that there's one for BIT 142, and a separate one for BIT 143), and make sure that this page ends up at the top of the stack of pages.
      1. PLEASE put the staple in the box at the top-left.  I'm going to spend hours grading these and it helps if I can actually see your work easily!
      2. The right-hand column is where the instructor will accumulate the grades for the exam (for easy reference while entering them into Excel).  There may be a rubric on the page which deals with exam-wide issues (such as: "Is the overall appearance of your work professional?")
    3. Please arrange your answers in the same order as the exam questions (e.g., #1, #2, #3, #5, #7, #8)
    4. For each question:

      1. Print out the per-question cover sheet and make sure that this page ends up at the top of the stack of pages for this question.

        1. Put your name on this just in case it gets separated.
        1. Write the question number (from the exam) in the top-right corner. 
      2. You pages must be placed behind this page, in the order that you want the instrutor to read them. 
      3. You'll need to read through the per-question rubric itself for the per-question cover sheet to make sense.  The idea here is that the per-question cover sheet is a place to write your answer and where the instructor can write in feedback, while the rubric explains how the grading is actually going to be done.
    5. Professional appearance
      Make sure that your work is professional in appearance.  If you have questions please ask the instructor well before the due date.  A couple of common errors to watch out for here include:

      1. LEGIBLE HANDWRITING
        You've got as long as you need to write this out, so write everything clearly and readably.  If you have to, print out another copy of the per-question cover sheet and rewrite your unreadable answer on this new, fresh copy in a legible manner.
      2. No spagetti edges
        If you hand-write supplemental pages make sure that the edges are neat and clean.  On the one hand it's not really a big deal - it's the quality of your work that's important.  On the other hand nothing says "elementary school work" like spaghetti edges - practice now before you lose a job interview to something dumb like this!
  3. The due date for this is listed on the main page for the course.


This is a list of all the documents used for this 'Teach The Topic' style take-home exam

  1. This document (the description of the exam)

  2. An example of how to answer a sample question

  3. An example question, for you to practice answering yourself.

  4. Documents for the actual exam

    1. Exam cover sheet

    2. Checklist of stuff to double check
      I recommend doing this after finishing each question; definitely do it before handing in the exam

    3. Per-question rubric (draft for the practice question)

      1. Per-question cover sheet

      2. Expecting about a page, typed, single-space, worth of explanation (+ / -, but I'm expecting a good 1/3 of a page for each concept, minimum)

    4. Per-question rubric and answer page (final version for the actual exam)
      Note: This is the first time that I've tried using a rubric to evaluate an exam (as opposed to a grading key and/or technical checklist) so you should anticipate improvements and revisions being made to the rubric before it's used on the exam.  That said, it's my intention to preserve as much of the 'draft' rubric as possible -


Stuff you probably want to include in your explanations

(Based on question # - item 1 below talks about question #1 in the exam).

For each of the below points:

  1. I would strongly suggest that you explain this line by line, walking through all the iterations of the program
    1. Make sure that you explain clearly how modulus works - you might want to draw out the 'long division'  picture of how you arrive at your answer. 
    2. Make sure that you're very clear about how the division works, the exact value it produces, and why.  You may be able to make use of the long division that you did for the modulus operator
  2. Walk through this code (in your clear, intuitive, English explanation) explaining why each line of the program is executed.
  3. Mostly you'll need to be very clear about why you're choosing the values that you're choosing.  On the last part, for example, explain clearly why you chose the number that you're modding by, and why you choose the number to subtract.
    1. For parts 1 and 2 use the description in the text at the top of the page and IGNORE the comments in the code.  Generating numbers that the comments ask for you will get you zero points back.
  4. Make sure that it's clear what each line does (mechanically-"This line allocates an array of n integers") and also make it clear why you put each line in ("We need to first create the array here so that we can fill it with the specified values later on")
  5. Same as #4
  6. Same as #4
    1. Also: Make sure to clearly explain how the division works.  Explain what your original error was (if you made this error), and how you fixed it. 
      1. "I'm using a double as a variable" is not a sufficient explanation - explain how that changes the division,
    2. Also: Clearly explain how the parameters work - why you chose the type you did, where the values come from in Main, and why this is useful (i.e., what advantage do parameters provide, and how do we use that advantage here).  Why not just ask for user input in your method?
    3. Also: Clearly explain the return value - why you chose the type you did, where the return value comes from, and why it is not sufficient to simply print out the answer.
  7. Same as #4
  8. Same as #4
    You will need to hand-write this one (the entire thing)

  1. EXAM TODO

    1. Double-check that the 'You should probably include' stuff is correct

    2. Should I remove the 'find and fix' question(s)?

    3. Should I have a single page for the per-question rubric, and then a simple grading summary to actually be a header page?

    4. Feedback

      1. Clear rubric?  Clear how to apply?

      2. Any items for checklist?