CSC151.01 2015F, Class 55: Recap
================================

* New partners (for the last time)

_Overview_

* Preliminaries.
    * Admin.
    * Upcoming Work.
    * Extra Credit.
    * Questions.
* The subject matter(s) of the course.
* More about the subject matter(s).
* Looking beyond the course.

Preliminaries
-------------

### Admin

* Please make sure to attend class on Friday this week.  
* Review sessions Thursday at 10 a.m., Thursday at 8 p.m., Sunday at 8 p.m., 
  Monday at 8p.m.  A chance to ask about the sample final (except for nest).
* Another sad story.
* Talking about the exam ...

### Upcoming Work

* No more readings!
* No more lab writeups!
* Exam 4 cover sheet due AS ARRANGED
* Exam 4 epilogue due AS ARRANGED

### Extra Credit Opportunities

#### Academic

* Any visit to the current show in the Faulconer gallery.
* "Summer Opportunities in CS", Thursday at 4:15 p.m.
* Kington's "In the Loop" presentation Thursday at 11 or 2.
    * I don't know why he is talking about downtown Chicago.

#### Peer Support

* Women's Basketball vs. Carroll, Saturday, Dec. 12 at 3:00 p.m.

### Questions not about the Final

_When will you give us tentative grades in the class?_

> People who completed exam 4 on Monday night will get tentative grades
  by Friday morning.  Everyone else will get them later.

_Will you estimate my grade with different outcomes?_

> You should be able to write a program or expression to do that.  
  But yes, I can give you potential grades.

_What do you do about borderline people (between 93 and 94, or 89 and 90
 or ...)?_

> I wait until I see the grade distribution.

> You help yourself with extra credit.

_If we took the extension, will we get the grade before the final?_

> I'll try.

### Questions on the Final

_What will the final be like?_

> Four questions.  Think of it as a really really hard quiz.

_What will the questions be about?_

> Almost certainly lots of recursion.  Probably something to do with
  sorting.  Probably something to do with searching.  Probably something
  to do with code analysis or efficiency.  Possibly vectors, image making,
  turtles, files, ....

_What kinds of questions will you ask?_

> Write a procedure to do something.  What does this procedure do?  How 
  many times is this function called for the following inputs?  Fix this
  procedure.  What output will you get for the following call?  Draw
  this.  Write a procedure/expression to make this drawing.

_Do we have to memorize all of the 300+ procedures?_

> No.  If you give a procedure a reasonable name and it's something you
  can reasonably expect to exist, it should be fine.  

_Do we have to get perfect Scheme syntax?_

> As close as possible.  A few misplaced parens are okay.  Forgetting
  large numbers, or using them inappropriately is probably not okay.

_Do we get to use a computer?_

> No.

_Should our set of notes be handwritten?_

> Yes.

_Should we go over the self checks from the readings?_

> Yes, because they verify that you understand the basic concepts.  But
  the questions on the examination will likely be harder.

_Do we have to tell you if we are taking the final?_

> Yes.  But it's okay if you tell me when you show up.  I'd prefer to
  know in advance so that I make enough copies.

The Subject Matter(s) of the Course
-----------------------------------

Summary:

* Problem Solving.  
* Computer Science.
* Scheme.  
* Program and Software Design.  
* General Thinking Skills.  
* And Beyond.  

### Problem Solving

* Break big problems down into smaller problems.
* Abstraction is your friend.
* You need to approach a problem within its context.  What are the
  basic things that make sense/that you can do?
* Don't come up with a big solution at once; test ideas along the way.
* Get ideas from multiple people.  Work together.
* Don't get stuck on one approach; try multiple approaches.
* Understand the problem before trying to solve it.
* Repetition is a convenient tool.
* The order in which you apply instructions is super important.

### Computer Science: Algorithms and Data Structures

* You can organize information in a list and there are some benefits
  to doing so (e.g., you can easily recurse over lists)
* UM - Understand modes of searching for information, e.g., binary search
  and linear search.
* Basic tools: Conditional, repetition/recursion.
* Basic parts of algorithms: Repetition, Conditionals, Variables/Params,
  Procedures/subroutines, Input and output, Sequencing, Basic operations
* Names of old computer scientists from the computer names.
* The organization of your information can affect how easy it is to
  process it.
* Test!
* In designing algorithms, think about edge/corner cases.

### Scheme

* You can name local variables with `let` and `let*`.

### Software Design / Building Programs

* Testing is important.  Try to break things so that someone else doesn't!
* Write general code to make it more versatile.
* It's okay to change the specs.
* Higher-order procedures allow you to write very general solutions.
* Document! and Comment!
* Think about resource usage/efficiency.

### Modes of Making Images 

* image-compute
* image-variant
* turtles
* drawings as values
* GIMP tools

### General Thinking Skills

* Respond to unexpected questions
* UM means UM Matters
* Sometimes you need to think unconventionally
* Solving problems step by step.
* How to break things.
* Working with others
* Patience
* Read (close reading of technical matters)
* Sometimes we have to phrase things carefully, and math is good for that.
* If at first you don't succeed, try lots more times.  But after ten minutes,
  ask for help.
* How to deal with awesome amounts of stress (side effect).
* Time management (side effect)
* Talk out ideas or write them down.  Your potted plant is your friend.

### And Beyond

* Sarcasm is a positive force in the world.
* The folks here are awesome.  Support them in what they do.
* Students get distracted when you give them origami frogs.
* Don't assume that you can do it by yourself.  Ask for help.
* Computers are sentient and malicious and will attempt to damage your
  work.  Save often.  Email yourself a copy.  Write it down.
* Use Mentors
* Say Thank You
* Don't get discouraged.
* Think about your thinking.
* There is more to life than CS (or any academic discipline)
* Get enough sleep, even if Sam doesn't.
* Enjoy what you do.  Laugh!
* Care about the people around you.
