Sunday, September 23, 2007

how to live and die

Read the commentary by Mark Guzdial and follow the links to Randy Pausch's last lecture.

Very moving. Great comment by Mark about the third head fake.

Friday, September 21, 2007

squeak by example: new book

Squeak by Example is just what I needed as a guide to learn smalltalk/squeak programming language

I've learnt some new stuff (mainly for beginners)

Red button, yellow button, blue button: From the first chapter I learnt that you can easily reconfigure your mouse buttons so that now they are more compatible with the conventional Windows GUI. Now I have:
  • left button (red button) displays the World menu
  • right button (yellow button) displays a context menu
  • middle button (blue button) displays the morphic halo
I've learnt how to maintain multiple images, eg. so I have one image named SBE in which I can develop the projects from the book and another image named Squeak3.9 which I can use to start something fresh

I've built a game called Quinto and eventually got it working! That's a big step because initially my goal was to develop the Africa map game (already developed using GameMaker) in squeak

The game involves clicking with the mouse which puts a pattern of coloured cells (click once produces blue, click again produces yellow) on the board. The aim is to maximise the blue cells which is tricky because of the way the pattern produced by a click overlaps.

I already knew something about making subclasses, methods, testing as you make and inspecting objects from earlier exercises. But I learnt new stuff about organising methods into categories (called protocols) and using the debugger.

Then I learnt that you could file out just the code for the game and then file in to another image (or send that game file off to a friend)

Initially my game didn't work properly so I joined the beginners squeak list and asked some questions - and received a couple of helpful replies quickly. It turned out that the problem was that I was using version 3.8 rather than 3.9 recommended for the book. When I filed in my code into the 3.9 version the game worked properly straight away!

I've only read a couple of chapters of the book so far, but it's great. Everything is explained very clearly. There is a free online version but I've ordered a hard copy as well.

Many thanks to the authors: Andrew P. Black, Stéphane Ducasse, Oscar Nierstrasz, Damien Pollet with Damien Cassou and Marcus Denker

is papert a purist?

JTPowell's blog (second grade teacher) is inspirational

He is teaching himself Scratch, reading the MIT's Open Course Ware Readings on The Nature of Constructionist Learning (some great readings in this list) and then blogging about his learning process as it develops

Does the perception that Papert is a purist who has been advocating never teach anything directly to the learner come from Papert himself?

Currently, JT is agonising about this and I left a comment on his blog because I went through a similar agonising about breaking down the wall between behaviourism and constructionism when developing quadratics drill software in logo for my students

I think the origins of this purist perception comes from Piaget:
In order for a child to understand something, he must construct it himself, he must reinvent it. Every time we teach a child something, we keep him from inventing it himself.
However, this position was repudiated both by Papert and even more clearly by Kevin McGee in his 1992 thesis, Play and the Genesis of Middle Manager Agents (I have a hard copy):
Piaget's statement is ... potentially dangerous ... There are two processes being alluded to in Piaget's remark. On the one hand, there is the standard constructivist view that all knowledge is ultimately constructed by the individual. On the other hand, there is the further implication that it is somehow bad for individuals not to "reinvent the wheel" by themselves. One way to think about this is in terms of the difference between bringing about agent-conflict and resolving agent-conflict. Individuals need to be able to do both - and any approach to learning which de-emphasises one is seriously limited ...

