Wednesday, December 15, 2010

About a couple of my books

I recently got a question about how the Fundamentals and the Mentoring Course books are different. I thought I'd share the answer here. But before I do, I want to thank you for your interest in my books. I really appreciate the nice feedback I've received, and I hope to continue writing books that earn this kind of praise in the future.

The Fundamentals and the Mentoring Course books focus on different aspects of programming. For example, the Fundamentals books focus more on techique aspects such as how to use inheritance, polymorphism, enumeration, threading, weak references and similar features. It is meant more as a training course on the material I think one should be able to do automatically and without thinking, with the intention of freeing up thinking resources for attacking the design problems that usually drive the choice of which technique to use in the first place. In short, the Fundamentals books say "if you learn all this stuff so it's automatic, you will have more time to think about better designs for your programs".

The Mentoring course takes a different approach. It assumes readers already have a reasonable grasp on Smalltalk, and explores different design methodologies that have an impact in how programs come to be. In particular, the book traces important influences that acted at the time Smalltalk was designed, but which usually remain hidden from view nowadays. For example, the relevance of Laws of Form in Design Principles Behind Smalltalk is evident, and yet few people consider why it was so important that Dan Ingalls paraphrased Laws of Form in his paper. There is a lot of energy behind techniques like test driven development, which emphasizes that one should start by writing tests, but it's much more effective to design and distribute object responsibilities first. It's critical to be more aware of how these factors affect the code we write, because it is only when we consciously use these data points that Smalltalk's powers can be fully realized. In short, the Mentoring Course book says "if you design your programs taking into account these bits of information, the resulting programs will be substantially and measurably better".

So, as you can see, the books focus on different aspects of the problem of how to write effective Smalltalk code. It's hard for me to make recommendations, but I hope these bits can help you choose if you have to.

Now on to other questions I have received. I am currently working on Fundamentals volume 2, and I am having a lot of fun. The draft recently reached 130 pages, and I am getting closer to finishing off chapter 6 (on enumeration). As soon as I am done with that, the next chapter is about recursion. I have so much awesome material to write about, I can't wait! I'd like to be done with volume 2 sometime next year. Volume 3 should be quicker, as (so far) it will have the last chapter of the Fundamentals books, which is about optimization. I hope I won't have to add another chapter, the chapter count is 10 and ten is a good number :).

The code shown in the books was written mostly in VisualWorks. However, I did not mean the code to be tied to any particular dialect. In particular, the books do not talk about any UI specific material, so I think the code should work well on Pharo and others (perhaps with just a small change here and there). I know some readers have already ported some of the code to Squeak / Pharo, so check out the usual code repositories and see if the code is already there.

Regarding coupons, Lulu has a series of coupons for December, and they are running a different coupon a day. I'd check their website and see what's the coupon of the day. For example, today they are offering free second day shipping.

Thank you again for your interest and appreciation. Now, back to the scheduled programming.

No comments: