---
title: Eboard 41  Wrap Up
number: 41
section: eboards
held: 2018-05-09
link: true
current: true
---
CSC 151.01, Class 41:  Wrap Up
==============================

_Overview_

* Preliminaries
    * Notes and news
    * Upcoming work
    * Extra credit
    * Questions
* Comments on the final
* The subject matter(s) of the course
* Final PSA
* Final comments

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

### News / Etc.

* Sit where you'd like
* Today is my last day in CSC 151 this semester.  (My son and the HS band
  are playing at the Iowa Bandmasters' Association meeting on Friday.)
    * You are still expected to show up for class on Friday.  Our mentors
      *will* take attendance.
    * Friday: Fill out evaluation forms (required).  Go over problems
      from the final (optional).
* We have review sessions for the final on Wednesday of finals' week.  
  Details forthcoming.
* Some people received necessary extensions on the exam.  Please do not
  discuss the exam with anyone until you get them back.
* I do intend to get all grades to you by Tuesday of finals' week.
* Thanks for the recommendations for next semester's students.  They
  range from two words ("Start early") to extended paragraphs.
* Reminder: Sunday is Mother's day.
* Thank you S*y.

### Upcoming work

* Cover sheets due NOW.
* Epilogues due TONIGHT.
* Final: Thursday or Friday afternoon of Finals Week (2pm-5pm)
  in this room.

### Extra credit (Academic/Artistic)

* CSC 322 project presentations, Friday, 2-4 p.m. in 3821.
* Quantifying the effects of skill-based immigration - a two-country approach.
  TODAY at 4:15 in JRC 209.
* The Data Science Pipeline in Action: From Lung Cancer to Customer Churn.
  Friday at 4:15 in JRC 209.
* Networks and Foreign Policy Analysis: Relations, position and structure 
  within the Clinton State Department.  Tuesday at 4:15 p.m. in JRC 226.

### Extra credit (Peer)

### Extra credit (Recurring peer)

* Listen to KDIC Wednesdays at 6pm - Witty banter with other 
  personalities and/or co-host.  Also Indian, Arabic, and Farsi music.  
  (Up to two units of extra credit.)
* Listen to KDIC Thursday at 7pm - Classic Rock.  (60's and 70's)
* Peer editing with SS.  Talk to SS about the details.  Make your
  English Lit more literate.

### Extra credit (Misc)

### Other good things

* Sing happy birthday in class on Friday.

### About quiz 13

* Problem 2 was confusing.  I didn't take off if you got it wrong
  or left it blank.
* People who did well on problem 2 got bonus points.

_What are the parameters to the sorting routines?_

* It varies.  We've seen multiple implementations.
* Option 1: The list and a comparator.  `(sort numbers <)`
* Option 2: The list, a get-key operation, and a comparator
  `(sort students car string-ci>=?)`
* For "sort in decreasing order", I wanted either
    * `(insertion-sort contacts car string-ci>=?)`
    * `(sort contacts (lambda (a b) (string-ci>=? (car a) (car b))))`
    * `(sort contacts (comparator string-ci>=? car))`
* For sort by last name and first, I wanted either
    * `(insertion-sort contacts (lambda (contact) (string-append (car contact) " " (cadr contact))) string-ci<=?)`

### Questions

Comments on the final
---------------------

* Thursday at 2pm in this room.
* Different format than most exams: Paper (not computer), 4 problems (not 6),
  ...
    * Kind of "extended quiz"
    * But you do get to bring notes.
* We may include vectors, trees, analysis/efficiency, code reading,
  code writing, lists, sorting, etc.
* We will not ask you to deal with files.
* In the past, most students who took the final finished in 90 minutes or
  less.

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

### Problem solving

* Decompose a complex problem into smaller problems and combine the
  solutions back together.  (To make a sandwich, we might think about
  "spread substance on bread" as a smaller problem.)
* You can solve the same problem in multiple ways.
    * Don't accept your first solution as the only solution.
    * Reflect on whether you can solve the problem better.
    * We solve problems better when we can talk through the problems
      and solutions with a partner.
* You don't solve every problem from scratch; there are patterns you
  develop and can apply to new problems.
* Don't just jump in to your solution, plan ahead.  Think about potential
  complexities or problems.
* Work backwards from goal to solution.

### The Core of CS: Algorithms and data structures

* We've learned about sorting. 
    * Insertion sort.
    * Um sort.
    * Merge sort.
    * Quick sort.
    * Selection sort.
    * Parameters to sorting, like the weird comparators we use for
      the built in sort.
    * We cover about four more in 207.
* We've learned above binary search trees.
* We can (and should) generalize algorithms so that they work for a
  broader set of inputs.  E.g., if you can sort a vector of integers,
  you should be able to sort a vector of any type of values.
* Basic data structures: List, vectors, tables (lists of lists, vectors
  of vectors, etc.), trees, files (text and CSV)
* Core parts of algorithms: naming, subroutines, conditionals, sequencing,
  input and output, basic operations, 

### Functional programming 

_A different approach to thinking about programming and problem solving:
centers around a mathematical approach to program design._

* "Functions are first-class values"; they can be parameters to other
  functions, they can be returned by other functions.
    * `(o f g)` - `o` takes two functions as input and returns a new
      function.
* Many common higher-order functions: `map`, `reduce`, `filter`.
* Side-effect-free programming.  (Don't change variables, don't change
  the state of the system.)
* Anonymous procedures, created with `lambda`.
    * E.g., `(map (lambda (x) (+ x (square x))) (iota 10))`
* Other ways of building anonymous procedures with `section`.
* Recursion
    * Direct
    * Helper
    * Tail
    * Over lists, vectors, files, trees

### Program and Software Design

* Test!  Helps us identify errors.  Helps us think more broadly about
  input and output.
* Program in pairs.  It leads to more reliable code.  (And usually
  ends up taking less time.)
* Untangling complex code.  (Both the "Whatzitdo's" and the complex
  code Sam sometimes inserts into readings.  Also the code we wrote
  ourselves.)
* Document!  It helps you figure out what the code will do.  Good preconditions
  and postconditions not only explain your code to a client, they also
  help you learn more about the problem.
* We can write real programs.  (Assignment seven.)
* Keeping your code readable.
* Recovering from errors/problems.

### Scheme

* (you (need ((((lots)) of parentheses))))
* Evaluation strategy.
* How do do all of the six (seven?) key parts of algorithms.
* Between 50 and 100 different procedures (Sam thinks more.)
* You've learned most of core Scheme.

### Data science

* Most data are messy; you need ways to clean your data
* Techniques for analyzing data.
* We can apply CS to other, more important, fields
* Manipulate complex data and present it
    * Numerically
    * Visually
* Work with real-world data which leads to useful understanding.

### General thinking skills

* Practice thinking on your feet.
* Experience working with a wide variety of other people.
* Step-by-step approaches (back to the decomposition from problem solving)
* Ask for questions and ask for help.

### And beyond

* Moral modeling: The value of family.
* "There's more to life than CS (or any academic discipline)"
* Clarified that CS is not the right thing for me.
* Laugh.
* Support those around you.
* Be moderate.

Final PSA of the semester
-------------------------

* Don't let the stress of finals' week negatively affect you.
    * Get enough sleep.
    * If you decide to shut off your brain with substances, do so in moderation.
    * Don't let academic honesty become an issue; our decision-making becomes
      less good at this time of the semester.
* Consent is essential.

Final comments
--------------

