A problem hindering SmallTalk's popularity:

Richard A. O'Keefe ok at cs.otago.ac.nz
Fri Jul 26 02:41:20 UTC 2002


Lily Smith <yinyuqin2000 at yahoo.com> wrote:
	The major reason that why SmallTalk is way less popular as
	Microsoft VB is that SmallTalk lacks documentatation and a good
	tutorial.

Lily Smith is half right, but only half.

"Smalltalk" is not a product, the way Visual Basic is a product.
"Smalltalk" is a *FAMILY* of programming languages with a common heritage,
including but not limited to
    Dolphin Smalltalk
    VisualWorks Smalltalk <-+
    IBM Visual Age Smalltalk <-+
    Squeak <--
    Smalltalk/X
where the ones labelled "<-" are ones that I have at one time or another
downloaded.  The ones labelled "<-+" have copious, nay, VOLUMINOUS
documentation, including lots of tutorial material.

There are DOZENS of books about Smalltalk in general.
The original Smalltalk books were really great and any place that
requires students to learn Smalltalk probably has them.
I have used "Inside Smalltalk" and found it extremely helpful.

Stephane Ducasse (may he flourish like the green bay free!)
provides free electronic copies of several out-of-print but still
useful Smalltalk books at

    http://www.iam.unibe.ch/~ducasse/WebPages/FreeBooks.html

Anyone who slams Smalltalk documentation and tutorials without as much
as looking at this page hasn't done their homework.  Where are the good
free books for Visual Basic?

Tutorials?  Squeak has quite a few.

	I know SmallTalk can do almost everything that VB can,

With the admittedly important exception of making it easy for people
to write Word viruses, this is a masterpiece of understatement.  Smalltalk
in general, and Squeak in particular, makes it easy to do things that VB
hackers can only dream of.  The main purpose of VB is to tie developers to
Microsoft's apron strings.

	but a newbie like me just don't know how to do it.

Nor could I do anything in Visual Basic without a book.

There are two or three books specifically about Squeak now.
"Squeak Open Personal Computing and Multimedia", eds Guzdial & Rose,
is the one I happen to have beside my keyboard at the moment.
I've learned a fair bit from it, but it's not the one I'd start with.

	It is not easy to find the correct class and method.

That's odd, even _without_ a Squeak manual I find that it usually
takes only a few minutes to find these things.

It really DOES pay to work through some of the Squeak tutorials
before complaining about them.

	Even if I am lucky enough to find it, I have to spend hours to
	learn how to use those methods.

	Few documentation and examples on the web are available.

There is more documentation and there are more examples on the web
than I will ever have the time to read.

	One of my assignments was to add a radio button group and then
	deal with the user input.  Even my teacher does not know how to
	implement a radio button group.  He spent half an hour in class,
	trying to show us how to add a radio button group.  He failed.

I think your real problem may be with your teacher.
(1) He should have solved the problem *before* the class.
(2) For the old MVC framework, I'd just stretch my hand over to the
    other desk, pick up my copy of "Inside Smalltalk", and there it is.

Now, I have never ever done this in Squeak myself, because I don't have
much use for radio buttons.  Here I am starting at 1:35pm, knowing only
that there is a PluggableButtonMorph class.

I open a Browser and read the class comment.
Good.  This will do what I want.

Now, I'm going to create a "RadioButtonGroup" class that holds three
buttons.  It's going to have
    state	"1 .. 3, initially 1"
    button1..
    button3	"PluggableButtonMorphs"
    rectangle	"a RectangleMorph to hold the buttons"

