On Thu, Jul 14, 2011 at 8:20 PM, Corey Richardson <span dir="ltr">&lt;<a href="mailto:kb1pkl@aim.com">kb1pkl@aim.com</a>&gt;</span> wrote:<br><div class="gmail_quote"><div><br>&lt;&lt; SNIP &gt;&gt;<br> <br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

But, my real question to you educators is, which paradigm do you use when<br>
first teaching programming, and why? My peers cite OOP because, frankly,<br>
it&#39;s the only thing they&#39;ve learned and have heard that e.g. procedural<br>
programming is bad. Personally, I like to use procedural (this is in<br>
Python, of course) for as long as possible. I don&#39;t even mention objects<br>
for a while, they aren&#39;t necessary or even desirable in many instances.<br>
I love using games as a project, and that&#39;s when I swoop in and bring up<br>
objects. My segue are usually the monsters of a text based game. I don&#39;t<br>
have them design an object for everything because it introduces complexity<br>
without benefit. Of course, it&#39;s not as flexible/correct a program as it<br>
could be, but it&#39;s a nice slow ease into OOP. But it certainly isn&#39;t the<br>
ONLY paradigm out there, and certainly not the most useful for everything.<br>
<br>
Any other insights?<br>
<font color="#888888">--<br>
Corey Richardson<br>
  &quot;Those who deny freedom to others, deserve it not for themselves&quot;<br>
     -- Abraham Lincoln<br>
</font><br></blockquote><div><br>I like the Lincoln quote.<br><br>Many approaches have validity of course, especially in the hands<br>of someone experienced who keeps it interesting.<br><br>When I first splashed into programming, OOP had yet to hit, but<br>
it wasn&#39;t like there wasn&#39;t already a veritable menagerie of amazing<br>languages -- even sans OOP.  <br><br>Like, we had SNOBOL and APL and PL/1 (just a few I got to mess <br>around in).<br><br>I transitioned to OOP along the xBase track, as many did:<br>
dBase II, dbase III, dBase IV, Clipper, FoxPro, FoxPro for <br>Windows, and Visual FoxPro (VFP).<br><br>Some of my peers along that track are just beginning to appreciate <br>Python, now that Microsoft has signaled it&#39;s pulling the plug on <br>
VFP.<br><br><a href="http://fox.wikis.com/wc.dll?Wiki~VFPRoadMapDiscussion">http://fox.wikis.com/wc.dll?Wiki~VFPRoadMapDiscussion</a><br><br>The J community (J being a successor to APL (or a mutant <br>child of?)) uses a grammar-teaching approach to teaching <br>
programming, referring to verbs, nouns, adverbs, other parts<br>of speech as parts of its language.<br><br><a href="http://www.cs.trinity.edu/~jhowland/math-talk/functional1/">http://www.cs.trinity.edu/~jhowland/math-talk/functional1/</a><br>
<br>Following that model, I sometimes teach OOP by writing <br>things like: <br><br>noun.verb(args)<br>thing.adjective <br>thing.verb()<br>noun.property <br><br>and so on, deliberately confusing &quot;parts of speech&quot; talk with the <br>
OOPy stuff.  Then I teach looking at the world that way, not using<br>a computer language.  What are the properties and behaviors<br>of a flower?  A panda?  Analyze an airport in terms of its objects <br>and processes.  Come back to computers when you&#39;re ready,<br>
take your time.<br><br>But then when I can get away with it, my topic is not &quot;programming&quot;<br>or &quot;CS&quot; but a more exotically named &quot;digital math&quot; or (last year) <br>&quot;martian math&quot;.  In the more formal presentations, the latter is<br>
a topic area within the former:<br><br><a href="http://wikieducator.org/Digital_Math">http://wikieducator.org/Digital_Math</a><br><br>In this approach, you want to develop an awareness of types <br>(types of things -- like types of biotum) and their respective <br>
namespaces.  This dovetails with Carl&#39;s focus on objects <br>before classes.  <br><br>A &quot;list&quot; is a convergence of many concepts, a &quot;dict&quot; is another, <br>an &quot;int&quot; yet another and so on.  A &quot;type&quot; is not just a simple <br>
thing.  Knowing about types helps us learn about math, <br>with its concentric N, Z, Q, R and C types.<br><br>In treating computer languages as math notations, we&#39;re <br>treading somewhat in the footsteps of Russell and Frege (etc.), <br>
except we&#39;re using Stallman type tools for building our <br>machinery, more than the tools of the so-called analytic <br>philosophers (Quine etc.)<br><br>Kirby<br><br>@ Pacific Lutheran University (PLU)<br>(visiting)<br>
<br></div></div>