If we really accept Piaget's strong emphasis on the large-scale, self-equilibrating, systemic nature of mind, then the debate over whether to give students answers or make them struggle for them falls almost entirely outside of the problem of conceptual innovation... it is not possible to give "answers" to individuals who don't have a question (don't perceive a problem to be solved); "making them struggle" is pointless since they have no idea what it is they are struggling for.

It is important to critique Piaget's "invention" quote seriously ... because a misreading of it seems to underly so much bad constructivist pedagogy ...
Kevin McGee was one of Papert's students. Another thought here is that Idit Harel (another Papert student) developed her theoretical approach by combining Vygotsky's zone of proximal development with Papert's constructionism. Really the teacher sets up a zone of appropriate struggle through the environment they help co-create with their students.

Sunday, September 16, 2007

Noel Pearson's "radical centre" concept applied to education

Noel Pearson, The Urgent Quest for a Radical Political Centre:

Noel Pearson understands dialectics and has a philosophical perspective as well as a pragmatic position on aboriginal policy:
The "radical centre" in politics may be defined as the intense resolution of the tensions between opposing principles, a resolution that produces the synthesis of optimum policy. The radical centre is not to be found in simply splitting the difference between the stark and weak tensions from either side of popularly conceived discourse, but rather where the dialectical tension is most intense and the policy positions much closer than most people imagine.

We are prisoners of our metaphors: by thinking of realism/pragmatism and idealism as opposite ends of a two-dimensional plane, we see leaders inclining to one side or the other. Those who harbour ideals but who need to work within the parameters of real power (as opposed to simply cloaking lazy capitulation under the easy mantle of righteous impotence) end up splitting the difference somewhere between ideals and reality. This is called compromise. And it is all too often of a low denominator.

I prefer a pyramid metaphor of leadership, with one side being realism and the other idealism, and the quality of leadership dependent on how closely the two sides are brought together. The apex of leadership is the point where the two sides meet. The highest ideals in the affairs of humans on earth are realised when leadership strives to secure them through close attention to reality.

The best leadership occurs at the point of highest tension between ideals and reality ...

Hence, in Australia what is known as the "Right" promotes indigenous responsibility. What is known as the "Left" promotes indigenous rights. Usually, the "Right" and the "Left" righteously denounce each other. The "Left" (eg. the Greens) says that the Howard government is "callous', "brutal", "lacking compassion". The "Right" says to the "Left" - you are not facing reality, drug abuse, welfare dependency and child abuse in aboriginal communities are realities that simply have do be dealt with.

Read the whole Pearson article. For example:
When I decided that we could no longer go on without saying that our people held responsibilities as well as rights, it was not a repudiation of rights. It was just that all the talk, all the advocacy, all the analysis, all the leadership, and all the policy and politics was about rights. There was no talk about responsibility.
Pearson had to take up the indigenous responsibility agenda because no one else was doing it effectively. Now Pearson is accused of no longer supporting indigenous rights by those who don't understand his real position.

I support Pearson, for the first time in many years Australia now has a genuine insightful political leader, the real thing.

I'm also wondering if the general analytical approach from Pearson here could be more consciously and beneficially applied to other areas of discourse: education, OLPC, global warming, Iraq war etc.

What it presupposes is that the elements of good policy are already there on the stage and have been taken up in varying degrees in different mixes by established large political parties. And then by doing the hard work of dialectical analysis those bits and pieces can be put back together in such a way that perhaps can develop mass appeal.

Certainly, I can see that applies to education policy, to recycle something I said from the wellington grey physics curriculum reform debacle:
Science and maths education seems to be polarising between a back to basics movement and soft sociological reform, often ineffectual "discovery learning". I believe there is a third way, that traditional science education can be reformed and still remain real science. Student designed computer simulations using software such as Etoys / Squeak could play an important role here.
Summarising some of the issues:
  • watering down, diluting, trivializing science and maths curriculum
  • converting science / maths content into sociological content
  • using discovery or inquiry based learning as a substitute for hard facts
This time, I make a connection here between Pearson's dialectic of the radical centre and my analysis of the polarising between a back to basics movement (what the "Right" says) and soft sociological reform, often ineffectual "discovery learning" (what the "Left" says). Both sides are shouting past each other and no progress is being made.

The resolution of this problem comes about through Papert's concept of "hard fun" and Kay's identification of "non universals". First identify the important concepts and then find an engaging and realistic way to teach them to children.

Thursday, September 13, 2007

smalltalk: philosophy, metaphor, semantics, syntax

Programming languages can be categorized in a number of ways: imperative, applicative, logic-based, problem-oriented, etc. But they all seem to be either an "agglutination of features" or a "crystallization of style." COBOL, PL/1, Ada, etc., belong to the first kind; LISP, APL-- and Smalltalk--are the second kind. It is probably not an accident that the agglutinative languages all seem to have been instigated by committees, and the crystallization languages by a single person.

Smalltalk's design--and existence--is due to the insight that everything we can describe can be represented by the recursive composition of a single kind of behavioral building block that hides its combination of state and process inside itself and can be dealt with only through the exchange of messages. Philosophically, Smalltalk's objects have much in common with the monads of Leibniz and the notions of 20th century physics and biology. Its way of making objects is quite Platonic in that some of them act as idealisations of concepts--Ideas--from which manifestations can be created. That the Ideas are themselves manifestations (of the Idea-Idea) and that the Idea-Idea is a-kind-of Manifestation-Idea--which is a-kind-of itself, so that the system is completely self-describing-- would have been appreciated by Plato as an extremely practical joke ...

I recalled the monads of Leibniz, the "dividing nature at its joints" discourse of Plato, and other attempts to parse complexity. Of course, philosophy is about opinion and engineering is about deeds, with science the happy medium somewhere in between. It is not too much of an exaggeration to say that most of my ideas from then on took their roots from Simula--but not as an attempt to improve it. It was the promise of an entirely new way to structure computations that took my fancy. As it turned out, it would take quite a few years to understand how to use the insights and to devise efficient mechanisms to execute them.
- alan kay, the early history of smalltalk
Most books on programming that I have seen don't include much in the way of philosophy or metaphor. They seem to be filled with detailed definitions and techniques.

But from the alan kay quote above it's clear that Smalltalk, the first OOPs language drew heavily from philosophical principles - the monads of Leibniz, "dividing nature at its joints" from Plato. And that this approach leads to a more elegant and internally consistent programming language ("crystallization of style"), rather than a mix of human memory intensive bits and pieces ("agglutination of features")

Maybe we would be better off today if philosophy and also the use of metaphor was taught side by side with programming?

<message receiver><message>
<receiver object><message>
<message receiver><message selector (optional message arguments>

Messages trigger methods in receiving objects

The above is the basic structure of smalltalk semantics. This initially appears easy to follow but for me it became confusing at the level of specific examples

100 + 200

In this case 100 is a message receiver, + is a message selector (binary type) and 200 is an argument for +

Both 100 and 200 are SmallInteger class instances

I found two things difficult to understand (counter intuitive) about this example:
1) Why was + being called a selector, ie. what was it selecting?
2) The 100 and 200 which are similar types of things are behaving in different ways in the example. The 100 is a message receiver and the 200 is an argument to the + message selector

