CSC151.01 2015S, Class 02: An Introduction to Linux
===================================================

* Grab a not-quite-blank playing card, identify where the associated
  computer is, and sit by that computer.

_Overview_

* Preliminaries.
    * Admin.
    * Upcoming Work.
    * Extra Credit.
    * Questions.
* About the course.
* Common parts of an algorithm.
* Lessons from day one.
* Getting started with Linux.

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

### Admin

* Hi whoever!
* In case you didn't know, there is a course Web site at 
  <http://www.cs.grinnell.edu/~rebelsky/Courses/CSC151/2015S/>.
  We'll do a quick overview.
* Two quotations
    * "Don't take 151, they're going to teach you a useless language.
       Take Web Development so you can learn HTML." (Overheard in mailroom)
    * "I wish someone had told me that Scheme was just Javascript with a 
       better syntax.  Now that I understand that, I wish I'd taken more
       CS." (Graduating senior who developed Web consultancy.)
* I expect that you do readings before class.
* The self-checks are for your benefit.  You do not need to turn them in.

### Upcoming Work

* [Assignment 1](../assignments/assignment.01.html) due tonight.
* Assignment 2 will be distributed on Friday.
* Quiz 1 will be Friday.  It will primarily be on the parts of algorithms,
  and is intended mostly to get you used to having Friday quizzes.
    * The quiz is closed book, open mind.
* Readings for Friday:
    * [Parts of Algorithms](../readings/algorithms-reading.html) (review)
    * [The DrRacket Program-Development Environment](../readings/drracket-reading.html)
    * [Beginning Scheme](../readings/beginning-scheme-reading.html)
    * [How Scheme Evaluates Expressions (take 1)](./readings/scheme-eval-1.html)

### Extra Credit Opportunities

* _You don't get the extra credit if it's an activity you are participating
  in.  E.g., if you are a swimmer and go to a swim meet, others are supporting
  you!_.
* _I'll cap most repeated things at two times: E.g., two swim meets, two
  BBall games, two meditation nights._
* _ Preferably within two days_

#### Academic 

* Friday, 12:10 p.m., JRC 224A (Day PDR), CS Table, "Computer Programming
  as an Art" (copies outside my office)

#### Peer Support (Morning Section)

* Swimming, Friday, January 30, 6:30 p.m., Osgood Natatorium
* Swimming, Saturday, January 31, noon, Osgood Natatorium
* Julia's radio show, Thursday 1:00-2:00 a.m. The hot box.  Theme-based 
  music.  This week: Beginnings.  "There's an App for that."

### Things Your Peers Recommend (no EC unless mentioned above)

* Belly Dance Club, to be scheduled
* Salsa Club, Tuesdays at 7pm and Sundays at 2pm
* Meditation group, Wednesdays at 9:00 p.m. and Sundays at 4:00 in CRSSJ

### Questions

About the course
----------------

* Computer Science 151 has a number of goals
    * To introduce you to fundamental ideas of computer science: abstraction,
      algorithms, and data
    * To enhance your problem-solving skills and give you experience
      in formal representation of problems and solutions.
    * To introduce you to two primary paradigms of problem solving:
      functional and imperative.
    * To give you some programming skills that you can apply to problems
      in other disciplines.
    * To improve other learning and thinking skills (as we hope all
      Grinnell classes will do).
* I expect and hope that you will find CSC151 different from any class
  you've taken in the past.
    * We use a different format than many classes: a collaborative,
      workshop-style format.  (You may have seen this format in other
      introductory science courses; we do it somewhat differently, particularly
      in that we ask you to do reading and reflection before each class.)
    * Computers and computer science also require you to think differently.
      I expect that you'll exercise some brain cells you may have forgotten
      you have.  (And after all, isn't liberal arts education an exercise
      in thinking in as many ways as you can?)
    * **Don't bang your head against the wall for too long!**
* Like most computer science courses, CSC151 will have both theoretical
  and practical components.  I hope you will enjoy relating the two.
* And, hey, we're going to make pretty pictures, too.
    * That is, you can solve problems in many different domains.  We are
      going to use image making as our problem domain.  
    * We've found that images are useful for a wide variety of reasons,
      not least of which is that it's sometimes much easier to "see" where
      things went wrong.

Common parts of an algorithm
----------------------------

* Small group: Discuss the reading on algorithms.  [4 min]
    * Don't forget to introduce yourselves!
    * Make sure that you are ready to answer questions I might ask about 
      the parts of an algorithm. 
    * Develop a list of questions for me.
* _Note: I love Grinnell students: You talk so readily._
* Large group: Overview of Algorithms. [4 min]
* What questions do you have?
* What is an algorithm?
    * A set of instructions to accomplish a task.
* What goes into an algorithm?
    * Parameters: Inputs to the algorithm (e.g., almond butter, jelly
      for the X&Y spread sandwich)
    * Subroutine: Something that goes into accomplishing a larger task.
      (e.g., Open a jar)
    * Repetition: Repeatedly doing an action.  Repeatedly twist the
      lid counter clockwise until it or your hand falls off.
    * Conditionals: Something that lets you check the situation and tells
      you how to handle different situations.  If the knife is in your 
      right hand then spread the almond butter.  If there is a piece of 
      seal on the jar, rip it off.
    * Variable.  Names of things.  "The jar".  "The plate."
      "Dominant hand".  (issue: inputs vs. variables) 
      * Variables are things you name along the way.
    * Sequencing
* Small group: Example of each component from AB&J discussion [5 min]
* Large group: Review examples. [5 min]

Lab: Getting Started with Linux
-------------------------------

* We'll break about midway through today's class to get you set up
  working with our Linux computers.
* This "lab prep" is somewhat pointless and annoying, but also necessary.
* You should not work in a team for today's lab, and we'll spread out
  to both this room and the neighboring room.
* Do [the lab](../Labs/linux-lab.html)

