CSC161 2010F, Class 01: An Introduction to the Course Overview: * Course goals. * Texts, required and otherwise. * A few syllabus notes. * Lab 1: GNU/Linux 1. Admin: * Because of problems with MediaScript, the course web is in beta stage, and will remain so for the next few weeks. * Don't forget CS Table today at noon in the Day PDR. * Don't forget Happy Days this weekend. * How to get to the course Web page + Go to Sam's Web page + Click on "CSC 161" at the top OR http://www.cs.grinnell.edu/~rebelsky/Courses/CSC161/2010F/ Welcome to the second course in Grinnell's unique CS curriculum * Three different paradigms in the first three coursesa * Functional: Programming by combining functions with purity and higher-order concepts * "Pure" function: Given the same inputs, it always gives the same outputs * add, sum, square, drawing-hshift * Impure: random, I/O, GIMP drawing etc. * Imperative * Focus on operations that change state (most frequently, store a value in a variable) * Focus on explicit sequencing of those operations * Object-Oriented * Three different languages to exemplify these paradigms * Scheme for functional * C for imperative * Java for object-oriented * Why? * Multiple paradigms let you think broadly about problem solving * Multiple languages prepare you to encounter new languages * Goal two: Tools * Linux + Philosophy * Emacs - editor * Make - tool for building programs * Goal three: Deepen understanding of core data structures and algorithms * List * Stack and queue * Sorting, searching, etc. * Dictionaries (ADT) * Goal four: Have a lot of fun Books: See the Web site Other Admin * See the Outline Lab Reflection: What were the important tools you learned?s * Control C - Cancel the damn program already * Tab autocompletes - The computer can try to guess what you want to type * History - Lets us redo commands * We can list the contents of directories in many ways with ls * Many Unix commands have flags that control how they behave * An ampersand lets you do other things simultaneously * You could also open another terminal window