This sort of thing frustrates me because in the end I'm reduced to rote learning through not really understanding the underlying meaning of the way in which smalltalk was designed. Now thanks to help from some experts I have an explanation.

The metaphors that work here are:
An object (which has various properties) receives a message which tweaks one of those properties

Or a language metaphor:
The subject (which comes first) is directed by the different parts of the rest of the sentence (verbs, etc.)

Message selectors (such as +) are called selectors because they select properties from the receiving object. As an object myself, I can visualise and personalise this quite easily. If someone comes to me and delivers a message then the particularity of the message switches on (selects) certain parts of my mind, ie. accesses particular properties of my mind

I don't really need to know the details of the SmallInteger class to appreciate this, just that the + message selector will trigger something inside that will enable it to complete the task of adding +200 to 100

Another thing that confused me was finding the right metaphor to explain this particular thing. Another smalltalk metaphor is the biological cell, that the contents of the cell are protected or encapsulated and that they respond to messages from outside.

This metaphor is great for helping to understand encapsulation and complexity - cells can diversify and combine to create complex organisms. But it didn't help me explain why + was called a message selector. However, the object and language metaphors did help here. So you need to know the right metaphors for the particular task at hand.

I'll round this out a bit more by using some other examples, mainly from Stephane Ducasse's book, Squeak: Learn Programming with Robots

There are 3 types of messages - unary, binary and keyword

Unary: pica east
"pica" (robot object) is the message receiver. "east" is the message selector. It's just like someone approach me and says, "turn east" That selects the part of my mind that thinks about directions.

Binary: 100 + 200
Already discussed

Keyword: pica go: 100
"pica" (robot object) is the message receiver. go: is a keyword message selectors, they accept arguments (100). So the message go: 100 is sent to the robot.

Keyword with multiple arguments:
pica polygon: numberOfSides size: sizeValue
"pica" (robot object) is the message receiver. The method or message selector is the double barreled polygon:size: (counter intuitive initially). The arguments are numberOfSides and sizeValue

Another Keyword with multiple arguments:
33 between: 30 and: 50
33 is the message receiver. The method or message selector is the double barreled between:and: The message arguments are 30 and 50

Ducasse, Stephane. Squeak: Learn Programming with Robots (2005) amazon, bots inc

The Monadology by Gottfried Wilhelm Liebniz

The Problem of Universals(philosophical essay)
"Plato was clearly a Realist about universals. His most famous metaphor for the reality of universals was to say that real universals "cut nature at its joints" (Phaedrus 265d-266a). He compares the task of definition to the job of being a butcher. The clumsy butcher just hacks things up in any old way, but the expert butcher deftly slices the animal at its natural joints, neatly separating naturally distinct segments of the animal."

Wednesday, September 12, 2007

Helping the poor developmentally: Denmark compared with Australia

