Some things I have to remind myself periodically

Here are some instructor tips I’ve learned but have to remind myself over and over again, because I forget.

1. If a student asks a question that I’ve just finished answering, keep in mind that if the student is thinking, they’re not listening to me.  That’s a good thing.

2. Just because a student is in a training class, their job doesn’t stop.  I understand when they have to monitor their email.  I still find IM clients in class annoying, though.

3. At every educational level, teachers tend to focus on the brightest and most aggressive students, and on the slowest and most disruptive students.  Most students fall in between, though, and that’s really the group to pay attention to.

Corrollary: if you’re a student wondering which group you’re in, if the teacher ever looks around and says, “where is everybody today?,” then you’re in the middle.

4. While the Myers-Briggs Type Indicator is certainly an oversimplification of reality, some students are E’s rather than I’s (extraverts rather than introverts).  In other words, they’re going to think out loud, even if they’re just echoing what you just said.  That, too, is a good thing — it shows they’re engaged in the class.

5. Explain everything in great detail, very slowly, demonstrating each step as you go, and still somebody will miss a step and get lost.  It just happens.  Don’t worry about it, even if you have to explain it again and again.  That’s what you’re there for.

6. Show just the tiniest bit of irritation at a question, and you’ll pay for it later.  And you deserve to.

Corrollary: if you find yourself irritated at questions more than once in a long while, you’re teaching too many weeks in a row.  Take a break.  Everybody will be happier for it.

7. If I’m learning something and there’s a part I don’t get, sooner or later I’ll wind up teaching it.  It happens to me all the time.

Fact: the worst grade I ever received was in a numerical analysis class my senior year at M.I.T.  I almost failed it and it nearly cost me my math degree.  Sure enough, the first course I ever taught as a professor was numerical analysis.  G-d’s sense of humor works like that for me.

8.  Materials sometimes don’t show up, or they do and they’re wrong or out of date.  Software sometimes won’t install, or crashes at odd intervals, or suddenly stops working.  Computers are evil, pure and simple.  But a positive attitude in class really does help, as much as I hate to admit it.

9.  Students are there to learn what they need to know, not to be dazzled by what you’ve spent years learning.  An occasional story is fun, especially if it’s about a related technology experience, but don’t waste too much time on them.  Do your job.

10. If a student isn’t happy and complains, be very grateful.  It’s the quiet ones who never say anything that you have to watch.

11. I do love my job and definitely was born to do this, but I can’t reach every student every time.  It’s just not possible.  And as charming, clever, and witty as I am, not everybody appreciates my sense of humor.  Just move on.

12. As the old saying goes, when the student is ready, the teacher will appear.  I hope I’m not booked that week. 🙂


Design Patterns

The class I’m teaching this week and next is a massive, customized combination of Design Patterns, JSTL, JSF, Spring, and Hibernate. It’s going to be an adventure.

Today, though, we were digging into patterns. Design patterns has usually been my favorite course to teach. If teaching is all about giving people the ability to do things they couldn’t do before, then patterns is one of those fundamentally enabling topics that helps all your code everywhere. It also helps people understand code from others that they’re reading, not to mention the Java APIs.

We talked mostly about Abstract Factory, Factory Method, Singleton, Strategy, Template Method, and Observer. Suffice it to say that it was a rather long day. I happen to like all of those and use them regularly. There are other creational patterns, too, like Builder and Prototype, that our materials didn’t dig into but I discussed with the students.

Yup, they’re fried, and it’s only Tuesday. It’s a standard dilemma. We have lots of material to cover, but it’s just hard to absorb that much that quickly. The students are roughly intermediate Java developers (with a wide standard deviation), but still sometimes the Java stuff itself is a bit of a challenge to them.

I brought up the Head First Design Patterns book and they seemed interested. I have mixed feelings about the whole Head First series. Kathy Sierra herself once wrote that people who criticize the books are often people who already know the technology. That’s probably true. The Head First EJB book was wonderful and got me through the Sun Certified Business Component Developer exam. On the other hand, I didn’t like the Head First Servlets and JSPs book at all. But, then again, I already knew servlets and JSPs when I read the book.

