Lots of folks around here think that SmalltalkLanguage is the greatest thing since sliced bread (or since Lisp, at any rate--the other language with a large contingent of SmugWeenie?s). This Wiki has a few pages, such as WhyWeHateLisp, where the non-Lisp community can fire back. No such pages seem to exist for Smalltalk (though a few, such as WhyIsSmalltalkDead, discuss its failure to gain mind and market share).
Smalltalk is great; but it's not perfect. There are many reasons WhyWeGetAnnoyedBySmalltalk. (I couldn't bring myself to write WhyWeHateSmalltalk?; as I don't hate it, or any programming language. OK, I do hate VisualBasic--but that's because it's a SteamingTurd? which manages to make C/C++ look like, well, Smalltalk.)
So... things not to like about Smalltalk.
- It's a PinkyAndTheBrainLanguage. In many ways.
- The "image". Makes it difficult to use Smalltalk in a heterogenous environment. (The oft-proposed solution of moving the rest of the application to Smalltalk isn't practical, obviously). What??? I don't understand this complaint. Each platform has its own executable, the image is part of it. I load what I want into it. Where's the problem?
- Can we have a standard, please? The SmugLispWeenies have a standard. JavaLanguage has SunMicrosystems et al defining what Java does and doesn't do. CeeLanguage and CeePlusPlus both have standards--I can write an ANSI compliant C/C++ program and it will fine on most modern compilers, without modification--the places one finds deviations from the standard are at the fringes of these languages. Smalltalk, OTOH, remains full of trivial, non-portable constructs. Is the complaint that there is no standard or that there is no compliant dialect? Because there is an ANSI stanard. Which doesn't include any graphics model. OTOH, that's hardly a trivial construct.
- ReturningFromBlocks?. Would be fine, except blocks are first-class objects. Which can cause rather bizarre things to occur. See SmalltalkAndExceptions. Again, what??? Blocks return from the context in which they were created, if possible. This strikes me as consistent, understandable, and reliable. It's been that way for years. What's "bizarre"?
- Having a built in IDE is nice. It is also a severe liability to many of us--who prefer to write code with vi or emacs. Oh, I see, you prefer the "DDE" (Disintegrated Development Environment) offered by whatever shell happens to be running your vi or emacs. "Severe liability"?
- Being able to RedefineTheWorld?. A cool feature for prototyping; but much like OperatorOverloading in C++ something that should be seldom done. PrincipleOfLeastSurprise and all. This annoys you? Don't use it then. Seems like a learning curve issue to me.
- Irrational hatred, sometimes bordering on paranoia, for C++ and (especially) Java. C++ bashing is highly understandable, as C++ gets used in many places where it's not appropriate (and with MooresLaw providing us with FasterCheaperBetter?, the economics of software engineering are causing the number of those places to grow by the day) and I predict it will become a LegacyLanguage in some number of years--but why the persistent Java-bashing? Java's got a clean, sane programming model, and none of the nasty flaws that are fast rendering C++ obsolete. Smalltalk is more convenient in many respects with DynamicTyping; but listening to many folks in the Smalltalk camp--Java's no better than C++ whatsoever. Which is just plain silly. This is a property of Smalltalk programmers, not the language. True... maybe we need a SocialProblemsOfSmalltalk? page? See JavaVsSmalltalk. See also SmalltalkMinusMinus
I've deliberately left
off the list the following complaints about:
- the syntax of Smalltalk
- (once you get used to it; it's not hard to understand);
- (and it's so simple you can learn everything about it in a few minutes, once you grok the keyword messages.)
- performance
- EverythingIsAnObject
- (treating conditionals as messages to true or false is a bit contrived; but again something that you can easily get used to).
- (one of the common complaints about Java is that everything isn't an object)
There used to be a complaint up there about Smalltalk lacking a "case" statement. In Smalltalk, a case statement is just an ordinary method call. Squeak has one. It's called #caseOf:otherwise:. You can use it like this:
suitName := suitNumber caseOf: {
[1] -> ['diamonds'].
[2] -> ['clubs'].
[3] -> ['hearts'].
[4] -> ['spades'].
} otherwise: ['invalid suit'].
I don't think I've ever wanted to use it, but it's there. (Or if it isn't, you can define it yourself. :)
Regarding "Smalltalkers are annoying because they bash Java, but C++ bashing makes sense": is this a case of CompetingWithCousins? I don't think that Java and C++ are the same, but I don't think they're nearly as different as I used to think. -- AdamSpitz
These complaints all seem like learner's curve rants to me. All those braces in C and Java sure do annoy me. Yup.
CategoryRant CategorySmalltalk