I'm a UniversityOfWaterloo
graduate with an interest in programming languages. I used to be interested in ExtremeProgramming
, too; now I just accept it as common sense. (My interest in XP might be renewed if I ever end up working again in a team that needs it; for the last couple of years I've had the good fortune of working in very very small teams - either alone or with just one or two other people who do agile things naturally.)
I'm interested in languages because I'm pretty sure that language matters more than people think it does. I know a lot of programmers who complain about how hard programming is, but don't have any interest in learning new languages, and it just baffles me.
I've done my share of C++ and Java, and I'm thankful that I haven't had to work with either one of them lately. The languages that I like are the simple, human-oriented ones: the SmalltalkLanguage
is wonderful, and the SelfLanguage
is even better. (Self is the best Smalltalk I've seen.) I've done a bunch of stuff using Ruby, which is an absolutely wonderful language for a TextFileOriented
Unixy kind of world, but I'm trying to get away from that world, so I'm a little bit less taken with Ruby these days. I've done some playing with languages like Lisp and Haskell and ObjectiveCaml
, and I have a lot of respect for them, but I don't think I'd want to live there.
These days, I'm interested in operating systems as well as languages, because I'm not sure anymore where the dividing line is between an OS and a language. :) For a while, I was hoping to try to bring SqueakSmalltalk
to the point where I could live inside it without ever needing to see the underlying OS. Then I got a job, and the work is cool enough that it's absorbing all my spare time (I think I'm one of the few people in the world who gets paid to program in the SelfLanguage
), so I'm not Squeaking very much these days. (I still use it as my e-mail client and MP3 player and sometimes file manager, though.)
These days I'm on MacOsx
, not really by choice (we use it at work), but I've spent a bunch of time using Linux, and I'm kinda disappointed by it; it isn't nearly OpenSource
enough. In Squeak or Self, I can click on anything I see on the screen, and a second later I'm looking at the source for it (and I can change it right there while it's running). Being "open" is just the first step; I also want my source to be "accessible" and "live" and, um, "integrated." RichardKulisz
understands this stuff better than I do; see OperatingSystemsDesignPrinciples
Favourite books on software development: TheFountainhead?
. Both of these books changed my life.
for a while a few months ago, and I'm still thinking about AlternativesToWiki
, but I'm still finding useful ideas and good people here. Thank you all for sucking me back in.
You can e-mail me at email@example.com.
Interesting take on things Adam. I tend to think of my programs in a way that might best be described as ProgramsAreAcceptanceTests?
. As far as the user is concerned two programs that both pass all the acceptance tests (and have the same performance characteristics) are indistinguishable, no matter what else is going on underneath the hood. But I see you're talking more about implementation here, in which case I start thinking about the objects themselves, how they respond to UnitTest
s, and how they interact. I suppose I want what any user wants - a model that simplifies things so that I can hold everything in my head. Text files generally aren't flexible enough for this. Is this very far from what you are trying to describe?
I've written up some of these ideas on ToolOrientedUserInterface
. There's something else happening here too, though.
The main conceptual entities in Self are objects. The main UI entities in the Self environment are Outliners, and each Outliner represents a single object. I think that's significant. When I work in Self, I feel like I'm directly manipulating my objects. (I've been using the word "Outliner" a lot, to try to explain to you exactly what's going on here, but that's not really how I think of it when I'm working. I don't think, "Oh, I'll go grab the outliner for the wobulator object." I just think, "I'll go grab the wobulator." The outliner is
Smalltalk doesn't quite give me that feeling. (And languages like Ruby and Python and Java definitely
don't.) In Smalltalk, the main conceptual entities are objects and classes, and the main UI entity (when I'm coding, anyway) is the System Browser, which shows me a fancy categorized view of all the classes in the whole system. That's a very useful view, but it doesn't feel like I'm directly getting my hands on the classes and objects; it feels like the browser is an intermediary between me and my objects. All of the Smalltalk tools feel like that. Even an Inspector feels more like a "view" of an object, rather than feeling like the object itself. (This isn't a fundamental failing of Smalltalk. You could
make a Self-like UI for Smalltalk.)
In Self, when I want to see a different view of the world, I just rearrange the objects on the screen. If I want a view of objects X, Y, and Z, I just grab objects X, Y, and Z and drag them to wherever I want them on the screen. I can create surprisingly complex ad-hoc viewpoints like that and still be comfortable, just like my friend Luke's bedroom looks like a complete mess to everybody else, but somehow he knows where everything is. The monkey part of my brain is pretty good at stuff like that.
What I really want (and I don't think Self does much of this yet, but I think I got the idea from reading one of the papers on the Self website) is to be able to take snapshots of poses ("All of you guys, remember where you are"), so that I can call them back later. And there could be automatically-created poses, too. ("Bring me all the children of object X, arranged to look like a tree.") So instead of creating a "tool" for each different viewpoint I want, I create a pose, and when I ask to see that pose, the objects slide into that configuration. I think that would give me a lot of the benefits of Smalltalk's tools, while still preserving the DirectManipulation
feeling, and making it much easier to create the kinds of ad-hoc viewpoints that I miss in Smalltalk.
I've written way more than I meant to. Does any of this make sense?
"I still want to change the world, but now I think that the way to do it is to make myself happy, explain why I'm happy to anybody who asks, and let the people who don't ask find their own way." [So... why are you so happy, Adam?]
I'm happy either because I took control of my life, or because I'm just very lucky. We won't know which it is until I find myself faced with the decision others had to make: accept a lousy job or become self-employed. As it is, I managed to find myself a job working with the SelfLanguage
I don't need much from my computer. It's liberating. I use SqueakSmalltalk
as my e-mail client and file manager and RSS reader and MP3 player. I do all my personal projects in Squeak (or occasionally Ruby, but I'm phasing that out). I still rely on the underlying OS for a web browser and an instant-messaging client; Squeak's web browser isn't good enough yet, and I haven't tried the Jabber client.
This isn't just language bigotry. It's also about "personal mastery", in the DanIngalls DesignPrinciplesBehindSmalltalk
sense: "If a system is to serve the creative spirit, it must be entirely comprehensible to a single individual." Or in the sense of WardCunningham
pattern. Squeak is more complex than it needs to be, but still simple enough that I'm comfortable modifying whatever parts of it I want to. There's a lot of goodness in that.
A lot of really ugly technology is really popular these days, but it's still possible to get away from it. LifesJustTooShort
to be living with stuff that you hate.
At the top of this page you say that you've been considering using SqueakSmalltalk as an operating system. Though it seems that you enjoy working with the SelfLanguage more that Smalltalk; why Squeak as an OS and not SelfLanguage? Is Self not far enough along to be use it in such a way? -- kw
Oh, it's just that Self is missing a bunch of mundane things. Squeak already had an e-mail client and an MP3 player and libraries for reading various kinds of file formats... stuff like that. So I figured it'd be easier to start there. In the long run, I do like the Self language better, so I'll either port some of Squeak's stuff over to Self (which wouldn't be too hard) or recreate Self inside Squeak (which wouldn't be too hard, either). -- AdamSpitz
I'm pretty sure SqueakSmalltalk now has Poses for Morphs. And concerning the Browser, have you checked out the OmniBrowser?? Lots of exciting stuff in the SqueakSmalltalk world happening. Croquet, Tweak, Exupery, Squat to name a few. -- fg
Are you sure about the Poses thing? I don't see anything on SqueakMap
except the first crack I took at it a while ago. (I gave up because of performance issues, I think - I wanted to have the morphs sliding smoothly into their new pose, but it went really slowly, and I couldn't figure out why.)
Someday I'll probably get back into the Squeak world. There's lots of cool stuff going on there. But these days my Self work is taking up all my programming energy. -- AdamSpitz
Have you heard of ZestAndMarmalade?
? They were presented at LL4 today; they should be on the webcast, morning session 2, about 30 minutes in (http://ll4.csail.mit.edu/
). Zest is like a Wiki where you can double-click anywhere and enter evaluable code. Marmalade is prototype-based object system. Both are built on top of Squeak. The demo looked pretty impressive. -- JonathanTang