View this PageEdit this PageAttachments to this PageHistory of this PageHomeRecent ChangesSearch the SwikiHelp Guide
Hotspots: Admin Pages | Turn-in Site |
Current Links: Cases Final Project Summer 2007

Why Squeak, instead of some other Smalltalk?

Well, there are actually people suggesting this semester that Smalltalk might be okay, but that Squeak in particular is terrible. What do you think?

And...? Mark Guzdial

"hardly gone down in months" isn't so convincing - 92% is close to 'hardly', and that performance has caused turmoil all over.
I believe the 92% figure refers to, not –Bryan

Like Bryan said. Herring has been up 100% for the last month.'s performance only causes turmoil for the loud complainers on the list. There are over a dozen classes on CoWeb, and almost no one else is complaining.

But that's just the CoWeb. People suggested that they had deeper, more significant criticism of Squeak. Let's discuss them! Mark Guzdial

Just because other classes aren't complaining doesn't mean it's acceptable for a system to have an 8% failure rate (especially when the failure seems to be directly tied into heavy use[1]). Just because the complaints are 'loud' doesn't mean they're not valid. Also, let's not forget the implicit race condition that always exists when editing coweb pages. That's the reason my group didn't have any grades past P1 for over a month. –Bryan
[1] google crawling being able to take it down, for instance.

I didn't say it was acceptable, and we're working to improve it. But that doesn't mean that it's down so much that it's not usable – lots of classes are making heavy use of it. Race conditions do exist, but the CoWeb handles them well and that's not why anyone is missing grades. Mark Guzdial

Perhaps I wasn't percise when I spoke. When our TA entered the grades on the coweb apparently somebody else was also editing that page and somehow our grades got lost in the shuffle (or that's the story, at least).

Andrew Hilton wrote:> > I agree with Webb.  Tell me what's> > terrible about Squeak.  I'm not assigning grades, Olin is :-)  Let's have a> > discussion.> >
> coweb... grr... (I will save why coweb is bad independently of its
> squeak-ness for another discussion)..
> top things that are bad about squeak
> 1) no types implies no compile time type checking, which leads to more
> error prone code..

There's virtually no empirical evidence that compile time type checking reduces
errors.  Not in 40 years of looking.  The cost in time of getting the types
right may actually be a production hit.  Types may be valuable, but error
correction ain't it.

> 2) lack of documentation makes finding what you need hard- esp with bad
> orginization...

But you have all the source and great tools for wandering through it.  And by
finding it yourself, you learn it better.  In the end, the class is about

No, you obviously don't understand what college is about. It's all about getting grades as easily as possible, not about learning. Who wants to learn? Who wants to think? We just want to read a manual, follow a set of instructions, have everything work exactly as documented, and get an "A". Squeak just does not fit in this model. This class should be using a real, commercially important, language like Visual Basic.

I can feel the sarcasm, but there is a little grain of truth lying
in there. At my school, we had to learn Scheme (a dialect of LISP), 
and the thing was completely useless. You should consider yourself
lucky that you're learning Squeak instead of Scheme, at least it
gives you the ability to do anything you want.
On a side note, don't try to learn Visual Basic if you want to make
serious money, try to learn a new technology before it becomes widely
adopted, not after it has already been so.  This way, there is less
competition, you do the interesting work, and no matter how old you
are and how many years of experience you have; you will always
outrank the losers still doing the old technology. -- Google Lurker 

> 3) once you find what you need, there is no simple way to figure out
> what the parameters should be..  if I see a method
>   doSomethingWith: x andWith: y andWith:z
>  I have no clue what x,y,and z should be.. if Im using say java and I
> see
>  doSomething(String x,int y, double z)
>  I can take a pretty good guess that I should pass a String, and int,
> and a double...

This may be the most significant role for types, in program understanding.
We're exploring that now -- Lex?  Want to talk about your work?

> 4) strange random stuff that you encounter...  "why can't this our
> webserver find any of our files?"  "hmm it seems to be trying to server
> from Home:Valentine II or something-like-that weird directory"  "what? I
> never typed that anywhere"   coded directory>  or other things like that where things just don't work
> as expected or just don't work

That one is documented in the class comment for the PWS class.  Read the

> 5) squeak is bad for debugging in.
>     sub-reasons:
>         a) minor errors result in complete crashes.  try filing in some
> code where your lab partner forgot to file out the parent class of one
> of the subclasses- does squeak give you a nice error and abort? no...
> does it even assume to use "Object" as the parent class? no.. instead,
> it hapily files it in, and whenever you try to use said class which
> ended up being a subclass of "nil" squeak disappears with a message
> about "recursive message not understood".  sure that tells me a lot- and
> I can debug it really easily since squeak disappeared..

I agree with this one.  It should be fixed.  Go for it :-)

>         b) the debugger may seem nice, but half the time, the stuff in
> it just plain old doesn't work....  nothing quite like when you click on
> the instance variable that you would like to inspect, and instead of
> getting its value, another debugger window pops up because the debugger
> itself, is somehow broken (as it typical of squeak)..