It seems that Denmark has a government, a professional IT society and an aid organisations which work together and display some commitment to using technology innovatively to help the poorest people on this earth. To help the poor to develop, not just to rescue them from starvation or disease:
Some 99 percent of children growing up in developing countries leave school without ever having touched a computer.

But the organisers behind the One Laptop Per Child (OLPC) programme and Denmark’s aid organisation, Danida, hope to change that with the durable, inexpensive XO Computer ...

The computer’s innovative construction earned it accolades and a top prize at the Index: Awards handed out in Copenhagen last month to recognise groundbreaking ‘designs to improve life’. It also won the attention of Ulla Tørnæs, the development co-ordination minister

The organisation will conduct a nationwide campaign among private companies and foundations to raise money for purchasing the computer which will then be part of aid organisation Danida’s supplies to foreign countries.

Five countries are already on the receiving end of the project, and Danida hopes to begin a pilot project with the XO Computer in Nepal in April next year. In addition, Bhutan, Nicaragua, Bolivia and Benin have signed on for shipments.

The Danish IT Society, the country’s largest trade organisation for IT professionals, indicated the project will be part of its 50th anniversary celebration which includes putting focus on the Third World.

Tony Franke, the managing director of the Danish IT Society, hopes the initiative can level the playing field between rich and poor countries in the Digital Age.

‘The computer should not just be seen as a piece of technology. It’s an educational project which first and foremost is intended for children, but at the same time will involve the whole family who through their children will gain familiarity with the digital world.’

Franke has already encountered great enthusiasm from potential contributors, and he expected significant support for the project.

‘The prospects are spreading like rings in the water. It begins as an educational project but in reality it’s a revolution for people that are born and grow up in a poor village but suddenly gain contact with the rest of the world,’ Franke said.
- extracts from 'The Copenhagen Post'
I wonder how we could get this sort of thing happening in Australia? Would our government, our aid organisations and our IT societies pick up on this idea and implement it here. How come it is possible in Denmark but seems like a fantasy to think like this in Australia?

Monday, September 10, 2007

what is the effect of technology, work, play and the media in general on our intelligence?

What is the effect of technology, work, play and the media in general on our intelligence?
Are we becoming smarter or dumber?
Are we living in some sort of Huxleyian "Brave New World" fog, endlessly distracted from the vital issues of our time? A western form of brainwashing? Contrast this with the Marxist view that the capitalist system creates its own gravediggers. Which is correct?
Or, are we becoming smarter but feel unfulfilled because we sense our lives could be much better?

Were people smarter when print was the dominant medium? (Postman and Gatto seem to be saying this)
What effects do TV, video games and the internet have on intelligence?
Is there a general upward trend in intelligence irrespective of media?
Are we getting smarter but still not utilising our full potential, that many are missing out on really important "higher learning" (whatever that is)?
Is the western canon important. Are there important texts or concepts that an educated person ought to read or develop? (Kay has articulated a list of "non universals")
Does the way in which work is organised make us less or more intelligent? (Braverman argued less; Adler argued more)
Are political influences, such as the politics of inclusion, making us dumber? (Furedi argues this)

"Dumbing down" is a popular phrase. Some people argue that things as varied as TV, playing video games, School and going to work dumb you down. But others argue that TV and video games can make you smarter. Some even argue that School can make you smarter but that is very uncool :-)

Anti elitism and egalitarianism are popular sentiments. But do these sentiments mask anti-intellectualism?

I'd like to explore these questions:

1. the effect of broad media changes on our intelligence
2. the effect of personal computing on our intelligence
3. the effect of the internet and "web2.0" on our intelligence
4. the effect of School on our intelligence
5. the effect of work on our intelligence
6. the effect of the politics of inclusion on our intelligence

(I might come back and update and / or annotate this from time to time)
I am currently reading some of this material and would be interested in the opinions of others who are reading it.

1. the effect of broad media changes on our intelligence

Postman, Neil. Amusing Ourselves to Death: Public Discourse in the Age of Show Business (1985) 116 reviews

