Thursday 8 March 2012

Who needs objects?

Dave Thomas has said that the object abstraction is too complex for the majority of programmers. Most business software is CRUD with a bit of business logic mixed in. And it can scale by building loosely coupled systems (works for the internet, eh). Dave is a giant; he sees far. I think he's right.

So what does this mean to an object evangelist like me?  Probably not much. That vacant look on most people's faces when you try to explain objects says it all. If it does not address an immediate need, object abstraction is noise.

At the Toronto Smalltalk User Group meetings we sometimes have one or two students from Ryerson University. By attending they've already indicated that they're interested in more than the generic C syntax procedural stuff they learn in school. Joshua Panar and Dave Mason, the two profs that sponsor our group and use Smalltalk in their OO course, have said that getting the regular students out is a challenge. They're not interested. They don't see it as improving their education or job prospects. Suggesting that they should broadening their horizons falls on deaf ears.

There are two types of programmers: the toolsmiths (abstractionists) and the tool users (constructionists). Smalltalk developers seem to all be abstractionists. It is natural of us to extending our environment. Want a framework? Build it. Need a new compiler behavior? Add it. It's easy; it's common for us, yet unheard of by others.

Most programmers are constructionists. They have a job building and maintaining business applications. As Smalltalkers we ask ourselves: how can we get these programmers to use Smalltalk, to see how much more productive and enjoyable our environment is? The answer, I believe, is to reduce barriers to entry.

How to do that? Here are my wishful thinking answers...

  • Merge the dialects (ya, I know: unlikely). Selecting a dialect as the first step in exploring Smalltalk is a big problem. You need to know a lot to make a good decision, at the point where you know little. Yes, the VW & Digitalk merger was a bust. But that was another time. But I can dream...
  • Use a common online forum.  The Balkanization of the Smalltalk community is a problem. Think of how hard it is for a Smalltalk curious person to find information. If we at least used a common forum, like Stack Overflow, it would be easier to find cross dialect posts, and it would be more visible to the larger developer community. I'll advocate for it again at the the upcoming STIC conference, but I must be turning into a cynical cranky old fart, because I don't think there will be a change.
  • Support simple scripting. I know it's been done in various ways (S# was cool), but we should be able to point to a simple script tool for people to try. If there is a good option out there, consider this: I'm a Smalltalk cognoscenti, and I'm not aware of an option that does not require firing up an image. What does that say about how well we get the word out?
  • Start with prototype objects. Self and javascript got it right. It is easier to explain objects if you can defer talking about classes, and where the value of classes is discovered as a useful pattern.
  • Make Smalltalk IDEs rock. I know the Smalltalk vendors and volunteers have done a great job with the resources available, but VisualStudios and Eclipses of the world are slick by comparison.
  • Examples. Lots of examples. It would be great if we could point to real applications that people could fire up, test and explore. And templates; wizard driven templates to help build new applications, like those found in MS Access. Need an application to track students? Here's an example and / or a tool to help you get started. If nothing else, make it easy to get started.

Yes, abstractions are hard. But abstraction allows you to do things that would be far too difficult and expensive otherwise. Knowing how to think in abstract terms is a powerful skill that will make you a better technologist. It is our job, as those that understand this, to make it self evident to others.

Simple things should be simple. Complex things should be possible.

10 comments:

  1. Just one question: why we need 'constructionists'?
    As to me, a programmer, who doesn't understands the value of abstractions not really a programmer.
    Because the value of his creations leans towards negative infinity (not even to zero).

    ReplyDelete
  2. Mr. Petton adapted the ProfStef tutorial for Amber for people to try it online, why not put up a page hosted on seaside.st or here:http://www.smallharbour.org/
    and have ProfStef online so people can try Pharo online and even add a little more. Hey I'm a newbie and I just had this idea when I read your third comment.

    ReplyDelete
    Replies
    1. I wrote online 3 times in the same sentence..

      Delete
  3. A couple of links for you:

    1) f-script, a smalltalk interface to the Objective C frameworks of Mac OS X which can be added to any program. In some versions of the OS, f-script can be added to running applications: http://www.fscript.org/

    2) my own newbish-level introduction to smalltalk videos, Squeak from the very start: http://www.youtube.com/playlist?list=PL6601A198DF14788D&feature=view_all

    ReplyDelete
  4. This comment has been removed by the author.

    ReplyDelete
  5. stsh, part of Objective-Smalltalk, supports scripting without an image. It can use a pseudo method declaration to automatically define arguments and return values.


    marcel@localhost[scripts]cat fromTo
    #!/usr/local/bin/stsh
    #-<void>from:<int>from to:<int>to
    stdout do println:(from to: to ) each
    marcel@localhost[scripts]./fromTo 2 4
    2
    3
    4

    marcel@localhost[scripts]cat hello.stsh
    #!/usr/local/bin/stsh
    #-addToThree:<int>arg
    arg+3.
    marcel@localhost[scripts]./hello.stsh 39
    42

    ReplyDelete
  6. Only just noticed your post Bob. Agree with most of your "wishful thinking answers.

    Regarding "Use a common online forum" I hope you are aware that almost all Smalltalk distributions are listed on The World of Smalltalk (world.st) and all mailing lists (with the exception of usenets) are available as online forums on forum.world.st

    The IDE's do indeed need to rock and require some UX design

    ReplyDelete
    Replies
    1. Thanks Geert,
      I use forum.world.st all the time; great site. I also use planet.smalltalk.org to follow Smalltalk blogs.

      But, as a community, I think we'd benefit from using a broader forum, one where non-Smalltalkers will notice the posts. I prefer Github for project developers, and Stack Overflow for user support (stackexchange.com works very well for me).

      Delete
  7. Does anybody knows some places where I can find SmallTalk snippits ? I'm a newbie and I'd like to learn Smalltalk. But it's hard to find recent documentation on the internet.
    If that doesn't exists, maybe I should create something like that. In fact a good starting project to learn Seaside :-) If not, do you have some example 'snippit sites' for other languages ?

    ReplyDelete
  8. A good start would be the Pharo documentation and screencasts at http://www.pharo-project.org/documentation/tutorials-books

    ReplyDelete