Personally, my favorite patterns book is still Applied Java Patterns by Stelting and Maasen, even though it’s getting a bit dated by now (published in Dec, 2001).

[The Mets blew a great opportunity. They had men on 2nd and 3rd with one out and didn’t score. They’re down to three outs left in order to keep from going down 3 games to 2.]

Incidentally, the students use IBM’s Rational Application Developer 6.0 in their jobs. That’s normally okay, but the design patterns materials I have use Java 5 generics, enhanced for loops, and other cool features. For this part of the class we’re using Eclipse 3.2 with the ever-popular MyEclipse 5.0 plug-in. That should really pay off later when we get back to the server side.

What happened to IBM’s tracking of Eclipse developments, anyway? When they first released WSAD 4.0 (WebSphere Studio Application Developer), they also released Eclipse 1.0. They stayed exactly 3 numbers apart for years after that, going to WSAD 5 (Eclipse 2), WSAD 5.1 (Eclipse 2.1), WSAD 5.1.2 (Eclipse 2.1.2), and even RAD 6.0 (Eclipse 3.0). Now Eclipse has moved to 3.1 and then to 3.2 and we’ve gotten nothing from IBM. I’ve heard rumors of a RAD 7, but I don’t know what that’s all about.
Okay, the move to Eclipse 3.1 was big and difficult because that’s the first version that really worked with Java 5. WebSphere still doesn’t get Java 5 at all, which is one of the many reasons I tend to prefer JBoss (now a division of Red Hat).

Speaking of annoyances, Hibernate 3.1 works with Java 5, but doesn’t use Java 5 generics. As ugly and awkward as the generics implementation is (try making a Map where the values are also a List some time), I find it very annoying that I can’t use generics in my code because query.list() and criteria.list() methods both return List of Object. It’s back to casting again, plus I can’t use the for each loop.

Hibernate 3.2 is a hairs-breadth from release. I hope they’ve fixed that, but the betas don’t seem to show it.

The Mets went one-two-three in the 9th. So much for that. As long as the Yankees have been eliminated, I’m happy. 🙂

Ajax Teaching

Ajax in Amsterdam

You know what I hate?  When I feel my phone vibrating on my hip and I’m not wearing my phone.

This is my first time in Amsterdam.  The training site is an IBM center, but I think this is just a room rental.  I’m a sub to a sub to a sub again, so it’s a bit confusing.  It’s also rather surprising that my client’s client felt that it was worth the travel costs to hold a class for only three people.  Works for me, though.

The Ajax materials I’m using this time are very different from the one’s I’ve used before and they’re pretty raw.  Lots of set-up and lab corrections to do, but I think I have most of them worked out now.  It’s very interesting that these materials are strongly focused on Ajax tool kits like Prototype, Dojo, and Rico.  That’s no doubt the future of Ajax.  From a spectator sport point of view, I’ll be watching to see which toolkits win the mindshare wars.

Prototype is definitely going to win, partly because it’s cool ($(), $F(), and all that) and partly because it’s the basis of so many others.  I’m not sure whether Dojo and Rico are going to win out over Scriptaculous, though.  We’ll see.


World Traveler

One of the cool things about this job is that every once in a while I get an email like this:

From: one of my training company clients
To: Me
Subject: Want to go to Europe next week for us?
Would you like to go to Amsterdam next week to teach an Ajax class for us?


How cool is that?


Philadelphia and Fun with RAD6

Back to Philly this week, doing servlets and JSPs with RAD6.  At least they remembered to install RAD6 this time.  Last week they didn't, and it took four hours to download and install the product.  I might even try running the updater and see what happens.

In the meantime, it's Hibernate some more.  I'm going to build the Hibernate classes from Will's Derby HRDatabase.  MyEclipse was able to generate the classes and even an ER Diagram, but I'm not sure I want to use it that way.  I also can't rely on the training clients having the product.  Still, the alternative may be Ant build files, and that hides so much.  It's working in the Rensselaer class, but I don't know how well that's going to work out when the students start their projects.

