From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-14-ewr.dyndns.com (mxout-039-ewr.mailhop.org [216.146.33.39]) by lists.bufferbloat.net (Postfix) with ESMTP id E7E042E07AF for ; Fri, 15 Apr 2011 09:42:16 -0700 (PDT) Received: from scan-12-ewr.mailhop.org (scan-12-ewr.local [10.0.141.230]) by mail-14-ewr.dyndns.com (Postfix) with ESMTP id 500289CBB54 for ; Fri, 15 Apr 2011 16:42:16 +0000 (UTC) X-Spam-Score: 0.0 () X-Mail-Handler: MailHop by DynDNS X-Originating-IP: 149.20.54.64 Received: from mainmail.teklibre.com (toutatis.isc.org [149.20.54.64]) by mail-14-ewr.dyndns.com (Postfix) with ESMTP id 2EF5B9CB241 for ; Fri, 15 Apr 2011 16:42:12 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by mainmail.teklibre.com (Postfix) with ESMTP id 13AB812B759; Fri, 15 Apr 2011 10:16:35 -0700 (PDT) Received: from mainmail.teklibre.com ([127.0.0.1]) by localhost (toutatis.sql1.isc.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id X64LvWNA2BoN; Fri, 15 Apr 2011 10:16:34 -0700 (PDT) Received: from [192.168.1.4] (c-69-249-184-126.hsd1.nj.comcast.net [69.249.184.126]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) (Authenticated sender: d) by mainmail.teklibre.com (Postfix) with ESMTPSA id 77AFD12B74A; Fri, 15 Apr 2011 10:16:34 -0700 (PDT) Message-ID: <4DA87561.2040700@taht.net> Date: Fri, 15 Apr 2011 10:42:09 -0600 From: Dave Taht User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.14) Gecko/20110223 Thunderbird/3.1.8 MIME-Version: 1.0 To: bismark-devel@lists.bufferbloat.net, Brian Clapper Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: [Bismark-devel] programming without fear... at age 10 X-BeenThere: bismark-devel@lists.bufferbloat.net X-Mailman-Version: 2.1.13 Precedence: list List-Id: BISMark related software development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 15 Apr 2011 16:42:17 -0000 I'm always interested in new ways to reach the next generation, of any age... I am wondering what is taught now as a mandatory course for liberal arts types as an introduction to programming at any level - from grade 3 to college? (I realize this is kind of off-topic for the bismark list but it was one of my unanswered questions from my visit to gatech, so...) My friend Brian Clapper [1] just wrote up his experience with exposing some 10 year olds to MIT's "scratch". I hope he blogs further on this... In my case, LOGO was the revelatory experience - (not the turtles, but the list processing. I know I'm weird) He writes: I volunteered to participate in Career Day, at my daughter's school, and today was the big day. I thought long and hard about how to describe programming to 10 year olds, without boring the crap out of them. Turns out, the three sessions I did went very well. I thought I'd share, in case others find themselves in this situation. First, I talked about computers, of course: How ginormous they were when I was their age, how people needed special badges just to get in and touch the computer, etc. I pointed out that computers weren't everywhere then, not like they are today. From there, I starting asking the kids to name places they knew used computers. I got the usual responses. I then pulled out my Droid phone, asked them if they knew what it was. (They did, of course.) I asked if it was a computer, and we talked about that for a minute or so. (I showed them the flashlight app for it, and talked about how someone actually sat down and wrote it, and then put it on the web.) Next came the iPad. We talked about how people use them. I showed them the calculator app, which is hilarious, because it's so big. We talked about how the calculator keys change when you change the iPad's orientation, and how someone actually wrote the program to do that. Then I talked a bit about other places there are computers. I got the usual answers (video games, the cash registers in the lunch room, etc.). I asked them if there were any computers in their cars. Some mentioned the GPS, so we talked about that. I talked a bit about anti-lock brakes, and how they're controlled by computers, using skidding across the floor in socks as an intro. This worked well, because they had just done a science unit on simple machines, so they have a new understanding of friction. Then we talked a bit about how someone becomes a programmer. When I asked how that happened, they all said, "School," or some variant. That gave me the lead-in to the science analogy (school + experiments), because, of course, kids love the experiments part more than the book part. It also gave me a chance to invoke Mythbusters. This was a perfect segue into the next part: A demo. I had found Scratch (scratch.mit.edu), a free, cross-platform programming environment that's like Logo, on steroids. You program by dragging controls from tools bars into the canvas, and fitting them together like puzzle pieces. They affect a small screen, where you can add sprites, draw lines ("pen up", "pen down"), etc. A small Paint-like app allows you to draw your own sprites, but you can also load in prebuilt graphics. Widgets include: - control structures (loops, if statements, the like) - sounds (drums, notes, with adjustable tempos and instruments) - variables (though I skipped those for this demo) - pen-related widgets (pen up, pen down, pen color, etc.) - movement widgets. The "set x,y to (-120, 0)" allowed me to tie the discussion into a recent math unit, for instance. But there are others, like "walk 10 steps". When you drag a control into the canvas, you can double click it, and that fragment runs immediately. Piece it together with others, and you can run them separately, too. Put them all together, and you have your program. By having separate, disconnected pieces, you can get parts that run in parallel. You get the idea. So, I had the kids gather around behind me, I knelt on the floor in front of my laptop (which was on two spare kid desks), and we built a program. First, we drew a simple sprite. Then, I showed them how to move the sprite across the screen. We tested that part. Then, we put that action into a loop, and ran that. Then, we modified the loop so that after ever step, the sprite stopped, and the program played two drum tones. Then, we added a snail trail, so the moving sprite left a purple line as he walked across the screen. (Funny: In all three sessions, when I asked the kids what color the line should be, they said, almost unanimously, "PURPLE!") I cannot praise Scratch enough, for this type of talk. I had about 25 minutes per session, with about 12 kids per session. This talk format turned out to work really well with that time frame and that size. The kids were attentive during the talk, since I didn't just lecture at them, but kept asking them questions. But they were positively rapt during the programming session. At the end, I told them, "Okay, you're all now programmers," which, of course, they loved. I also told them that if they're interested in playing with Scratch, they could have their parents email me, and I'd tell them how to download it, "because the best way to decide whether programming is fun or sucky is to try it." If you have to do this kind of thing with kids, I highly recommend Scratch. I ran it on my Mac, but it'll run on Linux or Windows. It's written primarily in Java, with a native executable front-end. [1] http://brizzled.clapper.org/