CSC151.02 2013F, Class 55: Wrapup
=================================

_Overview_

* Preliminaries.
    * Admin.
* The subject matter of the course.
* Course evaluation.

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

### Admin

* Forms!  
    * Permission to share work
    * EOCEs
    * Course Mentor Assessment
* Yes, I expect you to be in class on Friday.  I will provide bacon, spinach,
  and some sweets (maybe donettes).  I will also return exams and give grades.
* Upcoming extra credit opportunities:
    * CS Extras Thursday at 4:30: Mediascripting.
    * CS Table Friday: The Reactive Manifesto.

The subject matter of the course
--------------------------------

* Tangential matters
    * Alex Mitchell (or at least his grade)
    * Should _____ major in CS?
* Useful, but not central
    * Working with a different OS (there will be more)
* Computer programming, using functions
    * Representing algorithms
* Problem solving
    * In very restricted domains
    * While thinking about types
* Store data in structures and maniplate structures
* The Scheme programming language

### Areas

* General program components
* Scheme
* Functional problem solving
* Computer science
* Broader skills
* World view

### General Program Components

* Named values
* Procedures
* Conditionals
* Looping
* Sequencing of operations
* Comments - Documentation is important
* ...

### Scheme

* ()

### Functional Problem Solving

* Immutable data
* Pure functions
* Anonymous functions
* Functions as inputs to other functions (e.g., `map`)
* Functions as results of other functions (e.g., `l-s`)
* ...

### Computer Science - Algorithms and Data Structures

* For algorithms to be successful, the goals need to be clearly
  articulated
* Recursion
    * For algorithms
    * For data design (lists, numbers, trees)
* The parts of an algorithm
* Famous algorithms: Binary search, Sorting algorithms
* Famous data types: lists, trees, vectors
* "There's more than one way to grin a cat"
    * Designing a successful algorithm requires some creativity
    * And there is sometimes one "best" way to solve a problem
* Three broad ways of thinking about algorithm design
    * Imperative - Changing state
    * By sending messages to objects - Turtles and objects
    * In a pure functional style
* At least two ways to approach data
    * List - Extendible, but expensive
    * Vector - Mutable, fast, but fixed-size
    * ...
* It's important to think about algoritihms already designed
   * Correctness
   * Efficiency
* ...

### Broader Skills

* Working in a team
* Thinking on your feet
* General approaches to problem solving
* When you don't know what to do
    * Ask for help!
    * Don't bash your head against the wall
    * Google it (which usually fails in Scheme)
* Articulate things formally
* Patience and anger management
* Don't try to do everything all at once
* ... 

### World View

* Have fun! **
* Computers are sentient and malicious!
* There's more to life than CS.
* Care about each other, which includes learning their names.

### And Beyond

* Um - The universal message of "give me ammoment to think"
* We can design algorithms that do creative things
* And we can apply algorithms creatively
* Some people care a lot about minute formatting details
    * spaceshelpaloti nr eadabi lity
* Some people care a lot about academic honesty
* Sam may not be sentient, but he's certainly malicious

Course evaluation
-----------------