I also only ordered the shorter version of the materials for this week.  That'll give me plenty of opportunities to riff on the topics, which works well for me.


EJB’s in RAD6 in Columbus, OH

This week I'm in Columbus, Ohio, teaching a five-day EJB class in RAD6.  As I learned last week, IBM would prefer I call the product IRAD, meaning IBM Rational Application Developer.  That's going to be a tough transition, assuming I try to do it at all.

The students this time are from the State of Ohio Department of Taxation.  Their Java background is rather mixed — I've got a couple of relative rookies and a couple of ringers.  We should be okay, though.  The Trivera materials are pretty explicit regarding lab instructions.

Even though my enablement class last week wasn't concerned with EJB's, I'm glad I had it.  We'll be using a Cloudscape database again and I'm glad I've recently been reminded about how to use the Data perspective.  Of course, when I re-installed RAD6 on my laptop, it threw an exception when I tried to go to the data perspective. 🙁

Technology-wise I'm heavy into Hibernate these days.  Soon I'm going to begin the courseware development project with Will Provost at Capstone Courseware and I need to learn as much as I can as quickly as possible.  It'll help, though, that I plan to do some of this stuff in my Rensselaer class, too.

On the plane I also got a cute idea about a database of superheroes, with superpowers, names, max_emergency_level, and teams, who fight supervillians, handle emergencies, and so on.  It's silly, but I'm looking forward to creating a database that includes not only X-men, but also PowerPuff Girls and even Aqua Teen Hunger Force. 🙂


IBM Enablement class, Bloomfield, CT

This week I'm sitting in an IBM enablement class for intro Java, servlets and JSP's, and the toolset (I think those are SW244, 284, and 287 for those keeping score at home).  Since I've taught all this material many times, it's a bit of a challenge keeping quiet when I disagree with an approach.

I'm reminded of the three phases of an instructor's development.  In phase one, he tells you everything he knows.  In phase two, he tells you everything he's learned since then.  Finally, in phase three, he tells you what you need to know.  I always struggle with getting from phase two to three.

It's good to see some of my instructor friends again, though.  (Except Garrett, who's probably the only one reading this.)


Philadelphia, PA

It's Philly this week.  I've got an interesting group who work for the same company last week's students work for.  Maybe I can come up with some kind of inter-city competition — a game, a puzzle, or something.  I'll have to think about that.  This week is all about making the OO transition, but this group appears to be a bit ahead of the group in Westborough so far.  We'll see.

Last week at about 12:30 AM on Thursday the fire alarm went off in the hotel (a Marriott Courtyard in Westborough, MA).  That's the first time I can remember that happening.  Fortunately I didn't have to leave my room, but it was very loud for a while.  From what I hear at the desk the next day the problem had to do with a lint trap in a dryer.

That's odd, but not necessarily remarkable.  What's interesting is that Friday it happened again. 🙂

