<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>
<channel>
	<title>Comments on: A Thousand Layers of Abstractions</title>
	<atom:link href="http://coffeeghost.net/2008/07/01/a-thousand-layers-of-abstractions/feed/" rel="self" type="application/rss+xml" />
	<link>http://coffeeghost.net/2008/07/01/a-thousand-layers-of-abstractions/</link>
	<description>Weird musings. Useful software. Geeking out.</description>
	<pubDate>Wed, 19 Nov 2008 12:10:15 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.2</generator>
		<item>
		<title>By: zapman</title>
		<link>http://coffeeghost.net/2008/07/01/a-thousand-layers-of-abstractions/#comment-18522</link>
		<dc:creator>zapman</dc:creator>
		<pubDate>Thu, 25 Sep 2008 09:30:54 +0000</pubDate>
		<guid isPermaLink="false">http://coffeeghost.net/2008/07/01/a-thousand-layers-of-abstractions/#comment-18522</guid>
		<description>I can imagine that giving some nice visual feedback to students helps keeping them motivated in learning how to program.

My suggestion would be to first teach them the 3D modeling software "Blender" (opensource) and its integrated gameengine and python afterwards:
It allows them to use their own 3d-models inside a real time engine (blender game engine). The gamelogic can be added with clickable logic bricks at first. This way you get very nice feedback and learn something about the general problems of programming and game creation.
Soon they will want to implement things that aren't possible with logic bricks; thats when python comes into play: Blender offers python scripting for its game engine.

Als book taught me very valuable things at that point, that I will now be able to make use of in Blenders gameengine.

