CSC151.01 2014F, Class 56: Wrapup
=================================

_Overview_

* Preliminaries. [10:00-10:05]
    * Admin.
    * Upcoming Work.
    * Extra Credit.
    * Questions.
* The subject matter(s) of the course.
    * Review broad topics [10:05-10:10]
    * Contribute [10:10-10:30]
    * Sam comments [10:30-10:35]
* Course evaluation. [10:35-10:45]
* Final comments. [10:45-10:50]

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

### Admin

* Thanks to our mentors!
* Final PSA for this class.
* I need a volunteer to take EOCEs to Science Division Office.
* Continued MathLAN problems mean that most, but not all, grades are
  entered.  For those receiving grades after class, your ultimate grade
  will not be lower.

### Upcoming Work

* Course evaluation (last part of class)
* Optional final (Tuesday at 9 or Friday at 9; Food!)

### Extra Credit Opportunities

#### Academic

#### Peer Support

* Evan's radio show 5pm Friday nights on KDIC
* Donna's radio show Sunday midnight on KDIC (maybe)
* Jazz Band, Dec. 13, 8pm Gardner
* Monday night "With Toy Trains" study break with Noteworthy

### Additional Events

* Looking ahead: We do not have classes on MLK day, but we do have
  campus events.  You should consider participating in those events.

### Questions

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

We're talking about these issues because five of the six questions
ask you to think about "the subject matter of the course".  I think it's
worthwhile to talk to you a bit about how you might describe such a thing.

Review broad topics [10:05-10:10]

### Scheme

Scheme is a language for expressing programs/algorithms.

* Local bindings and let
* Ways to sequence values
    * Compose, `o`
    * Nesting
    * `let*`
    * Continuations
    * `when`
    * A sequence of expressions in the body of a procedure or
      `let` statement.
* How to do recursion in Scheme
    * letrec
    * named let
    * ...
* Types
    * Boolean values are cool (George Boole rocks!)
* Conditionals
    * if, cond, when
* Higher-order procedures
    * You can take procedures as parameters or return procedures
    * "The one on the quiz"
    * `map`
    * Constructing other procedures
* We learned like 2000 different procedures.  yay vocab!
* You can learn a whole lot of CS with just one language.

### Software Design

When we think about software design, we think about how to write better
programs.

* Identify preconditions and postconditions.
* Check preconditions.
* Test your programs using a testing framework, like Rackunit.
* Be concise.
* Objects.
* We are sometimes more efficient coders if we write helper functions
  to do some of the work.  Helpers also make our code more readable.
* Creativity - There's more than one way to make a sandwich.
* Efficiency - Bad design means that programs run a *long* time.  The
  folks who built our Web advisor software need to learn that.
* Ordering is important.
* Be careful.
* Scope: Limit how data can be accessed
* Higher-order-programming

### Computer Science

CS is the study of *algorithms* and *data structures*.

* The components of an algorithm
    * Variables and Parameters (two kinds of named things)
    * Subroutines (another kind of named things)
    * Repetition
    * (Input and output)
    * Conditionals
    * Sequencing
    * *one more that you should think about*
* Recursion - We can define a procedure in terms of itself.
* Objects.
* Ethics of building software and computing: Roles of free software.
* Relationships between iteration and recursion as ways to repeat.
* The power of randomness.
* "Great ideas in CS"
    * Data structures: Linked lists
    * Algorithms: Sorting algorithms (insertion, selection, merge)
    * Searching algorithms (binary, sequential)
* Not all problems can be solved algorithmically

### Image Making

We tried to help you think differently on what goes on "under the surface"
of an image.

* Model: `image-compute!`
* Turtles are a really slow model.  (So is image-compute!)
* GIMP!
    * By hand
    * Programatically
    * It's possible to design really cool software that's really not
      intuitive.
* There are many ways to achieve the same result; think about which
  one is likely to work best.

### General Skills / Ideas

* Group work - How to interact with other people when working on projects.
* Thinking on your feet.
* Careful reading/editing.
* Benefits of reflecting in advance and retrospectively.
* Time management (aka "how to deal with way too much work and an
  expectation that you can fit meetings with other people into a Grinnellian's
  schedule)
* Know about laws, such as academic honesty standards.

### And Beyond

* It's important to make friends and you can do so while working together.
* Effort and time do not necessarily correlate with success.
* "Save Early and Often"
* "There's more to life than CS" (or any academic discipline)
* "Computers are Sentient and Malicious"
* "Be full of care."
* It's always okay to ask for help.  (And know that you're not alone.)
Your turn [10:10-10:30]
* "Sleeping, that's important!"
* You have amazingly awesome people around you.  Learn what they do and
  support them in it!
* The College has really cool academic talks and other things.  Take advantage
  of them!
* Eat, bubala, eat!
* Please think carefully about how you relax.

* Three minutes with your partner: Five things to add.
* We'll get as many down as we can.

My turn [10:30-10:35]

* Course evaluation. [10:35-10:45]
* Final comments. [10:45-10:55]

Course evaluation [10:35-10:45]
-------------------------------

Final comments [10:45-10:50]
----------------------------