The debugger isn't broken, but if you ask it to display something which can't be
displayed, yes, you'll get another error.  It's consistent, and not broken.

> 6) the ide is bad..

Have you tried the Method Finder?

>     sub-reasons
>          a) it lacks many features that one would expect from an code
> editor
>                 - tab completion

>                 - syntax highlighting

It has both of these -- like I said, Andrew, you haven't taken the time to learn
Squeak yet.  Alt-Q does completion of message names.  There's a spell-checker to
correct class names.  And syntax highlighting is a preference.

>                 - copy-paste to work the expected way

Never saw this, so I can't respond.  Copy-paste works fine for me.
In Squeak Alt-C (copy) is equivalent to Ctrl-C (copy) in Windows 

>                 - the editor puts the compiler errors in the middle of
> your code- and doesn't really tell you that it did so...

If it detects an error, where would you like the error?  In the console?  Or
pointing to the error in the code, and highlighted so that you can hit delete
and get rid of it?

>         b) there is no way to say "just leave this like it is and ill
> come back in a second"- its either accept or cancel.. if you want to go
> add an instance variable to the class b/c you just added code that uses
> it, you have to open another window, then dismiss annoying warnings
> about the class being modified elsewhere.

Try the command-o (spawn) command. It's there for exactly the situation that you describe

The warnings may be annoying, but they go away when I tell them to, and I can go
ahead and do what I want.

>         c) it does things its own way- not the way I have the rest of my
> computer configured..

That's because it's not your OS -- Squeak tries to ignore your OS completely, to give
you control over things that even your OS doesn't.  Yes, you have to modify
code.  It's a different paradigm, but it's not wrong just because it's

What an ignorant remark. Of course it's wrong because its different. Haven't you seen the '''You Will Obey''' posters from Microsoft ... They will be comming to take you away!

/sarcasm/Spoken by a true usability designer. '''It's not wrong because its different'''/sarcasm/

> so for the other side of things..
> the good things about squeak:
>   1) late binding
>   2) blocks
>   3) lots of UI things already there.
> We can take 1 and 3 and see that java does them both.
> We can theoretically implement (2) in java with creative use of the
> class loader's defineClass method.... how to do this, is left as an
> excersice to the reader..

No, Java can't really ever have real blocks.  Inner classes aren't even close.

Java's multimedia support isn't as good as Squeak's.

Java isn't as flexible as Squeak, e.g., exceptions.
Mark Guzdial_+_

>> 3) once you find what you need, there is no simple way to figure out
>> what the parameters should be.. if I see a method
>> doSomethingWith: x andWith: y andWith:z
>> I have no clue what x,y,and z should be. if Im using say java and I
>> see
>> doSomething(String x,int y, double z)
>> I can take a pretty good guess that I should pass a String, and
>> int, and a double...

I don't like to guess. I like to "show all senders of doSomethingWith:andWith:andWith:z and see some live examples of how other people really use this method. Or, I show all implementors and read the method comments and execute the examples, right there in the browser. I just can't seem to get away from this urge to actually do experiments – maybe it's that terrible training that I once had as a scientist? Can anyone help me to loose this urge to UNDERSTAND, rather than just to follow instructions?

>This may be the most significant role for types, in program

Perhaps. The thing that worries me is that knowing the ^types^ of the required arguments doesn't mean that you know the ^meanings^ of the required arguments, and the meaning is much more important. The use of good naming patterns can help a lot. Kent Beck's Type Suggesting Parameter Name is useful here, because you can usually determine the role played by the parameter by examining the code. That's where Smalltalk's providing all the source code helps out. Smalltalk is really a learn-by-doing environment.

(That said, better documentation and turtorials for Squeak are still much needed...)

> Smalltalk is really a learn-by-doing environment.

And that's obviously not the way languages should be designed.

Doing things a way that's entirely different from others, rather than different enough to affect the necessary changes (usability, etc), makes a language more difficult to learn for no good reason. UI designers must follow conventions of computing unless they have a reason not to, as otherwise they simply waste resources.

Many, but not all, things that are different in squeak are unjustified, and therefore intentionally obscure.

The untyped nature of variables in squeak makes it very difficult to understand what goes in and what comes out when you don't yet understand a method's meaning or purpose. The context you suggest using to understand methods is useless if you don't know any more about the other library functions than you do about that function. The learning curve for the squeak environment is therefore huge. Understanding existing code with untyped variables is perhaps the most confusing part about grokking the squeak library.

Also, I spent untold hours manually finding things in the squeak environment before someone showed me some secret key shortcut that magically tells you exactly what you need to know. The squeak interface is notoriously counterintuitive.

I can't defend Squeak's interface – it needs a serious overhaul. But languages for education need not be the same as languages for everyday use. Languages for learning should be about learning-by-doing. Mark Guzdial

Link to this Page