1 Scratching the Itch Jeff Parker, Merrimack College Scratch@MIT The primary purpose of the Data statement is to give names to constants; instead of referring to pi as 3.141592653589793 at every appearance, the variable Pi can be given that value with a Data statement and used instead of the longer form of the constant. This also simplifies modifying the program, should the value of pi change. Fortran manual for Xerox Computers 2 Outline Setting: Teaching CS1 to students that didn't apply to MIT Problem: Hard for students to follow what a program is doing Harder for students to write programs It takes a long time to get to the good stuff Course Goals: Computers can do interesting things Computers do only what you program them to do Good News: Scratch can help us teach these points and many other things Bad news: They need to move from Scratch to C++ or Java at some point 3 What do we use Scratch to teach? We start CS1 with 2 weeks of Scratch We cover If Statements If touching sprite2 Loops Simple loops w/ observable events Objects Sprites have state (such as position) and behaviors Plugability Recursive nesting (see next slide) 4 What do we use Scratch to teach? Plugability An if statement has a condition A condition is a Boolean expression An expression can compare two integer expressions Integer expressions can be a number or a function Sample function: RNG, which uses expressions … 5 Difficulties Equations are a difficult concept to grasp Students do not understand equations Heck, most adults don't understand equations "Each equation in the book would halve the sales." Stephen Hawking Students do not understand assignment Students have trouble with the notion of a variable See the work of Dietmar Kuchemann and Zalman Usiskin And variable in CS is different from a variable in Math They really have trouble with notion of an indexed variable 6 Simplicity of Model There is (almost) no syntax in Scratch. Compare Further, there is no loop index for (int i = 0; i < 10; i++) pop(); 7 Examples Focus on one issue: reading or writing a simple loop. for (int i = ...; i < size; i++) dest[i] = source[i]; // copy if (a[i] > max) max = a[i]; // Find max a[i-1] = a[i]; // Shift left fib[i] = fib[i-1] + fib[i-2] // fib y[i]= y[i-1] + delta*fprime(x[i], y[i]) if (s[i] != s[size - i - 1) return NOT_PALINDROME They have trouble thinking about the index This doesn’t mean that they cannot understand these algorithms: it is expressing it formally that is difficult // Euler // Palindrome for (j = i; j < size - 1; j++) // Bubble Sort if (a[j] > a[j+1]) swap(a, j, j+1); 8 Simplicity of the Logo model for (t = 0; t < …) // Closed form expression (x, y) = (x0 + D * t, y0 + 20 t – t2) for (…) x = x + D; vy = vy – a; y = y + vy; // Integration Model for (…) move(D); turn(f); // Logo Model // x = x + D * cos(q); y = y + D * sin(q) // q = q + f 9 Transition from Scratch to C++ Use the time with Scratch to cover algorithms Introduce Single Stepping (Under Extras menu) In the language of choice Focus on programs with visible results Relate new constructs to Scratch (see David Malan's talk) They know the semantics: just need to learn syntax Postpone subscripts (indexing) and equations K & R – style Filters LISP – style processing: car, cdr, cons Still allows interesting projects such as Igpay Atinlay 10 Transition from Scratch to C++ Preserve the community: let students learn from each other Encourage students to work in pairs Never say something a student can say Foster a community of learners who listen to each other Every student can do something right Select their best work – you can still suggest changes Make your examples ones you would share with colleagues Take the time to explain a good algorithm, rather than introducing dumb example because it is simple Keep it fun!