Bauerlein, Mark. The Dumbest Generation: How the Digital Age Stupefies Young Americans and Jeopardizes Our Future (Or, Don't Trust Anyone Under 30). (amazon)
Recommended by Mark Nichols in this substantial blog: Solid Thinking

Gee, James Paul. What Video Games Have to Teach Us About Learning and Literacy (2003) 26 reviews

Johnson, Steven. Everything Bad is Good for You: How Today's Popular Culture is Actually Making Us Smarter (2005) 70 reviews

2. the effect of personal computing on our intelligence

Kay, Alan. Some annotated references
"Point of view is worth 80 IQ points"
: At PARC we had a slogan: "Point of view is worth 80 IQ points." It was based on a few things from the past like how smart you had to be in Roman times to multiply two numbers together; only geniuses did it. We haven't gotten any smarter, we've just changed our representation system. We think better generally by inventing better representations; that's something that we as computer scientists recognize as one of the main things that we try to do.

another explanation
: what is special about the computer is analogous to and an advance on what was special about writing and then printing. It's not about automating past forms that has the big impact, but as McLuhan pointed out, when you are able to change the nature of representation and argumentation, those who learn these new ways will wind up to be qualtitatively different and better thinkers, and this will (usually) help advance our limited conceptions of civilization (source)

Some recent discussion about non universals and powerful ideas here

Papert, Seymour. Mindstorms: Children, Computers and Powerful Ideas (1980) my review

Papert, Seymour. The Children's Machine: Rethinking School in the Age of the Computer (1993)

Maxwell, John. Tracing the Dynabook: A Study of Technocultural Transformations (2006) link to pdf

3. the effect of the internet and web2.0 on our intelligence

Keen, Andrew. The Cult of the Amateur: How Today's Internet is Killing Our Culture (2007) 50 reviews

Is Google Making Us Stupid? Nicholas Carr (argues that net use works against deep, reflective reading; also discusses hisorical parallels)

Weinberger, David. Everything is Miscellaneous: The Power of the New Digital Disorder

video of a debate between Weinberger and Keen

Clay Shirky is my favourite informed commentator on these questions at the Many2Many site. For example, Andrew Keen: Rescuing 'Luddite' from the Luddites, is a critique of Keen

Friedman, Thomas L. The World is Flat: A Brief History of the Twenty-First Century (2005) reviews

Locke, Chris; Searls, Doc; Weinberger, David. The ClueTrain Manifesto: The End of Business as Usual 95 theses

4. the effects of School on our intelligence

Gatto, John Taylor. Dumbing Us Down: The Hidden Curriculum of Compulsory Schooling (1992). Gatto also has a web site, Challenging the Myths of Modern Schooling

the "outcomes based education literature
Berlach, Richard G., Outcomes-Based Education and The Death of Knowledge pdf
Killen, Roy. Outcomes-Based Education: Principles and Possibilities html

5. the effect of work on our intelligence

Braverman, Harry. Labor and Monopoly Capital (1974)

Adler, Paul. Technology and the Future of the Firm: A Schumpeterian Research Agenda (1985)

Langer, Albert. Technology and the Future of Work (1985)

Adler, Paul. Technology and Us (1986)

Adler, Paul. Technology and the Future of Work (1992) description

Postrel, Virginia. The Future and Its Enemies (1998) excerpts reviews

6. the effect of the politics of inclusion on our intelligence

Furedi, Frank. Where Have All The Intellectuals Gone?: Confronting 21st Century Philistinism (2004) reviews

Friday, September 07, 2007

when kids program visually in etoys / squeak what is happening programatically under the hood?

My goal here is to understand OOPs and how it is connected to visual programming from a practical perspective. This is putting some meta issues of the meaning, history, philosophy and importance of OOPs to one side, temporarily.

When you program in etoys you first draw something, then you convert it to an object, then you display a Viewer which enables you to observe the properties (heading, x position, y position etc.) and write scripts for the object. You can also produce a second object and then pass variables between objects. For example, you can pass the heading of a rocket's steering wheel from the steering wheel to a script which belongs to the rocket.

There is stuff happening here which I haven't seen in other programming systems. What other system enables you to visually pass a variable from one object to another and then lets you observe it running and change it while it is running? What is about Squeak / Smalltalk that makes this possible when it is apparently not possible in other programs like Game Maker or Flash?

Specifically, I want to understand what is happening behind the scenes. What classes are involved? And in connection to an earlier blog about OOPs: Is etoys programming an example of "class create" or "object use"?

This involves looking behind the etoys visual interface to the Smalltalk classes and code which is making it possible.

Understanding this might have important implications wrt how we first teach programming to our youth. Can OOPs be taught to youth before procedural programming?

I previously wrote a blog about OOPs in which I quoted from mark guzdial's blog extensively. Mark is saying that OOPs is harder than procedural, with specific reference to "class create" being harder but not so much wrt "object use":
- "Object-use" means instantiating objects, applying methods to objects, writing new methods.
- "Class-create" means creating new classes and solving problems by writing different methods in different classes (distributing responsibility).
Charles Stewart left a comment on my blog suggesting I look at prototype based programming, he left a link to a wikipedia article about it. When I looked that up it said that a prototype was cloning of instances and called it class-less and it made reference to the concept coming from Self and Squeak

Then when I read about the background to morphic I came across this (User-Scripting has since evolved into etoys):
"In the User-Scripting style, you construct surface graphics by directly assembling standard Morphic parts -- e.g. Rectangles, Images, Joysticks, etc., by dragging them from a Parts Bin and arranging them as desired, and then you add user-defined state and behavior by adding instance variables and writing methods for "Players" who represent the individual morphs you wish to script.

The user thus does not directly subclass any particular kind of Morph, but rather she assembles Morphs and gives them special state and behavior by associating them with "Players", which are the fundamental user-scriptable object types for User Scripting."
- IntroductionToMorphic/Morphic-Styles-Scripting
How to look behind the scenes?

If you click on the light gray debug halo, the one with a spanner icon, a menu appears which enables you to inspect the morph. Then by clicking on extension you can see the important classes involved in the programming side of things. Then you select (highlight) the class name you want more information about and followed by Alt+b to open the browser on that class. This contains all the information you want.

Smalltalk has the open-ness and tools to enable you to look under the hood which is a significant other advantage for learning. Any proprietary program which hides or blocks information is reducing the potential to learn important under the hood knowledge.

By poking around in this way I discovered that the important classes involved are MorphExtension and the Player class, which are described as follows:
Object subclass: #MorphExtension
instanceVariableNames: 'locked visible sticky balloonText balloonTextSelector externalName isPartsDonor actorState player eventHandler otherProperties'
classVariableNames: ''
poolDictionaries: ''
category: 'Morphic-Kernel'

MorphExtension provides access to extra instance state that is not required in most simple morphs. This allows simple morphs to remain relatively lightweight while still admitting more complex structures as necessary. The otherProperties field takes this policy to the extreme of allowing any number of additional named attributes, albeit at a certain cost in speed and space.

Model subclass: #Player
instanceVariableNames: 'costume costumes'
classVariableNames: 'BiggestSubclassNumber TimeOfError'
poolDictionaries: 'References'
category: 'Morphic-Scripting'

The fundamental user-scriptable entity. Always represented by a user-specific subclass of Player; instance vars and methods relate to user-defined structures.

costume is a Morph, the primary morph I am currently wearing for graphical display.

Scripts are defined in subclasses of Player. These are UniClasses.

Messages in scripts are sent to Players. A Player may delegate to its costume, or to an object the costume suggests. Or, a Player may designate some other object to receive the script messages it does not understand. (see doesNotUnderstand:)

The UnscriptedPlayer subclass of the Player class is also important:
Player subclass: #UnscriptedPlayer
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'Morphic-Scripting'

My instances are Player objects that have not been scripted, and which hence do not require a unique scripts dictionary, etc. As soon as needed, I am transformed automatically into a unique subclass of Player.

I looked at the before and after situation of adding a script to a rocket object. The important changes are in bold.

a MorphExtension (3333) [externalName = rocket ] [player = an UnscriptedPlayer (1733) named rocket] [other: (rotationCenter -> 0.5@0.5) (forwardDirection -> 0.0) (baseGraphic -> Form(70x64x32))]

a MorphExtension (3333) [player = a Player66 (1733) named rocket] [other: (rotationCenter -> 0.5@0.5) (trailDotSize -> 6) (forwardDirection -> 0.0) (baseGraphic -> Form(70x64x32))]

So, when I added the script the UnscriptedPlayer class changes into Player66 class

Then if I inspect Player66 class in the browser I can see that it has the script I wrote and that the Steer object has been passed into the Player class of the rocket object:

self forward: 1.
self setPenSize: 1.
self turn: Steer getHeading / (self beNotZero: 3)


Even though I've learnt a lot I'm still not certain about whether this is "class create" or "object use". I still have a lot to learn about OOPs before I can clearly answer this question or even judge whether it is an important question to ask.

However, I do have a much clearer picture of what is happening behind the scenes when I do etoys scripting

Probably the main thing I have gained from this exercise was the knowledge that Squeak has good tools for quickly inspecting objects and classes, that as a system it encourages learning in this sort of way.

web2.0 spray: Stager versus Downes

Stager: Why Teachers Don't Use Web 2.0 - an historical perspective
Downes: Stager, Logo and Web 2.0

Gary Stager loves logo and knows what he is talking about. But when it comes to "web2.0" he shoots from the hip and there is a lot of spray. Moreover, there is some irony involved in criticising web2.0 so strongly in a blog post.

Stephen Downes has done some heavy lifting wrt theorising "web2.0". But in his response he either ignored or didn't understand Stager's logo philosophy and indulges in snide comments about "old-school" versus "new-school"

This is not a real debate, yet. It is two experts sounding forth on their favourite topics without taking the trouble to look deeper at what the other is really trying to say.

Here is my take on some of the issues

Disruptive technologies
Both logo and web2.0 technologies are disruptive to traditional School. So Stager and Downes ought to be on the same side here, more or less.

I have studied Papert deeply but (sadly) not Illich or Freire. My impression is that they are all on about deschooling society. Both Stager and Downes are arguing for more political and social activism wrt to school reform and are critical of those who can't see this. Where is the difference?

Logo has a history, which is eloquently summarised in Stagers post. Web2.0 advocates ought to study and acknowledge that history deeply. Otherwise they will be blinded and trapped in the glitter of the present and not put it into perspective. But web2.0 in general is not about studying history deeply. It's the exception. Web 1.0 is almost as good for doing that.

Stager says that Papert was a deep expert leader. Downes says that you have to work it out by yourself with the help of your RSS feed. Both are right but who in the web2.0 movement has actually understood Papert and situated his contribution historically? Quite rightly, Stager is angry about that.

Objects to think with
Stager's point about "objects to think with" is important but needs further elaboration. Downes response is reasonable as a starter but shows no understanding of Papert's deeper meaning of this term

Developmental approach
Should software be developed with children in mind (Stager) or is that not so important because we want to bridge the artificial School / Society gap anyway (Downes)? I think to answer that does require some study of the history of computing and educational computing software. Who is going to do that?

Information theorising
Downes has done heavy lifting here and so is rightly aggrieved at Stager's one liners. Needs more work. In general the "web2.0" response is not to read Downes theories, understand them and respond to them but just to keep on blogging

Tools and philosophy
Stager: "It is difficult to sustain a "revolution" when its goals remain unclear and the soldiers rally around the tools, not ideals"

Downes protests because he has done some significant philosophical work here. But since Downes rejects constructionism that's an ongoing debate that needs to happen. It would be a good thing if we had more debate about tools, philosophy and the human condition.

I think there is some convergence between Papert's philosophy (see invitation to immersion) and the more articulate "web2.0" philosophy (eg. blog of proximal development). But only some. At it's best web2.0 in education is mainly about Vygotsky and written language, whereas Papert is mainly about maths-land (logo) and science-land (LEGO logo). Both are important but the approach is different

More on my views about some of these issues here: a challenge to connectivism

Tuesday, September 04, 2007

morphic / etoys is a superior graphical user interface and programming development system

Morphic is a superior dynamic graphics system which remains undiscovered by our formal education system and so remains hidden from our youth and teachers. It has been around since circa 1995.

The purpose of this article is to outline the argument for superiority. A different article could be written discussing the reasons for the remarkable fact that a superior system has remained largely undiscovered by education systems for over 10 years.

A quick look at the main design features, with screenshots, makes the superiority of morphic clear. The manipulations and screen shots were done in a recent version of squeak obtained from the squeakland site.

1. Concreteness and Directness

Everything on the screen is a morph and can be directly touched and manipulated. Action by contact not action at a distance.

By direct manipulation programming, using the halos, I can quickly alter the size, colour, border and drop shadow of the original rectangle, as shown.

Or I can use the menu halo to alter a closed curve morph to an open curve and use the handles to reshape it.

2. Liveness

If I click on the cyan coloured halo which has an eye icon, then an interactive Viewer pops up which enables me to see the car's x and y co-ordinates and heading in real time. I can also make the car move, turn, make noises and many other things (only part of the Viewer is shown in the screenshot)

The script can be changed even as it runs, allowing the user to see the effect of script changes immediately. The script can be turned on and off directly through the clock icon. Just as you don’t have to (and can’t!) turn off the laws of physics before manipulating an object in the real world, you needn’t suspend stepping before manipulating a morph or even editing its code.

In morphic any morph can have a life of its own: object inspectors update, piano rolls scroll, movies play:

What are morphs? What can they do?

morph = shape or form, from the Greek.

Morphic is a subset of classes within the the Squeak / Smalltalk programming language.

All the things you see on the screen are morphs. So the Squeak GUI is built from morphic and can be reprogrammed if you have the skill and inclination to do that.

Morphs can be programmed to:
  • perform actions in response to user inputs
  • perform actions when they interact with other morphs
  • perform actions at regular intervals
  • control the placement and size of submorphs in building more complex objects
With morphic there is more variety than with more conventional GUI builders

Some history

The first version of morphic was developed by John Maloney and Randy Smith at Sun Microsystems Laboratories as the user interface construction environment for the Self 4.0 system. Self is a prototypebased language, similar to Smalltalk but without classes or assignment. ... For Squeak, morphic was re-written from scratch in Smalltalk.


The Halo features (direct manipulation programming of size, colour etc.) and the Viewer features (a dynamic graphical inspector and browser) are what make morphic superior to other systems IMHO. Other systems have part of the Scriptor feature (a place to define, edit, test, save and schedule scripts) but not all of it. They don't have late binding, the ability to make changes while the system is running. The ability to test and reprogram on the fly while the program is running is an enormous boost to understanding variables and debugging code.

An Introduction to Morphic: The Squeak User Interface Framework by John Maloney
This describes morphic, how it works, design principles, some history and compares it with the MVC (Model-View-Controller) framework. The author is one of the original developers of morphic.

Morphic - The Squeak User Interface by Juan Manuel Vuletich
An excellent introduction to the history and design of Morphic. Describes the evolution of Morphic from MVC and Self

Morphic tutorials

Saturday, September 01, 2007

in general programmers are not creatures of the Enlightenment

Should we even try to teach programming? I have met hundreds of programmers in the last 30 years and can see no discernible influence of programming on their general ability to think well or to take an enlightened stance on human knowledge. If anything, the opposite is true. Expert knowledge often remains rooted in the environments in which it was first learned--and most metaphorical extensions result in misleading analogies. A remarkable number off artists, scientists, philosophers are quite dull outside of their specialty (and one suspects within it as well). The first siren's song we need to be wary of is the one that promises a connection between an interesting pursuit and interesting thoughts. The music is not in the piano, and it is possible to graduate Julliard without finding or feeling it.
- alan kay, The Early History of Smalltalk
This has been niggling away at me in the background and in some of my dialogues with others for some time now

I have on occasions argued that programming skills in their own right do stand for "higher order thinking" (a phrase I'm no longer happy with) and deserve their own place in the sun.

And I have argued against the Victorian VELS (integration of computing into the curriculum) on the grounds that young students need exposure to skilled computing teachers and not the English teacher who sits out the front marking while kids get on with their word processing (and playing games they have smuggled in)

But the above quote from alan kay and his general emphasis that the main important thing is the non univerals does force me to look again at these stances

I wasn't wrong about the underlying problems of computer integration. I wasn't wrong that programming skills are in some hard to define way, "advanced". It's not so much that my arguments were wrong but that I didn't have a sufficiently firm grasp of the big picture, that the non universal powerful ideas really is the main issue.

This probably makes school reform harder still. Because the ways Schools generally teach maths and science is not powerful either. I've rocked the boat in science faculties in the past and they didn't like it. And teaching maths on the computer using logo? Yes, you can dabble with that in the middle school if you want to, but there just isn't time for it in the senior curriculum.

Programming can be powerful but unless we get the context and environment right then any gains will be much less than what could have been achieved. As Alan Kay points out many good programmers don't inspire in a more general sense. The harmony is not in the piano. logo or game maker is not weeties for the brain.

Although some of my own history is good it is easy to lose the way, to lose track of the powerful ideas, in the complexity and inflexibility of School

The reason I first decided to learn to program is that I read parts of a cult book, Godel, Escher, Bach by Doug Hofstadter (230 amazon customer reviews) and decided the only way I could possibly understand recursion was to explore it through programming. Mindstorm by Seymour Papert (my review) was another seminal influence, which led me eventually to comp.lang.logo on USENET, which became a vital part of my learning environment for a few years. Good start. So I explored some logo, did fractals and other interesting stuff (ISDP, Quadratics, immersion)

But 20+ years later I'm teaching year 9 specialist computer classes basic IT skills like file management and word processing in a computer lab. I'm bored with it, slipping into darkness.

Of course, I've been doing other interesting stuff along the way, like game making, but overall I've taken my eye off the main game -->> the powerful ideas / non universals. I don't see any easy answers for this in the context of School. But we need to talk about it.