<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Armando Fox &#187; Teaching</title>
	<atom:link href="http://www.armandofox.com/geek/category/teaching/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.armandofox.com/geek</link>
	<description>A breadth-first traversal of life</description>
	<lastBuildDate>Fri, 16 Jul 2010 03:53:14 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>A good first programming language, revisited</title>
		<link>http://www.armandofox.com/geek/2010/06/a-good-first-programming-language-revisited/</link>
		<comments>http://www.armandofox.com/geek/2010/06/a-good-first-programming-language-revisited/#comments</comments>
		<pubDate>Tue, 08 Jun 2010 19:52:18 +0000</pubDate>
		<dc:creator>fox</dc:creator>
				<category><![CDATA[Retrocomputing]]></category>
		<category><![CDATA[Teaching]]></category>

		<guid isPermaLink="false">http://www.armandofox.com/geek/?p=276</guid>
		<description><![CDATA[I&#8217;m of the &#8220;BASIC generation&#8221; and like David Brin I bellyache about there not being a good first language for kids to feel the empowerment I felt each time I could say &#8220;Look, I made the computer do something cool!&#8221;
A colleague recently asked if I had any thoughts on what would be &#8220;a good first programming [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m of the &#8220;BASIC generation&#8221; and <a href="http://www.salon.com/technology/feature/2006/09/14/basic" target="_blank">like David Brin</a> I bellyache about there not being a good first language for kids to feel the empowerment I felt each time I could say &#8220;Look, I made the computer do something cool!&#8221;</p>
<p>A colleague recently asked if I had any thoughts on what would be &#8220;a good first programming language&#8221; for a precocious 9-year-old who was very  much into computers and wanted to learn programming, giving me an excuse to agonize about this again.</p>
<p>The executive summary of my current opinion is probably “Scratch if you want training wheels, Python otherwise”, but if this sort of thing interests you, read on.</p>
<p>My colleague&#8217;s question gave me an excuse to wring my hands about it some more, and even talk to some other people about it seriously, including <a href="http://www.cs.berkeley.edu/~colleenl/">Colleen Lewis</a>, a Berkeley computer scientist and educator whose opinion I respect tremendously on such matters, and a bunch of smart colleagues from industry who attended the recent <a href="http://radlab.cs.berkeley.edu">RAD Lab</a> retreat.</p>
<p>We concluded that there&#8217;s a handful of absolutely fundamental concepts that are (a) common to the vast majority of programming paradigms/languages and (b) not “natural” in the sense that they have no obvious analog in non-programming-based activities and simply have to be internalized:</p>
<ul>
<li>variables and assignment</li>
<li>manipulating collections of elements (arrays exist even in languages that don’t support user-defined data structures)</li>
<li>conditional evaluation</li>
<li>control flow</li>
<li>iteration</li>
<li>subprograms (i.e., procedural abstraction)</li>
</ul>
<p>(I&#8217;ve deliberately omitted OO; while really important, it’s not fundamental in that there’s lots of programs you can write without it.)</p>
<p>Beyond focusing on absorbing those concepts, a &#8220;good first language&#8221; should make the young programmer feel empowered at being able to do stuff, gradually stripping away the “mystique” of how computers do the cool things they do.</p>
<p>Hence my concerns about <a href="http://scratch.mit.edu">Scratch</a>, a popular GUI-based programming environment designed for teaching that we are starting to use at Berkeley for the intro-level CS class.  Colleen reassured me that it&#8217;s possible to write non-toy programs in Scratch once you ditch the GUI, that it supports constructs like lambda expressions that let you teach important concepts like closures, and that students who complete the new intro course also understand things like objects and class inheritance and are more than ready to tackle any programming language.  My concern is that the Scratch GUI environment is so amazingly rich and polished that it might diminish the sense of empowerment—even if you write a cool program, there’s still just too much magic between your program and the machine.  The nice thing about Scratch is that it’s widely used in education so (I assume) there’s lots of freely-available supplementary materials to go with the software.  (Wearing my “productivity programming” hat, I’d say Scratch is almost too productive because so much is happening beyond the code you wrote.)</p>
<p>The alternative seems to be Python, probably the closest thing to BASIC these days (albeit a much better language, of course).  And in fact I found a pretty good book—<em><a href="http://www.worldcat.org/title/hello-world-computer-programming-for-kids-and-other-beginners/oclc/502443471&amp;referer=brief_results" target="_blank">Hello World: Computer Programming for Kids and Other Beginners</a></em>—co-authored by a programmer and his young son and written in a kid-friendly yet noncondescending way.  The downside is that while Python is a pretty nice language, like all languages it has a few quirky notations, idiosyncrasies, arbitrary-seeming behaviors, etc. While the book goes out of its way to clarify these only as much as needed, their presence might detract from a learning experience&#8230;but then, to be fair, the same was true of BASIC way back when, and probably those of us who glamorize learning it have selective amnesia about getting bitten by those idiosyncrasies and learning to work around them.</p>
<p>So maybe my current recommendation is: for a gentle introduction with training wheels and rubber bumpers, Scratch; for something a little more hardcore that you won’t outgrow (Python is used for lots of real programs) but comes complete with real-life idiosyncracies, Python with the above book.</p>
<p>The good news is that while neither is “built in” to today’s PCs like BASIC used to be, they’re both open source free downloads.</p>
<p>Ideas from anyone who’s actually helped their kids learn to program?  (I have no kids, only a toucan, and it’s unlikely she’ll learn to program anytime soon.)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.armandofox.com/geek/2010/06/a-good-first-programming-language-revisited/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Can retrocomputing bring computer-aided learning to the other 90%?</title>
		<link>http://www.armandofox.com/geek/2009/06/can-retrocomputing-bring-computer-aided-learning-to-the-other-90/</link>
		<comments>http://www.armandofox.com/geek/2009/06/can-retrocomputing-bring-computer-aided-learning-to-the-other-90/#comments</comments>
		<pubDate>Tue, 02 Jun 2009 17:15:06 +0000</pubDate>
		<dc:creator>fox</dc:creator>
				<category><![CDATA[Computing and society]]></category>
		<category><![CDATA[Retrocomputing]]></category>
		<category><![CDATA[Teaching]]></category>

		<guid isPermaLink="false">http://radlab.cs.berkeley.edu/people/fox/wp/?p=114</guid>
		<description><![CDATA[Not sure which of my colleagues (maybe Matt?) pointed me at this, or maybe I read it in one of the various pheeds, but the guys at PlayPower have observed that a self-contained Nintendo NES knockoff, packaged in a cheap keyboard and including NES-like game controllers, is sold in India, China and other countries as the &#8220;TV [...]]]></description>
			<content:encoded><![CDATA[<p>Not sure which of my colleagues (maybe <a href="http://www.eecs.harvard.edu/~mdw/">Matt</a>?) pointed me at this, or maybe I read it in one of the various pheeds, but the guys at <a href="http://www.playpower.org">PlayPower</a> have observed that a self-contained Nintendo NES knockoff, packaged in a cheap keyboard and including NES-like game controllers, is sold in India, China and other countries as the &#8220;TV Computer&#8221; for around US $10! In fact since the NES patents expired a few years ago, these are now 100% legal, and many different manufacturers offer them. PlayPower&#8217;s goal is to find a way to use these to bootstrap computer-aided education (basic computer literacy, learning games like the old Oregon Trail, etc.) in developing countries. Like the Atari 2600, there is a<a href="http://nesdev.parodius.com/"> vibrant retrocomputing developer community</a> around the NES.</p>
<p><a href="http://picasaweb.google.co.in/dereklomas/TVComputer#"><img class="alignleft" title="A US$12 NES/Famicom knockoff available in India" src="http://playpower.org/assets/images/playpower-keyboard.gif" alt="" width="240" height="109" /></a></p>
<p>PlayPower&#8217;s booth at <a href="http://makerfaire.com">Maker Faire</a> had a couple of these devices on display. The NES, also called the Famicom in Asia, was a 6502-based cartridge game system whose technology was only half a generation or so ahead of the Atari 2600. The device plugs into a TV (they have both composite video out and RF out, and soldering an undocumented pad on the board switches between NTSC and PAL) and come with a starter cartridge that has various game titles on it, and even seems to have programs that &#8220;simulate&#8221; word processing and Web browsing (kind of like &#8220;my first cell phone&#8221; toys simulate making phone calls). Presumably, the carts have ROMs that take over part of the address space when plugged in; the more advanced Atari carts had some additional bank-switching logic (triggered by memory-mapped I/O) that allowed multiplexing lots of different game levels into a fixed amount of address space, typically around 4K.</p>
<p>Intriguingly, <a href="http://bobrost.com/nes/">Bob Brost at CMU taught a class on NES game development</a> and even produced &#8220;nBasic&#8221;, a BASIC-level (sort of) language that, although it eliminates the need to program in 6502 assembly, it does not seem to eliminate the need to understand the arcane programming approach required by these devices, i.e. you have to time your code around the vertical retrace interval (only &#8220;safe&#8221; to write GPU registers during vertical retrace to avoid flickering/loss of picture sync), etc. </p>
<p>So my questions would be: is this level of programming abstraction going to be sufficient to catalyze the development of a lot of &#8220;edu-ware&#8221; for these devices? Given that the source of this &#8220;edu-ware&#8221; is ultimately (we hope) going to be programmers in the very countries in which the devices are sold, should we be looking for something that enables a much higher level of abstraction for development—say, something more like <a href="http://scratch.mit.edu/">Scratch</a>—and port a subset of it to this 8-bit world?</p>
<p>(Update: the <a href="http://design4dev.wetpaint.com/">Design For Developing Countries wiki</a> has a lot of great information about their progress and preliminary studies.)</p>
<p>(For the curious, the NES has:</p>
<ul>
<li>a 1.9MHz 8-bit 6502</li>
<li>32K ROM address space for game code &amp; data (typically 16K code, 16K swappable to store different &#8220;levels&#8221; data)</li>
<li>240w x 248h viewable graphics (NTSC or PAL) organized as 8&#215;8 pixel &#8220;tiles&#8221; for the purposes of color palette assignment, sprite rendering, etc.</li>
<li>system, background and foreground color palettes (64, 16 and 16 entries respectively)</li>
<li>up to 64 sprites (8&#215;8 or 8&#215;16 pixels, 3 colors + transparent color, no more than 8 sprites per scanline)</li>
<li>4 synthesizer channels (2 square waves, 1 triangle, 1 white noise) with ~6 octave range; one note per channel at a time</li>
</ul>
<div>What are the hard problems? Distribution of software specifically, and communication in general, since the device has no comms built in; any storable user data, since the device has no persistent storage (though PowerPlay have mated a CF flash card to it). Now, since cell phones are so unbelievably common even among the poorest in India, even the cheapest ones can do simple text-only Internet browsing, and all come with some limited amount of nonvolatile storage (though I&#8217;m not sure it&#8217;s programmer-addressable), might this be a good short project—mating inexpensive cell phones to $10 TV computers? Maybe something to do in time for the next Maker Faire&#8230;</div>
<p>I have to admit, the pervasive availability of $10 TV-computers is awfully compelling, as someone who remembers very vividly what remarkable things can be done within the constraints of these old 6502 systems.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.armandofox.com/geek/2009/06/can-retrocomputing-bring-computer-aided-learning-to-the-other-90/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
