```
WEEK01: intro to python, unix, cs21
-----------------------------------
M: Welcome to CS 21, about the course, etc

OVERVIEW:
- write lots of computer programs, learn some CS along the way
- learn PYTHON programming language
- labs/programs due every week
- meant for students without any CS/programming experience

- attending lab sessions and ninja sessions is optional
- you can also go to any lab session you want

ALGORITHM EXAMPLE:

can you solve rubik's cube?   http://www.rubiks.com
can you write out a list of step-by-step instructions that
anyone could follow, that would allow them to solve rubik's cube??

an algorithm is like a recipe or list of instructions to follow

Here's an algorithm for solving rubik's cube:

```
rubik's cube algorithm
```
is it the "best" algorithm??
what do we mean by "best"??
is it the fastest algorithm?
is it the simplest algorithm?
is it in a form that the computer could understand?

TIC-TAC-TOE:

if I were writing a computer program to play the game of
tic-tac-toe (with a user), here's what it might look like:

draw the empty board
keep doing this over and over:
ask user to choose a spot
draw user's mark on board
check if the game is over: if yes, go to "print winner" line below
computer picks spot
draw computer's mark on board
check if the game is over: if yes, go to "print winner" line below
go back to "ask user" line above
print the winner, game over...

can you think up an algorithm that the
computer could follow to pick it's spot???

how do we "check if the game is over"???

what do we ask the user to input to choose their spot??
a number? some text ("upper left")?

notice that the above pseudo-code only has 4 basic components:
INPUT     (ask user to choose...)
OUTPUT    (draw board, draw mark on board, print winner)
LOOPING   (keep doing this over and over...)
BRANCHING (if game over, go to ...)

the tic-tac-toe program will also need a DATA STRUCTURE: some
way to represent the board and it's current state (which spots
are taken and what marks are in those spots). the ALGORITHM
ties it all together.

COURSE INFO:

intro to cs, learning to program, learn to develop and
analyze algorithms (lots of problem solving)

who should you take this course: students new to CS and programming
(if you've already done some programming, CS31 or CS35 might be
better for you)

what to expect
- class builds on previous week's work
- does require work (lab time)
- help is available (ninjas)...but START EARLY
- my teaching style (learn by doing)
- why python?
```
http://xkcd.com/353
http://sebsauvage.net/python/snyppets/#beginner
```
unix login and first python program (print "hello")
- cs account
- let me know if name not correct
- prox tags
- passwd
- dock and terminal program and unix prompt
- logging out, ssh access (putty, mac)

LAB0: vimtutor, using unix, update21, handin21

```