Examples Of Escaping Complexity

I just (re)found the SqueakWiki, and it reminded me of my days of learning ObjectOrientedProgramming - you know, the days when you are just beginning, and every new page in the book you are reading is more exciting than the last...

Anyway, does anyone have any intelligent insight as to why Smalltalk (and Squeak in particular) have escaped the complexity of other systems, for example those based on C?

One huge reason a higher level language helps here is because allocating/deallocating pointers to chars (and using pointers for nearly every non trivial program) is not as productive for quick tasks and every day programming.

Does LispLanguage have this, or SchemeLanguage, or how about JavaLanguage?

Are there any other structures or objects in the RealWorld that have this type of simplicity?


For example, the Nebraska (http://wiki.squeak.org/squeak/1356) interface, although I haven't looked at it in depth, is probably only a couple of lines (under 300 maybe), and a complete system fits into under 10 megs with a GUI and all.

Students at Georgia Tech (http://www.cc.gatech.edu/) complain heavily about this interface being inconsistent across platforms and full of bugs. So, one could argue that the reason it's simple is that it isn't used.

Road-testing does indeed tend to result in added fixes and conditionals into the mix.


Not a programming example but worth mentioning.

When the SpaceRace? began in earnest, there was a technical problem: a ball point pen does not work in ZeroGravity?. The US spent a fortune developing one that did. The USSR used pencils instead.

-- DaveBerkeley

Urban legend! http://www.snopes.com/business/genius/spacepen.htm

Yes, but the USSR also tried to field a rocket whose 1st stage had 20 motors. Remember the AirplaneRule.

More importantly, floating graphite caused a short-circuit that almost destroyed MIR. -- BenAveling


Does LispLanguage have this, or SchemeLanguage, or how about JavaLanguage?

It depends what you mean by escaping complexity. The SchemeLanguage was designed to be small, so on the face of it, it looks very clean. Then you try to use it in real life, and find a ton of things missing. So you (and everyone else) reinvents them. Typically, badly. So now, you have a small standard and a gazillion bad quality libraries.

In JavaLanguage, you have a horrible, crufty, misdesigned language, which, for marketing reasons, has excellent vendor support, so you have a million standard libraries. This lets you develop apps faster. So you escape the complexity of reinventing all those wheels.

CommonLisp is sort of in the middle of these extremes; as a language, it's much cleaner than Java, but not as minimalist as Scheme. It has a large defined library, but once you stray beyond that, there is very little. I actually suspect ?? is closest to CommonLisp in this regard (but I'm not a SmallTalk person - could an expert comment?).


SmallTalk escapes complexity by not being complex. Really, it is not used where it shouldn't be. C was designed as a portable assembler. It is meant for to implement operating system (kernels) and possibly compilers. Anything above that level IMHO is wrong. How hard is it to loop over an array in C? Dead simple. How easy is it to code a whole graphics system, with drivers, and umpteen other layers of stuff that shouldn't be there? Well, that should be fairly obvious. The BerlinProject? got it almost right by using CORBA. This allows using Perl, Python and other languages to implement software. But using a single language like the CommonLanguageSpecification will always be easier and faster. -- AluoNowu

The flip side to that is if you are good at C/C++, you can program with it on any operating system and device. I can program on windows, bsd, linux, pocketpc, palm, symbian, brew fairly straightforwardly using C/C++ whereas even using Java there are so many variations the extra complexity of C/C++ is offset by the time saved trying to install and test multiple languages and environments (J2SE versus J2ME versus PersonalJava versus J2EE etc). Of course I use Java and other languages but often when I think C is going to be too complex for a project, I end up reverting to it because it just works.


CategoryComplexity


EditText of this page (last edited April 23, 2009) or FindPage with title or text search