2

I am going to start learning Smalltalk for improving my object oriented skills. Which Smalltalk implementation would best serve my purpose. If possible where could I find material to learn recommended implementation.

P.S 1: No please don't recommend skipping the idea of learning Smalltalk and going for C# or Java.

P.S 2: If you think there are other better ways to improve my OOP skills. What are they?

I am a Ruby dev on Macintosh.

Thanks

Frank Shearar
  • 17,012
  • 8
  • 67
  • 94
Bhushan Lodha
  • 6,824
  • 7
  • 62
  • 100
  • 1
    "I am a Ruby dev on Macintosh." - that's great, but how does this make this question a [tag:ruby] question? – Andrew Grimm May 14 '12 at 05:29
  • 1
    @Len: I got feedback from an experienced programmer that I lack OO in my ruby apps. The thing is Practicing OO in ruby can really get untidy at times because Ruby is not strictly OO though under the hood everything is object but it will allow you to write procedural code for all your life without throwing any issues. So, I wanted pick something light which will develop my OO skills. – Bhushan Lodha May 14 '12 at 05:33
  • @AndrewGrimm: In a way that I want to improve OO skills as a Ruby Dev.. – Bhushan Lodha May 14 '12 at 05:35
  • 1
    Posting this here since it's not in line with the asked question. I am going through [Growing Object Oriented Systems](http://www.amazon.com/Growing-Object-Oriented-Software-Guided-Tests/dp/0321503627/ref=sr_1_1?ie=UTF8&qid=1336973974&sr=8-1) and so far it's been really fantastic. I've also found that understanding Java has been incredibly helpful in terms of understanding OOP. Can't speak for Smalltalk, as I haven't tried it, but I think learning a statically typed language would be wise. – Joshua Cheek May 14 '12 at 05:43
  • Ruby is as strictly OO as anything else—its object model came from SmallTalk, as you probably know, but nothing stops you from writing procedural code in SmallTalk too. My advice to you is that the learning curve of a new language (like ST) would be significant enough to hamper you in your goal of actually learning OO principles. You're better off reading something like @JoshuaCheek recommends—that definitely looks like a keeper. – Asherah May 14 '12 at 07:51
  • 3
    @JoshuaCheek - what is "wise" about learning a statically typed language? I came to Ruby and Smalltalk from C and C++ and it's taking more than 3 years to erase all that crap from my brain! After programming in Ruby for 3 years and now Smalltalk for 2 years, I have not missed static typing. Let's not burden the OP with our personal preferences. If he's interested in that fight, there is more than enough info available e.g. http://stackoverflow.com/questions/125367/dynamic-type-languages-versus-static-type-languages – Sean DeNigris May 14 '12 at 14:02
  • 2
    @JoshuaCheek Are you saying that understanding Java helped you understand OOP by contrast, as what not to do? Alan Kay, who invented the term, is pretty clear that Java and C++ are not what he was talking about. – Sean DeNigris May 14 '12 at 14:04
  • 1
    @Len Have you programmed in Smalltalk? My experience and that of the many Smalltalkers that I know does not indicate that the "learning curve" gets in the way. The entire syntax is learnable over a cup of coffee. In fact, the only things which I would call a "learning curve" are the very things the OP will benefit from the most - I often still don't recognize the power at my fingertips in the live, open, dynamic environment of my Smalltalk image (which confused and frustrated me for quite a while!). – Sean DeNigris May 14 '12 at 14:13
  • @SeanDeNigris Yes, that is what I am saying. I've seen Alan Kay speak multiple times, and while I find him quite inspiring, I imagine he already had the clarity I gained from having explicit and compiler guaranteed interfaces. I can't speak to C++, I've only done C, which is not what I'm talking about. – Joshua Cheek May 14 '12 at 19:08
  • 1
    @SeanDeNigris: yes, thank you, I have. When I refer to learning curve, I don't refer to syntax, but rather the entire new environment, image-based development, working with browsers, etc. For a Ruby dev, all that can be quite startling. I'm not saying OP *wouldn't* benefit from all these things, but I am stating there is a learning curve which may not necessarily add to his/her experience as an OO dev in other languages lacking these features. – Asherah May 14 '12 at 22:59

2 Answers2

8

I'd go with Pharo, a very nice free Smalltalk implementation. If you are not so much into graphical Smalltalk environments, I've also had good experiences with GNU Smalltalk.

As for learning materials, there's also good free ones:

A lot of the old Smalltalk books are also freely available by now, see:

http://stephane.ducasse.free.fr/FreeBooks.html

Rafał Dowgird
  • 43,216
  • 11
  • 77
  • 90
Michael Kohl
  • 66,324
  • 14
  • 138
  • 158
4

The interesting and powerful things about Smalltalk are not found in the bits, but in the ideas (it took me a few years to realize this).

Without this realization, what will probably happen is that you'll port the ways of thinking from whatever your first programming language is to Smalltalk syntax (I'm still brain damaged from C after 15 years), missing the real juice (although the tools, closures, live system, etc. will definitely lead to productivity).

What most helped me rearrange my neurons to realize what matters about Smalltalk were:

That being said, I've been very pleased with Pharo for learning, researching, and production development. I think it's perfect for learning because ugly code is rapidly disappearing in favor of clean, well thought out, fun to use replacements. Check out FileSystem (included in 1.4) for an amazing file library. I often find myself reimplementing parts of it in my Ruby apps.

No matter which Smalltalk you choose, you must check out http://www.world.st/. It's a clearinghouse for every book, video, forum for all the variants of Smalltalk

Sean DeNigris
  • 6,306
  • 1
  • 31
  • 37