Last week I gave an in-house seminar in Albuquerque. For the last few years I've been focusing on more advanced seminars like Thinking in Patterns and Designing Objects & Systems. So this is the first time that I have given anything like "Thinking in Java" for quite awhile. On top of that, this group had very mixed programming experience and they asked that I give just enough Java to get the to JDBC, Servlets and JSPs, since what they wanted to do was basic web programming.
As a result, I was forced to strip out everything from the seminar that was non-essential. This was a particularly interesting exercise. When I go to all the trouble of digging in and figuring everything out, I tend to get fascinated/attached to particular subjects and examples and have a hard time letting them go. It all seems important. But in this case I had the challenge of not overwhelming significant parts of the audience, and also leaving enough time for introductory JDBC, Servlet and JDBC exercises on the last day. I had to let go of a lot.
I also wanted to introduce more exercises to break up the lectures. From my experience with the Thinking in Patterns seminar, I find that people work best if you give them one concept and then immediately have them do something with that concept.
At the end of the week, everyone seemed quite happy, including me. I discovered that giving people less, but making sure they had a strong understanding of what they get, is far more satisfying that giving them lots of stuff but with only a passing grasp of what they see.
This seminar has made me re-think what I'm doing. Not Thinking in Java per se, but the seminars that come from the book. Originally I created the seminar and developed the book from the seminar, so I always thought in terms of a one-to-one mapping between the book and the seminar. But Java continues to expand, increasing its surface area like an expanding sphere. It has long past the point where you can cover a significant part of it in a week unless the group is already reasonably proficient in the language.
So it appears that there need to be several seminars, serving different needs. For example, there are a lot of people who are motivated to use Java just so they can do basic web programming with JDBC, Servlets and JSPs. Subjects like reflection, serialization, RMI, native methods, in-depth collections, etc. are not essential to such a pursuit. On the other hand, there are folks who know the basics of Java and would like to have more depth in some of the other interesting areas of the language. There are at least two seminars here, rather than the former single seminar.