This way you connect the abstract programming lessons with contemporary computergames!</description>
		<content:encoded><![CDATA[<p>I can imagine that giving some nice visual feedback to students helps keeping them motivated in learning how to program.</p>
<p>My suggestion would be to first teach them the 3D modeling software &#8220;Blender&#8221; (opensource) and its integrated gameengine and python afterwards:<br />
It allows them to use their own 3d-models inside a real time engine (blender game engine). The gamelogic can be added with clickable logic bricks at first. This way you get very nice feedback and learn something about the general problems of programming and game creation.<br />
Soon they will want to implement things that aren&#8217;t possible with logic bricks; thats when python comes into play: Blender offers python scripting for its game engine.</p>
<p>Als book taught me very valuable things at that point, that I will now be able to make use of in Blenders gameengine.</p>
<p>This way you connect the abstract programming lessons with contemporary computergames!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Miles Smith</title>
		<link>http://coffeeghost.net/2008/07/01/a-thousand-layers-of-abstractions/#comment-9619</link>
		<dc:creator>Miles Smith</dc:creator>
		<pubDate>Thu, 03 Jul 2008 16:34:09 +0000</pubDate>
		<guid isPermaLink="false">http://coffeeghost.net/2008/07/01/a-thousand-layers-of-abstractions/#comment-9619</guid>
		<description>Well, I believe that programming is definately appealing to a younger audience, for example I have been learning web design for 4 months though I have been busy so havnt really learned much.

I find myself often turning to 13 year olds to help me with my problems, they have been learning for years.

I have just turned 16</description>
		<content:encoded><![CDATA[<p>Well, I believe that programming is definately appealing to a younger audience, for example I have been learning web design for 4 months though I have been busy so havnt really learned much.</p>
<p>I find myself often turning to 13 year olds to help me with my problems, they have been learning for years.</p>
<p>I have just turned 16</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: numerodix</title>
		<link>http://coffeeghost.net/2008/07/01/a-thousand-layers-of-abstractions/#comment-9595</link>
		<dc:creator>numerodix</dc:creator>
		<pubDate>Thu, 03 Jul 2008 10:00:14 +0000</pubDate>
		<guid isPermaLink="false">http://coffeeghost.net/2008/07/01/a-thousand-layers-of-abstractions/#comment-9595</guid>
		<description>What makes this question difficult is that what you are asking is partly marketing. "Okay, we want to sell them this idea, do we use the big box or the little box?" In the end, if you can sell it then it doesn't really matter which way, people will pick what appeals to them.

What *seems* to sell very well is the idea that you can achieve much without doing much work. That is what the current ruby-rails movement is all about. Whether that's true or not is secondary, the crucial thing is the sales pitch.</description>
		<content:encoded><![CDATA[<p>What makes this question difficult is that what you are asking is partly marketing. &#8220;Okay, we want to sell them this idea, do we use the big box or the little box?&#8221; In the end, if you can sell it then it doesn&#8217;t really matter which way, people will pick what appeals to them.</p>
<p>What *seems* to sell very well is the idea that you can achieve much without doing much work. That is what the current ruby-rails movement is all about. Whether that&#8217;s true or not is secondary, the crucial thing is the sales pitch.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Robin Barooah</title>
		<link>http://coffeeghost.net/2008/07/01/a-thousand-layers-of-abstractions/#comment-9559</link>
		<dc:creator>Robin Barooah</dc:creator>
		<pubDate>Thu, 03 Jul 2008 00:51:40 +0000</pubDate>
		<guid isPermaLink="false">http://coffeeghost.net/2008/07/01/a-thousand-layers-of-abstractions/#comment-9559</guid>
		<description>I learned to program before I was 8 mostly using basic on early microcomputers, and then I taught myself assembly language.

What I recall, was that the most important thing to me was to be able to make 'real' programs that were comparable with the commercial ones that were available.  I didn't want to be using some special 'educational' environment or language.  At that time, real software was written in basic for these machines so there was no stigma associated with it.

What most closely parallels this today?  I'd argue that it has to be PHP.  Web applications are a huge class of what have to be considered to be 'real' applications today.  PHP is remarkably basic-like, and you don't have to do very much to get something that resembles what commercial sites do.

I am certainly not suggesting that PHP is a good language for teaching either the fundamentals of programming, or abstraction, or good style.  Far from it - I think it's terrible in all the same ways that basic was terrible.

It would however let kids get real things built relatively quickly, and it isn't a toy.</description>
		<content:encoded><![CDATA[<p>I learned to program before I was 8 mostly using basic on early microcomputers, and then I taught myself assembly language.</p>
<p>What I recall, was that the most important thing to me was to be able to make &#8216;real&#8217; programs that were comparable with the commercial ones that were available.  I didn&#8217;t want to be using some special &#8216;educational&#8217; environment or language.  At that time, real software was written in basic for these machines so there was no stigma associated with it.</p>
<p>What most closely parallels this today?  I&#8217;d argue that it has to be PHP.  Web applications are a huge class of what have to be considered to be &#8216;real&#8217; applications today.  PHP is remarkably basic-like, and you don&#8217;t have to do very much to get something that resembles what commercial sites do.</p>
<p>I am certainly not suggesting that PHP is a good language for teaching either the fundamentals of programming, or abstraction, or good style.  Far from it - I think it&#8217;s terrible in all the same ways that basic was terrible.</p>
<p>It would however let kids get real things built relatively quickly, and it isn&#8217;t a toy.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Greg Graham</title>
		<link>http://coffeeghost.net/2008/07/01/a-thousand-layers-of-abstractions/#comment-9516</link>
		<dc:creator>Greg Graham</dc:creator>
		<pubDate>Wed, 02 Jul 2008 19:17:47 +0000</pubDate>
		<guid isPermaLink="false">http://coffeeghost.net/2008/07/01/a-thousand-layers-of-abstractions/#comment-9516</guid>
		<description>I started working last fall as the technology director of a boys college preparatory school, by my background is commercial embedded software development. The school has had 5th and 6th grade computer classes for several years that taught Logo, and as I talked to the teachers, I learned that while the classes were very popular 8 years ago, now it seems like the boys are bored and difficult to motivate. They end up covering less material with less understanding than they did in the past.

So, we tried switching the 5th grade class to Scratch last Spring and the results were amazing. They were clearly excited about what they could create, and they not only quickly did the work assigned, but experimented and went far beyond the assignments.

Interestingly, before I started investigating alternatives, I was biased towards teaching a mainstream language like Python, but as I learned about Scratch, I thought it might be worth a try. Also, our teachers were at first averse to the seeming "toy" feel of Scratch, and what they perceived as limitations compared to Logo. However, they were very favorably impressed by the students reaction, so we are switching to Scratch for both 5th and 6th grade next year.

One thing to consider is that these computer classes are in the core curriculum, so every student has to take them. All of our students have to be pretty smart to even get into our school, but only a few of them seem to be interested in computer programming. For someone who is already motivated to learn programming, the low-level approach advocated by Al may serve them well.

This fall I will be teaching a Game Programming elective at the High School level using Game Maker, which is another drag-and-drop system. I will see how that goes and if I determine we have a group of students who would be interested, I will try another course later which is lower-level using PyGame or Pyglet.</description>
		<content:encoded><![CDATA[<p>I started working last fall as the technology director of a boys college preparatory school, by my background is commercial embedded software development. The school has had 5th and 6th grade computer classes for several years that taught Logo, and as I talked to the teachers, I learned that while the classes were very popular 8 years ago, now it seems like the boys are bored and difficult to motivate. They end up covering less material with less understanding than they did in the past.</p>
<p>So, we tried switching the 5th grade class to Scratch last Spring and the results were amazing. They were clearly excited about what they could create, and they not only quickly did the work assigned, but experimented and went far beyond the assignments.</p>
<p>Interestingly, before I started investigating alternatives, I was biased towards teaching a mainstream language like Python, but as I learned about Scratch, I thought it might be worth a try. Also, our teachers were at first averse to the seeming &#8220;toy&#8221; feel of Scratch, and what they perceived as limitations compared to Logo. However, they were very favorably impressed by the students reaction, so we are switching to Scratch for both 5th and 6th grade next year.</p>
<p>One thing to consider is that these computer classes are in the core curriculum, so every student has to take them. All of our students have to be pretty smart to even get into our school, but only a few of them seem to be interested in computer programming. For someone who is already motivated to learn programming, the low-level approach advocated by Al may serve them well.</p>
<p>This fall I will be teaching a Game Programming elective at the High School level using Game Maker, which is another drag-and-drop system. I will see how that goes and if I determine we have a group of students who would be interested, I will try another course later which is lower-level using PyGame or Pyglet.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mohamed Samy</title>
		<link>http://coffeeghost.net/2008/07/01/a-thousand-layers-of-abstractions/#comment-9464</link>
		<dc:creator>Mohamed Samy</dc:creator>
		<pubDate>Wed, 02 Jul 2008 07:13:07 +0000</pubDate>
		<guid isPermaLink="false">http://coffeeghost.net/2008/07/01/a-thousand-layers-of-abstractions/#comment-9464</guid>
		<description>I, too, learned programming in the 80's on MSX BASIC. I think it's the nearest thing to an ideal environment for teaching programming.

Basic has the advantage of being somewhat near to the machine model while retaining the ability to make interesting stuff. 

My position on teaching programming is that the new programmer learns best when he does by hand what advanced compilers usually do automatically. Basic forces you to really plan out your program, since all variables are global and there's no data abstraction, you have to implement the "magic" yourself instead of depending on the compiler to do it for you. While the graphics capabilities give you a nice reward to make it all worth it.

Last year I was training some C beginners and I created a simplistic graphics library to let them make games with. I copied the MSX basic design to the letter, including a hard limit of 30 sprite limit and only the basic 2D drawing primitives. I have a pet theory that minimalism drives the creative mind and I wanted to see the students think about designs and trade-offs and to find creative tricks to work around the limitations. Going too high level and making 3D graphics/animation easy would send the wrong message IMO.</description>
		<content:encoded><![CDATA[<p>I, too, learned programming in the 80&#8217;s on MSX BASIC. I think it&#8217;s the nearest thing to an ideal environment for teaching programming.</p>
<p>Basic has the advantage of being somewhat near to the machine model while retaining the ability to make interesting stuff. </p>
<p>My position on teaching programming is that the new programmer learns best when he does by hand what advanced compilers usually do automatically. Basic forces you to really plan out your program, since all variables are global and there&#8217;s no data abstraction, you have to implement the &#8220;magic&#8221; yourself instead of depending on the compiler to do it for you. While the graphics capabilities give you a nice reward to make it all worth it.</p>
<p>Last year I was training some C beginners and I created a simplistic graphics library to let them make games with. I copied the MSX basic design to the letter, including a hard limit of 30 sprite limit and only the basic 2D drawing primitives. I have a pet theory that minimalism drives the creative mind and I wanted to see the students think about designs and trade-offs and to find creative tricks to work around the limitations. Going too high level and making 3D graphics/animation easy would send the wrong message IMO.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ilya</title>
		<link>http://coffeeghost.net/2008/07/01/a-thousand-layers-of-abstractions/#comment-9444</link>
		<dc:creator>Ilya</dc:creator>
		<pubDate>Wed, 02 Jul 2008 04:06:46 +0000</pubDate>
		<guid isPermaLink="false">http://coffeeghost.net/2008/07/01/a-thousand-layers-of-abstractions/#comment-9444</guid>
		<description>Ah, I am teaching my 9 year old to program and just stumbled on your blog. Here are my thoughts/observations/etc

1. There is absolutely no way you can teach a 9-year old any kind of theoretical principles (as was suggested by Frank). The math is simply not there. 

2. Drag and drop environments are bad for teaching, they make easy things easy, everything else impossible. They just distract from the programming concepts (I tried NXT-G for Mindstorms)

3. Special purpose languages like Logo might be useful, but kids do grow out of them.  Not sure how fast that normally happens.

3. Fortran? Was that a joke?

4. C may be a difficult 1st language for a 9-year old. A lot of low level details. But there is one niche where I think C may be a reasonable choice: Mindstorm programming. 9 year olds LOVE Mindstorms.

5. Java. Oh, well, try to explain
"public static void main()"... And, I think, loops, variables, functions need to be studied before OOP, so I don't think Java is a great choice either.

6. Python. I think python fits the task very well: it's high level (not verbose), it scales into pretty much every niche, it's x-platform..


7. Finally, I think that graphics should be studied as one of the first things. It's very interesting for the kids and allows them to do something which they can show to friends.. Btw, I think plain tkinter is pretty good for teaching graphics: just hide creating of toplevel window and the canvas and you can draw any object and most importantly, it's very easy to move them. So easy to create animations, etc.

8. I dont see much point in bothering with curses, etc.</description>
		<content:encoded><![CDATA[<p>Ah, I am teaching my 9 year old to program and just stumbled on your blog. Here are my thoughts/observations/etc</p>
<p>1. There is absolutely no way you can teach a 9-year old any kind of theoretical principles (as was suggested by Frank). The math is simply not there. </p>
<p>2. Drag and drop environments are bad for teaching, they make easy things easy, everything else impossible. They just distract from the programming concepts (I tried NXT-G for Mindstorms)</p>
<p>3. Special purpose languages like Logo might be useful, but kids do grow out of them.  Not sure how fast that normally happens.</p>
<p>3. Fortran? Was that a joke?</p>
<p>4. C may be a difficult 1st language for a 9-year old. A lot of low level details. But there is one niche where I think C may be a reasonable choice: Mindstorm programming. 9 year olds LOVE Mindstorms.</p>
<p>5. Java. Oh, well, try to explain<br />
&#8220;public static void main()&#8221;&#8230; And, I think, loops, variables, functions need to be studied before OOP, so I don&#8217;t think Java is a great choice either.</p>
<p>6. Python. I think python fits the task very well: it&#8217;s high level (not verbose), it scales into pretty much every niche, it&#8217;s x-platform..</p>
<p>7. Finally, I think that graphics should be studied as one of the first things. It&#8217;s very interesting for the kids and allows them to do something which they can show to friends.. Btw, I think plain tkinter is pretty good for teaching graphics: just hide creating of toplevel window and the canvas and you can draw any object and most importantly, it&#8217;s very easy to move them. So easy to create animations, etc.</p>
<p>8. I dont see much point in bothering with curses, etc.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: sendai</title>
		<link>http://coffeeghost.net/2008/07/01/a-thousand-layers-of-abstractions/#comment-9424</link>
		<dc:creator>sendai</dc:creator>
		<pubDate>Tue, 01 Jul 2008 22:45:57 +0000</pubDate>
		<guid isPermaLink="false">http://coffeeghost.net/2008/07/01/a-thousand-layers-of-abstractions/#comment-9424</guid>
		<description>I agree with Alan about the importance of making stuff happen as quickly as possible.  Say what you will about Visual Basic (where I was introduced to programming), it allows a kid to make neat looking things very quickly.  I wouldn't touch VB these days, but when I was first starting out, it was just the thing to get me hooked.</description>
		<content:encoded><![CDATA[<p>I agree with Alan about the importance of making stuff happen as quickly as possible.  Say what you will about Visual Basic (where I was introduced to programming), it allows a kid to make neat looking things very quickly.  I wouldn&#8217;t touch VB these days, but when I was first starting out, it was just the thing to get me hooked.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: colin</title>
		<link>http://coffeeghost.net/2008/07/01/a-thousand-layers-of-abstractions/#comment-9397</link>
		<dc:creator>colin</dc:creator>
		<pubDate>Tue, 01 Jul 2008 21:00:09 +0000</pubDate>
		<guid isPermaLink="false">http://coffeeghost.net/2008/07/01/a-thousand-layers-of-abstractions/#comment-9397</guid>
		<description>teach children how to make firefox extensions; then they will be useful minions, muwahaha. 

seriously, though. i think that if you could get a group of widgets around, that they could use, it would be a lot of fun. learning the "framework" is very very important to programming. give them a framework, and let them use it! teach loops, conditionals, input/output, functions, classes. don't bother teaching them System.Out.Println(). they'll have do deal with that soon enough. ;)</description>
		<content:encoded><![CDATA[<p>teach children how to make firefox extensions; then they will be useful minions, muwahaha. </p>
<p>seriously, though. i think that if you could get a group of widgets around, that they could use, it would be a lot of fun. learning the &#8220;framework&#8221; is very very important to programming. give them a framework, and let them use it! teach loops, conditionals, input/output, functions, classes. don&#8217;t bother teaching them System.Out.Println(). they&#8217;ll have do deal with that soon enough. ;)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Frank</title>
		<link>http://coffeeghost.net/2008/07/01/a-thousand-layers-of-abstractions/#comment-9395</link>
		<dc:creator>Frank</dc:creator>
		<pubDate>Tue, 01 Jul 2008 20:25:38 +0000</pubDate>
		<guid isPermaLink="false">http://coffeeghost.net/2008/07/01/a-thousand-layers-of-abstractions/#comment-9395</guid>
		<description>Interesting ideas. Personally I say we should teach the essential procedural languages like fortran and c, before we have students learn anything else. Just as you would want them to know Newton before they tackled Einstein, I think the fudamental principles of turing machines, algorithms, etc. need to be enforced along with a classic language like c. Then at that point they can learn some of the more recent approaches. Just a thought.</description>
		<content:encoded><![CDATA[<p>Interesting ideas. Personally I say we should teach the essential procedural languages like fortran and c, before we have students learn anything else. Just as you would want them to know Newton before they tackled Einstein, I think the fudamental principles of turing machines, algorithms, etc. need to be enforced along with a classic language like c. Then at that point they can learn some of the more recent approaches. Just a thought.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