methods:
    state: newState
	state = newState ifFalse: [
	    state := newState.
	    self changed: #state1.
	    self changed: #state2.
	    self changed: #state3]

    state	^state
    label1	^'1'
    label2	^'2'
    label3	^'3'
    state1	^state = 1
    state2	^state = 2
    state3	^state = 3
    action1	self state: 1
    action2	self state: 2
    action3	self state: 3

I'm nearly there.  I now have to figure out how to create the
PluggableButtonMorphs and stick them together.  To see how to create
them, I look in the class side of PluggableButtonMorph and notice
at the very top of the method list an 'example'.

At this point I kick myself,

    BECAUSE THE EXAMPLE OF PLUGGABLEBUTTONMORPHS RIGHT THERE IN THE
    SYSTEM IS A THREE-WAY RADIO BUTTON!  [almost]

It is now 1:51 and if I hadn't jumped into coding I'd have had the
answer after five minutes!!!!

What was that about documentation and tutorials?  The answer is right
there staring us in the face in the obvious place to look!

'example' methods and 'example' message categories *always* repay study.

Oh well, let's use this example to finish my code.

    initialize
	state := 1.
	button1 := PluggableButtonMorph on: self
		   getState: #state1 action: #action1 label: #label1.
	button2 := PluggableButtonMorph on: self
		   getState: #state2 action: #action2 label: #label2.
	button3 := PluggableButtonMorph on: self
		   getState: #state3 action: #action3 label: #label3.

	button1 hResizing: #spaceFill; vResizing: #spaceFill.
	button2 hResizing: #spaceFill; vResizing: #spaceFill.
	button3 hResizing: #spaceFill; vResizing: #spaceFill.
	rectangle := AlignmentMorph newRow
		     hResizing: #spaceFill; vResizing: #spaceFill;
		     addAllMorphs: {button1. button2. button3};
		     extent: 120 at 35.

    openInWorld
	rectangle openInWorld

It's now 2:02pm, despite three phone calls from home.
Code written and ready to test.
    RadioButtonGroup new initialize openInWorld

Hey, great!  Three buttons labelled '1', '2', '3', and the first one
is pressed (dark).  Clickety clickety, yep, it's working.

Start to finish time:  30 minutes (including 3 1 minute phone calls).

	Then he wanted us to complete that assignment ourselves.  God!
	It is even difficult for a SmallTalk senior to find out something
	common!

Surprising as it may seem, radio buttons are NOT common in Squeak use.
They have to be built from simpler components, as shown above.  However,
it is quite clear from my experience, as reported above, that it is
NOT IN THE SLIGHTEST DIFFICULT, NOT AT ALL for a Smalltalk programmer
with ___very___ modest experience to find out everything necessary and
put the pieces together in just a few minutes.  You should bear in mind
that I have always had difficultly (mild to extreme) with GUI kits,
with the notable exceptions of Interlisp-D and to a lesser extent Tcl/Tk,
and you should particuarly bear in mind that I am a complete novice at
doing things with Morphic.  This is the first time in my life I have ever
used a button in any Smalltalk dialect.

Thirty minutes.

You do not have a "Smalltalk senior" for a teacher.

Oh yes, I did say that I was starting from the knowledge that there
was a PluggableButtonMorph class.  How hard is that to discover?

In a browser, go to the leftmost pane and from the menu select
"find class".  Type "Button" into the text box that pops up and accept it.
You are shown a list of all the classes that contain "Button" in their
name.  I wish I had done this at the beginning instead of remembering
this one from an earlier "Pluggable" search, because guess what,
this is the *FIRST* thing a Smalltalk beginner should think of trying
and it turns up
    RadioButtonInput
    RadioButtonSetInput

They are both part of the Forms support in Squeak's web browser.
They are a bit specialised to use directly, but there are ideas one
could steal.

Narrowing things down, GUI components have names ending in "Morph",
usually, so "...ButtonMorph" is something to look for.

	How can SmallTalk be popular?

If people teach it well, and students read some of the MANY existing
books and tutorials for Smalltalk.

	Look at how easy it is to add a radio button group in Microsoft VB!
	
30 minutes to build a 3-way radio button group class in Squeak really isn't
bad.  Now that I have one, I shall probably improve it a bit for my own
education, but there are widget libraries coming along which will be much
much better.

For comparison, this morning I demonstrated in a class how I
- found a limitation in Scamper (it doesn't support <INS> or <DEL> tags)
- and fixed it
in 30 minutes flat.  When I _really_ did that two nights ago, it took me
just five minutes more, and I have *never* modified Scamper before.

You can say many things about Squeak, but "classes and methods are hard to
find" really isn't one of them.  That's twice this week I've found the
bits I've needed and whacked them together in half an hour in areas that
I have never touched before in any Smalltalk.

	Well, it is just my complaint on this language. I hope SmallTalk geeks
	should come up with a very good tutorial book for SmallTalk newbies.
	Otherwise, it will never be popular.
	
The work "geek" is *EXTREMELY* offensive.
It means a freak show performer whose act involves biting the heads off
live chickens; we're talking serious subhumanity here.

Spelling the name of the language wrong (it's "Smalltalk", not "SmallTalk")
is not a good move either; if you haven't even troubled to find out what the
langauge is _called_, what _have_ you troubled to find out?
	
To repeat:  there are LOTS of good (even "very good") tutorial books for
Smalltalk, and there is even an introductory book for Squeak by Mark Guzdial
(may the light of 6 thousand suns shine on his head, but only at night time!).
If your teacher has not made sure that you have access to a copy, blame the
teacher but do not blame Smalltalk.

I fear that Smalltalk will never be popular with people who have inadequate
teachers and are not even told where to find a good book about it.  But the
same could be said of anything, even Zope or PHP.




More information about the Squeak-dev mailing list