CSC151.01 2006S, Class 56: Wrapup Admin: * Congrats to Jose and Alexi for the best solutions to problems 1 and 2, respectively. * Good luck on your finals. * Our final: 9 a.m. Tuesday. * If you want to take the final at a different time, you need to get the form to me today!. Overview: * The subject matter of the course. * Evaluation forms. * Final comments. /The Subject Matter of the Course/ //The Scheme Programming Language// * Basics: * Use define or let to name things * Write functions using lambda * Variable-arity functions use variant syntax * Types (and procedures on those types) * Numeric types (integers, reals, complex, ...) * Symbols * Strings * Characters * Lists * Vectors * Procedures * Ports * ... * A host of procedures: (At least fifty, perhaps up to 100) * Collections * Vectors as mutable fixed size collections * Lists are fixed content dynamic size collections * Trees are just weird * Recursion * ... * High-level idea: * You can build most Boolean functions from and, or, and not. //Functional Programming// * Functions can be parameters to other functions * Functions can return other functions * Core higher-order functions: * map * left-section and right-section * compose * fold * apply * Anonymous functions * Principle that functions should not mutate their parameters //Computer Science// * Binary search (is the coolest concept ever) * A great idea of computer science * Supports the more general idea of "divide and conquer" * And other techniques for searching * Algorithms in general * Sorting algorithms * Quicksort * Merge Sort * Selection Sort * Insertion Sort * Algorithm analysis (by running and counting steps) * Unit testing for "verification" * Job areas (agh! we don't talk about this at Grinnell) * Find and fix bugs * Objects and a bit of OOP * A bit about what else people do in CS * Work from the base case upwards as a problem solving technique "Bottom-up programming" //General Skills// * Think on your feet. * General problem solving - Turning a problem into an algorithm into code * Solve statistical problems (and visualize them) * Think about overarching concepts * Dealing with mean facutly members who won't let any stupid subject drop * Group work is important * Moving from theory to practice * Persistence and patient * Interacting with other people COMPUTERS ARE SENTIENT AND MALICIOUS