CSC151.02 2015S, Class 54: Recap
================================

_Overview_

* Preliminaries.
    * Admin.
    * Upcoming Work.
    * Extra Credit.
    * Questions.
* The subject matter(s) of the course.
* Topics within each subject matter.
* Looking beyond the class.

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

### Admin

* Sit anywhere, but be prepared to work with the person next to you.
* If you can't be in class on Friday (e.g., two teams are traveling), 
  please let me know and please try to fill out the evaluation form today.
    * Please hand write answers to the following two questions at the end
      of the form: 
        * Q7: The one thing that most helped my learning was ...
        * Q8: One thing that would have helped my learning more is ...
    * Please fill out the RISC survey at
      <https://survey.grinnell.edu/se.ashx?s=251137455F0C97CF>
* Review session Thursday at 8pm.  No daytime review sessions.
* I heard enough arguments that the misdeeds of a few should not cause 
  harm to the class as a whole that I will be including grades for exam 
  2 in my computation of your grade in the course.

### Upcoming Work

* Exam 4 and its epilogue (for those of you with extensions)
* Optional final.

### Extra Credit Opportunities

#### Academic 

* Thursday Technology Studies Extra: An Insider's Look at the Music 
  Industry: What I Learned from my Internship on the Digital Team at 
  an Artist Management Firm.  4:30, Science 3821.

#### Peer Support (Afternoon Section)

#### Miscellaneous

* SGA State of the College talk tonight, 8:30 p.m. in JRC 209.
* Open campus forum on ARH/Carnegie, Monday, 3:00-4:30 p.m. in Harris
  Concert Hall.

### Other Good Things (no extra credit)

* Puppies and Pancakes on Sunday.
* If you have a mother or mother figure, please wish that person a
  happy mother's day on Sunday.

### Questions

The subject matter(s) of the course
-----------------------------------

* Problem Solving.
* Computer Science: Algorithms and Data Structures.
* Scheme.
* Computational Image Making.
* Program and Software Design.
* General Thinking Skills.
* And Beyond.

Topics within each subject matter
---------------------------------

### Problem Solving

* Express the problem formally.
* Break problems into smaller problems.
* Use computers to do the heavy lifting.
* You can approach the same problem in multiple ways.
* Work through examples before trying to solve the general problem.

### Computer Science: Algorithms and Data Structures

* The problem of sorting.
* Famous sorting routines: Selection, Insertion, Merge sort
* Six basic algorithm components.
    * Named values.
    * Sequencing.
    * Conditionals.
    * Repetition.
    * Subroutines.
    * Basic building blocks.
* Recursion - A way of thinking about repetition
* Higher-order programming: Functions as inputs to and outputs from
  other functions (map, compose, l-s)
* Ways to organize data: Lists, trees, vectors
* Searching and famous searching routines
* Analyze algorithms for efficiency

### Scheme

* Vocabulary: A lot of different procedures
* Basic building blocks: Sam's weird irgb color model.
* Different models of procedures
    * Local vs. global
    * Anonymous vs. named
    * Anononyms with lambda, l-s, o, etc.
* Booleans and predicates
* Syntax!  "Match parentheses"

### Image Making

* Turtles!
* Gimp Tools
* Drawings as values (stretchable colorforms)
* image-compute: Images as functions from positions to colors
* image-set-pixel and image-get-pixel
* Different techniques are appropriate for different situations.

### Program and Software Design

* Know your programming environment.
* Document!  Helps other people understand what your code is supposed
  to do.  Can make it clear who built the code.  Preconditions provide
  a contract, making your life as programmer easier.  Makes it easier
  to read your code later.  Helps you think about the problem.
* Don't repeat identical expressions; it's inefficient
* Break things into smaller problems!
* Test!

### General Thinking Skills

* Handling unexpected questions
* Cite!  And general issues of academic honesty
* Ask for help!  
* Incremental problem solving
* The importance of thinking about problems in different ways
* You can't get away from math
* Collaboration
* Dealing with hopelessness and worthlessness (better: "There are
  times to say 'more work on this isn't worth my time.'")
* Dealing with stress

### And Beyond

* Care about the people around you
* Sometimes it is worth grinding it out.
* Be adaptable
* The ideal goal of a liberal arts education is to be able to bullshit
  compellingly and clearly about any topic
* Sometimes you need to step away from your work.  "There's more to
  life than CS"
* Take an active role in your learning; don't rely on your professor
  to teach you everything
* Your classmates are awesome; celebrate what they do
* Have fun!
* Eat, bubula, eat

Looking beyond the class
------------------------