Xander went on a retreat over the weekend with the church youth group.  I managed to make it home just in time to go with Ginger to drop him off.  Afterwards, Ginger had tickets to a big gala at the Hartford Civic Center hosted by CATIC (Connecticut Attorney's Title Insurance Corporation, her biggest client).  We decided to make an evening of it and spend the night at the Hilton attached to the Civic Center.  The Boston Pops were playing and did a great job.  Anyway, late at night — right about 12:30 AM, actually — the fire alarm went off there, too.

I had no intention of walking down 19 (!) flights of stairs.  Fortunately, I didn't have to before the fire department called it off.  This time it was a bunch of kids smoking in a bathroom that did it.

Can I be petty for a moment?  The Pops were great, but they also hosted a tenor who sang for about 40 minutes during the concert.  He apparently had played Jean Valjean in Les Miz for nearly 3000 performances on Broadway and on London's West End.  He sang "Bring Him Home" (of course), and "This Is The Moment" from Jekyll and Hyde, and "Music of the Night" from Phantom, and several others, including a bizarre rendition of a Barbara Streisand song.  I can't remember which one, which is probably good.

Look, the guy could flat out sing.  He really was good.  But honestly, I can do that.  He's better than I am, but he wasn't 3000 Broadway performances better than I am.  There really was very little he did that I couldn't do almost as well on a good day, for a lot less money.

I'm not really upset about it, but frankly I would have liked it better if the Pops had just played more music instead.

(Okay, okay — How many tenors does it take to change a light bulb?  Three.  One to do it and two to say how they could have done it better.  Sigh.) 

My new Rensselaer class starts next Saturday.  This semester I'm doing the Developing Enterprise Applications class again.  You'd think that eventually I'd actually try to teach the same material more than once, but no such luck.  As I learn more and the field evolves, I wind up moving more and more advanced materials into the Web Applications class so I can focus on higher level stuff in the DEA class.  This semester I think we'll really dig into Object-Relational Mapping tools like Hibernate, or the ActiveRecord framework in Rails.  I need to spend more time on web services and SOA, too.

Of course, it would help if I actually wrote the syllabus.  Can you tell I'm having a bit of trouble getting motivated to start a new semester?


Westborough, MA

I wrote a nice, long post, hit the "Publish" button, and was rewarded with the dreaded 404 Not Found error. I guess I shouldn't be surprised — computer networks have not been kind to me lately. I think I forgot to swing the mouse cable over my head counterclockwise when I sacrified that chicken by the light of the full moon…

Anyway, hi from Westborough, MA. I'm teaching three classes twice. By that I mean I've got a three-class series that's being done once up here in Westborough and once down in Philadelphia. The classes are two weeks in May, two in June, and two in July. That eats up a lot of schedule, as you might imagine. I think I've got an EJB class in Columbus, OH coming up, too, and maybe an Advanced Java class down in Jacksonville just to complete the set. When I hit August I think I'll be ready for a break.

On the other hand, in August I get to teach a Hibernate class for the first time, which ought to be fun. I'd like to start teaching Ajax and Ruby on Rails classes, but I'm still not quite ready for the latter and I don't have any decent materials for the former. I'll get there, though.

Random MS joke: "Did you hear that Microsoft was thinking of adding advertising banners on its blue screen of death?"

(I usually follow up with "This blue screen of death brought to you by Sun Microsystems.")

My server at home still isn't serving. Nuts. I fought with the DNS stuff all weekend. At least I can get my email again, though, which I lost for a while. Talk about feeling deaf, dumb, and blind!


Hello from Jacksonville, FL

This week it's "Practical Core Java" in Jacksonville, FL.  I'm a sub to a sub to a sub again, but that's okay.  The class is taking place at a New Horizons site in Jax.  That's great, though, because I don't have any serious firewall issues to worry about and I automatically have admin access to the machines.

This a private class for a group of mainframe programmers.  There's another Java class going on in the same building for J2EE development with WebSphere.  That might be more fun, but, given WSAD, maybe not.  I'm sure after my next month or so I'll have had all the WebSphere stuff I can take.

I really had a great trip, though, which is not something I normally say.  It turns out that US Airways opened up a "club" at Bradley (BDL, my home airport), which rocks.  Also, I was able to upgrade both of my flights (to Charlotte, and from there to Jacksonville) to first class for $50 each.  I love doing that.  Then I had my first Avis preferred pass through the line (got to go to the front and everything) and made it to the hotel, which was easy because I'd already checked in online.  I wish every trip was this pleasant.

Another benefit is I'll get to see CJ Masters again.  She runs Incepture down here.  I taught my first class as Kousen IT, Inc at Incepture, which was fun, and she and I hit it off immediately.  Ironically, she recently contacted me about teaching an Intro Java class here this week.  How sad that I was already scheduled to teach an Intro Java class in Jax the same week.  Maybe next time.

Heck, if the travel is this easy, I wouldn't mind coming down here once a month or so.  Hello, frequent flyer miles!

On the down side, they installed the old software again.  I brought Java 5 and Eclipse 3.1.2, though, and we'll install it together.