• Tools are Double-Edged Swords

    Smalltalk is well-known for its impressive collection of development tools. There is nothing like coding in a live environment, surrounded by the living, breathing objects of your application. Other languages try to attain the same level of interaction. Some of them are even getting pretty good. But nothing I’ve seen comes close to what Smalltalk has being doing for 30+ years.

    Read more →
  • Obstacles to Refactoring

    When I’m working on some code and decide that there might be a way to clean it up, I reach for my refactoring toolbelt. I think about the different refactorings I know and decide which ones might work. I then do a quick cost/benefit analysis on the before and after state of the code and decide which refactoring - if any - might be best suited.

    Read more →
  • Learning From Others

    I don’t think of myself as an arrogant person. I generally get along with people. I don’t hear reports of people thinking of me as annoying or obnoxious. And yet sometimes, when it comes to learning from other people, I am arrogant. I act as though I believe that most people don’t know as much as I do, and so they have nothing to teach me. I find it really easy to flip the bozo bit. This is not a good thing.

    Read more →
  • How Ryan Davis Schooled Me

    A few weeks ago, I submitted a pull request to the minitest project. Ryan Davis (a.k.a. zenspider) merged my pull request, but also cleaned up the tests I had written. As someone relatively new to Ruby, I found his cleanup very instructive, so I’d like to share it with you. I understood everything he did, but I didn’t think of doing it that way myself. Being a Smalltalker, I understand quite a bit of “the Ruby way”, but Ruby has a number of unique features as well. I feel like I’ve learned the language and its features pretty well, but I still have much to learn about how and when to use those features to full advantage.

    Read more →
  • A Mock Too Far?

    I’ve long felt that the use of a lot of mock objects and other test doubles was a sign of a design smell. I would occasionally hand-build a test double for the rare case when I couldn’t find a better way, but I’d always look for a different option.

    Read more →
  • Forgetting Super Sends

    In object-oriented programming, it is common to extract a superclass when two classes share some common behavior. There are other ways to structure the code, such as using composition and delegation, but for this post, I’ll use inheritance.

    Read more →