Always trying to make contact

I guess this is more of a Xander story than a holiday story, but it has the benefit of being true and even cheerful.

My son Xander (short for Alexander — calling him Xander makes him unique in a crowd full of Alexanders and Alexandras) enjoys playing baseball, but he never had a chance to play in an organized league until we moved to Marlborough two years ago.  When he started, he was a 12 year old in a league that let in 12 to 14 year old boys, most of whom had been playing organized baseball all their lives.

(That, as it turns out, is a New England thing.  When I was growing up in Pennsylvania, football was king.  Since I was small and made up for it by being slow, I didn’t have much of a career.  Around here, everybody plays baseball.  Frankly, I think that’s a good thing, as long as they’re not accursed Yankee fans.)

Xander was smaller than most of the other boys at the time, but he always had more confidence than he could handle.

(Winston Churchill once famously said that the Balkans manufacture more history than they can consume locally.  I often feel similarly about Xander.  If he survives, he’ll be a very impressive adult.  Sometimes I think that’s a pretty big “if”.)

Xander therefore played anywhere and any time he got the chance.  Still smarting from my own little league baseball experiences (I got to play in a 12 to 14 year old league when I was 15 and nobody minded), I arranged to get the boy some lessons at a local batting cage.  That helped, but he was still way behind the other kids in skills development.  He had a natural eye, though, and was learning fast.

Anyway, at the end of that first season the league had an all-inclusive playoff.  The game was held on a Friday evening in late October (this was a Fall league focused more on instruction than winning) so it was pretty cold out.  I was teaching that week but made it back from Boston during the first inning.

The game was a back-and-forth affair, as games with kids that age often are.  Pitchers are unhittable for an inning or two, then can’t find the plate at all, then find it again sporadically.  Fielders made hard plays and botch easy ones.  Throwing to a cut-off man is always an adventure.

Finally we reached the bottom of the last inning (the 7th), with my son’s team down by three runs.  A couple of kids get on, a couple of outs happen, and eventually my wife and I realize that a potential nightmare is about to happen.  Xander is about to come to the plate with two outs and two men on in the bottom of the last inning of a playoff game.

Now as bad as my baseball career was, I still remember a lot of it.  I remember the first time I saw a real curveball and dived out of the way just before the umpire said “strike!” I remember actually hitting the ball over the center fielder’s head and making it all the way to second before the throw came in.  I remember fielding a ball cleanly at third (third? what the heck was I doing at third?) and being so surprised I’d snagged it that I airmailed it over the firstbaseman’s head.  I remember grounding to the shortstop and being thrown out at first even thought the fielder bobbled the ball three times.

(Another kid, trying to be nice, said to me on the way back to the dugout, “are you faking it, or are you really that slow?”)

So I’m very worried now, because if Xander strikes out to end the game with the tying runs on base, it could scar him forever.  I looked over a Ginger and I could tell she was thinking the same thing.

So what happened?  My boy fouls of a bunch of pitches, takes two strikes, and hits a grounder up the middle that he beat out for a single.  The next kid up flies out to end the game.

I, of course, let out a huge breath that I hadn’t realized I’d been holding.  When I met with Xander afterwards, I asked him about it.

“Weren’t you worried about striking out?” I asked.

“Nah,” he replied.  “I knew I’d make contact.”

And there you have it.  It’s been two years now and I’ll bet he’s even forgotten about it, but that’s Xander in a nutshell.  He’s got a lot to learn and the thought of him being a font of wisdom is bizarre, but that’s not a bad life lesson.  When it’s your turn at bat, know that you’ll make contact and everything will be okay.  I can live with that.

Happy holidays, everybody.

Web Immortality (or, some things never go away)

I didn’t start out as a software instructor, or even in the IT industry at all.  My original career was as a research scientist.  My first permanent job was investigating the unsteady aerodynamics of axial turbomachines for United Technologies, the parent corporation of Pratt & Whitney Aircraft Engines, among other things.

I guess it’s okay to say now that I really didn’t enjoy doing research.  I was always so good at the Game of School that I kept going until I had a Ph.D.  That meant I was trained to be a researcher, even though I wasn’t wild about the job.  If you don’t enjoy a job, naturally you don’t do as well, and even more naturally you start looking for distractions.

Way back in the late Jurassic (circa 1990), I decided I was going to become a science fiction writer.  There was this new thing around called email (all text-based, of course, none of this HTML garbage because there wasn’t any HTML) and we even had these things called LISTSERV groups.

(Speaking of email, one of my fun memories was when one of the email groups I subscribed to at the time received a message from a member down at McMurdo Station in Antarctica.  At the time I couldn’t email Pratt & Whitney across the parking lot, but I could email Antarctica.  That was SO cool. (Or cold, as the case may be.))

Anyway, I joined an email group called WRITERS and discussed fiction writing with them.  A bunch of us eventually started cranking out stories and even made a few minor sales, but that’s a story for another time (I’ll stop these puns, I promise).

One misguided adventure of mine, though, was to pen what I used to describe as the greatest Star Trek original series parody ever written.  It was called “Star Trek: The (Intentionally?) Lost Episode” and garnered me a very tiny, if enthusiastic, degree of fame.  Recently I mentioned to a friend that I’d written that story, he did a Google search, and the rest is history — or rather, a link to the story here.

I had no idea this thing even existed any more.  If you consider reading it, let me just say that (1) it gets better as you go along, (2) I had a ball writing it, and (3) STtNG was only in its third or fourth season at the time,  so this was a _long_ time ago.

If you’re already in coast-down mode as the end of the year approaches, enjoy.  Let me know if you still find it amusing.

Tools vs. Technologies classes

There are two types of training classes…

(Okay, mandatory aside: there are two types of people in this world — those who divide people into two categories, and those who don’t.

(Variation: there are actually three types of people in this world — those who can count and those who can’t. :)))

… classes based on tools, and classes based on technologies.  It’s the difference between a “servlets and JSPs” class and a “servlets and JSPs in RAD6” class.  IBM itself has classes in both.  You can learn about the technologies, or learn about the tools.

Of course, any tools class uses the technologies and every technology class refers to the tools, so they’re not completely independent.  Of the two, however, I much prefer teaching technology classes to teaching tools classes.

That’s probably not a big surprise.  Technology classes are about learning how to do new things I didn’t know how to do before.  “You want to do multimedia?” they say, “here’s an API.  Go for it!”  Or object/relational mapping.  Or dependency injection.  Or whatever.

Tools classes assume that you have a tool that runs (sometimes a rather bold assumption) and you’re learning how to use it to get the job done.  While I don’t mind learning that, the class often gets sidetracked with discussions on the proper way to handle the technology issues that inevitably arise.

Plus, sometimes the tool doesn’t do what it said it can do.  Or it crashes.  Or an update won’t install.  Or it works on every machine but one for no discernable reason.

Note I haven’t even gotten to the fact that it is inevitable that some student in the room will be incapable of following written directions, no matter how often or how clearly they are explained.  That’s just a fact.

The good thing about tools classes, though, is that they give me the opportunity to examine parts of the tool that I never use.

This week I’ve been teaching a tool class (of course), the subject of which is Eclipse 3.2 with WTP (the web tools platform).  I’ve vented some frustrations here recently about Eclipse issues, but the examples in the materials seemed to have worked, with only about three crashes in the the three days.

Yes, three crashes in three days, for completely unknown reasons.  All I have to do is restart the program and things worked again, but still.  I think the problem is that while Eclipse is pretty mature at this point, I think the WTP is a version 1 product and behaves accordingly.  Someday it’ll be good, but right now it’s problematic.

(I’ll be that drives the MyEclipse developers nuts.)

I did get to play with the Database Explorer a bit, which was fun.  As Callisto projects go, that’s an interesting one.  I’m still waiting to use TPTP or BIRT or some of the others.

So it’s been a good class.  The students appear to have learned a lot (even the one who simply can’t follow printed directions), the material was fresh enough that I found it interesting, and I was even able to manage the off-topic-but-fascinating architectural discussions enough to finish nearly on time.  Not a bad week’s work, actually.

Of course, since the Red Sox signed Daisuke Matsuzaka, life is good.

Netbeans marketing?

A few days ago I added a post here about my Eclipse frustrations.  Since then I’ve gotten three comments from readers suggesting I move to NetBeans.

Now, it’s interesting enough that anybody found this blog at all.  I know I have a few regular readers (I’m reminded of the quote from The Big Chill where William Hurt says something like, “I had a small, deeply disturbed group of listeners”), but none of the comments came from them.

That means that the comments are either coming from lurkers (possible but not likely) or people who search for blog posts like mine.

Months ago, when I first mentioned how much I like the MyEclipse editor, I received a comment the next day.  I contacted that person and found that they really do search on a regular basis for people using the product, which frankly I find a feature rather than a bug.  One of my favorite things about MyEclipse is that their tech support is so responsive.  Every time I’ve sent them an email I’ve received an answer within hours, and every time I’ve left a post on their forum I’ve gotten an answer in the next day or two.  That’s really good.  It’s part of the reason (other than the excellent quality of the product) that I recommend it in my training courses.

I’m not accustomed, however, to getting messages from users of an open source product.  Here’s the other odd thing, too.  In my recent posts I mentioned trying NetBeans.  Each comment has suggested I try it, as though I hadn’t yet.  I also responded to each saying I’m in the process of doing so.  Still I got another comment suggesting I try the product.

In other words, it looks like some people are doing a keyword search for terms I’m using (IDE? Eclipse? NetBeans?) and responding without actually reading what I’m saying.

Maybe I’m overly cynical sometimes, but that sounds like marketing it me. 🙂  The question is, though, who’s gaining by doing so?  NetBeans is an open source product from Sun.  Who cares if I use it or not?  That suggests people are commenting because they really do care, but why do they care that much?  One comment I would understand, or even two, but three in three days?

Time will tell, I guess.  Let’s see if I get an automatic comment this time.


Some things I’m happy about

I realized I’ve been doing some complaining lately, probably because I’ve been fighting a cold recently and that makes everything harder.

(Aside: In almost seven years of full-time training, I’ve never missed a day due to illness. This week I came awfully close to breaking that streak, but pulled it out somehow. Now if my ears would only unplug…)

To compensate, I thought I’d list a few things, both technology-wise and other, that I’m happy about.

1. The EJB3 spec means I never have to deal with JNDI again. They’ve replaced it with dependency injection. Since JNDI is also known as the bane of my existence, I’m very, very happy about this.

2. Speaking of EJB3, they took a technology that was a maze of complications and confusion and made it really easy. Sweet.

3. My Comcast cable modem is probably three times as fast now as it was a couple of years ago. I realized this week that IBM had finally released RAD7. The total download size is about 5.3 gigs (yes, gigs). I waited until I got home and started the download and it took just over two hours. Amazing. Of course, it makes me wonder if I could have had that speed all along, but they’ve been throttling it…

4. In a year when we got a new James Bond, a new Superman, and a new Batman, the Batman movie totally wins, mostly because it had a wonderful script, great performances, and even excellent music. I liked the Bond movie, too, but the torture scene was disturbing, even though it was true to the book. I found the Superman movie disappointing. Still, as Meatloaf once said, two out of three ain’t bad. Daniel Craig and Christian Bale are two actors I’d never heard of but now look forward to watching.

(Another aside: Rachel Dawes gives this big speech at the end about how “the man she loved” never came back.  Excuse me, but you’re talking to a good-looking, intelligent billionaire who obviously loves you.  Aren’t you setting your standards just a wee bit too high?  Of course, then she went and married Tom Cruise, so her judgement is seriously open to question anyway.)

5. The movie Daredevil (which I felt was quite underrated) introduced me to the band Evanescence. Their album The Open Door was released a couple months ago and I still play it every time I’m in the car. It’s become one of my all time favorites. The song “Good Enough” is almost too gorgeous.

6. I’m still grateful that I get to read columns from the Sports Guy (Bill Simmons) and articles from the writers at Baseball Prospectus (I almost said “guys” and then remembered Christina Kahrl, who is excellent) on a regular basis.

7. I love my job, really enjoy running my own business, and people keep calling offering me money to go to new places and teach interesting things. Life is good. 🙂


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. 🙂

I used to like Eclipse

When I first started teaching Java back in 2000, I needed an editor for the students to use. The goal was to have something small and self-contained enough that they didn’t get lost using packages, did a decent job with syntax highlighting, and ideally had an integrated debugger. Code assist was a nice goal, too, but seemed like a long shot.

At the time, for my own development I used Emacs, believe it or not, and an Emacs plugin called something like the Java Development Environment. I don’t remember the details, but I do remember really liking it. It had a good set of templates that I could expand in order to add in syntax, the syntax coloring was very good, and it just felt right.

I played with JBuilder at the time, and even the long lost (but not terribly lamented) Visual Cafe for Java, but never really liked either of them. I think the last version I used of JBuilder was 6. I did play with IBM’s VisualAge for Java, but that was 50% interesting and 50% nightmare. Usually nightmare won in the end — I never liked VisualAge, and the fact that it didn’t have a clue about JSPs didn’t help.

In class, we usually used a shareware program called SitePad. Friends of mine used EditPlus and its derivatives, but I liked SitePad. It was quite lightweight and easy to use. The students found it intuitive and easy.

And then, along came Eclipse.

Eclipse came out as version 1.0, even though IBM’s first version of WebSphere Studio Application Developer was version 4.0.

(I suppose that’s another illustration that not all evil in this world comes from Microsoft.)

I loved Eclipse from the word go. It was easy and enormously productive. The market has since confirmed that impression, as Eclipse grew in market share to dizzying heights, almost destroying the commercial IDE market in the process. Even JBuilder is just another Eclipse plug-in now.

Of course, Eclipse never understood servlets and JSPs. For that I had to suffer through the slings and arrows of WSAD 4, then 5, and now RAD6. Thank goodness MyEclipse came along, or I’d still be fighting those battles. Actually I still am fighting those battles, but at least I have an alternative when I get to choose. I don’t know why IBM assumes everybody has a mainframe on their desk with more gigs of RAM than they can count, but their products bring my computers to their knees. MyEclipse was much better. As Eclipse moved to version 2 and then to version 3, things just got better, faster, and easier.

Until now. Eclipse 3.2 is a beast. It’s almost like somebody from IBM got to the Eclipse foundation and forced them to turn Eclipse into RAD6. It’s massive, awkward and ugly now, with lots of conflicts between the different pieces of functionality. The Callisto release (which included Eclipse 3.2, the Web Tools Platform, and about ten other projects) gave us zillions of lines of code that feel buggy and don’t work together well.

MyEclipse 5, forced to follow the Eclipse 3.2 behemoth, bundles in the WTP and adds a few thousand plugins on top (I wish that were an exaggeration). Lovely. Now I need a couple gigs for everything and still run into problems.

A couple weeks ago I taught a JSF class in Jamaica. One of the students there really wanted to use NetBeans, so we tried that. I downloaded the product, installed their visual web toolkit, and almost immediately crashed the product when I tried to bring up a JSF page. Yikes.

Okay, I thought, I’ll show off what MyEclipse can do. Unfortunately, I allowed MyEclipse to do its normal update that morning. Suddenly its visual editor didn’t work either.

Eventually I had to go to the MyEclipse forums, where they told me I needed to do a clean install of version 5.1 in order for things to work. I did that, and they worked, which is good. Then I decided to play with EJB3 and ran into problems all over again.

EJB3 is probably the most interesting part of Java EE 5. Now that my Hibernate materials project is finished, I want to dig into that. Unfortunately, while Eclipse 3.2 understands Java 5.0 and even Java 5 annotations, MyEclipse 5.1 doesn’t understand Java EE 5. Now it’s back to plugins again.

I went to the JBoss site (JBoss understands EJB3) and installed their JBoss Eclipse IDE using the update manager. Then I tried to create an EJB. Crash and burn.

I eventually had to download a completely separate, bundled instance of JBoss IDE. In that I was able to create an EJB, but ran into massive problems when I tried to deploy it.

Blech. It didn’t used to be this way. You downloaded Eclipse and unzipped it and you were off and running. Now everything is a painful mess of conflicting plugins and version numbers. Maybe I’m just tired, but it takes so much energy now to get all this stuff working any more.

I don’t know what the future holds, but I seriously doubt either product is going to get any smaller. I can only hope the bugs will get fixed and the different pieces will start playing nicely with each other.

Of course, don’t even get me started on the fact that Firefox 2.0 hangs roughly once every other day.

Hibernate OK; On to EJB3

After a massive crush marked by multiple overnighters inside a small number of days, the Hibernate materials were finally finished. My client is happy with them. Personally, I mostly see flaws at this point, separated by large stretches of “not bad” sections. I think after I get a little distance from them, I’ll feel better about the whole thing.

When I was a grad student and working on my Ph.D. thesis, a friend of mine used to say that if you didn’t get nauseous every time you looked at it, you weren’t working hard enough. 🙂

Anyway, that marked the end of a major development experience for me. Developing decent training materials is just plain hard. It’s easier if I know I’ll be there in the classroom and can deal with any issues that come up. It’s quite another feeling knowing the materials could be in the hands of an instructor with limited experience in the area who is relying on my materials to bail him or her out of awkward questions.

Here are three levels of understanding, from the training point of view:

1. Knowing a technology well enough to play with it and build reasonably simple, self-contained examples, hopefully a bit beyond the old “Hello, World!” level. That means you can write sample apps in real time and solve the labs successfully and much faster than the students.

2. Knowing the material well enough to teach it, which means being able to handle difficult questions like, “my set up is this particularly strange and bizarre system — so what do I do?” Or, “my system has a weird business need that nobody seems to address. You’re the instructor. How do I make it work?” Or even, “I did everything the book says but it still didn’t work. Why not?” Hey, that’s a big reason the students are there. They don’t necessarily expect you to know all the answers, but if you can’t at least address those sorts of questions, you aren’t really ready to teach this stuff.

(My problem is that I want to be able to answer every question immediately and completely accurately. That’s a tough goal, but we all need goals….)

(One more aside: my over-under for “I don’t know” statements is three. Students always say they prefer instructors to admit it when they don’t know something, but they only mean that to a limited extent. If I say “I don’t know” more than three times, they start to wonder

3. Knowing it all well enough to write materials, which means you know what’s important and what isn’t and how to get the important stuff across to a wide range of students, even if the instructor isn’t really at stage 2 yet.

That last one is hard, especially because there are three steps in the maturation of an instructor:

1. You tell them everything you know.

2. You tell them everything you’ve learned since then.

3. You tell them what they need to know.

That’s quite a different list. It’s very hard, especially for a new instructor, to get out of stage 1. In our highly dysfunctional educational system, the old “sage on the stage” model implies that the instructor knows everything and the students listen attentively and worshipfully. It’s also one reason why college professors tend to have such enormous egos.

(Aside: that’s one the biggest differences between teaching training classes and teaching academic classes. In training classes, I’m not grading them; they’re grading me. In an academic class, if I tell the students to do something, they have to do it. I’m the one with the power. In a training class, they’re grading me. I have to adapt to the needs of the students instead.

That’s a much harder way to operate, but much more rewarding, for me at least. Plus I don’t have to assign and grade homework. 🙂

When I walk into a Rensselaer class, I can almost feel the rush as I walk to the front of the room. I’m in control. If I decide something is important, it’s important, even if the students only have my word on it. It’s heady stuff. In a training class, the students have a job to do or they wouldn’t be there. It’s important for me to figure out what they really need and help them learn it, or I won’t get a good grade. It’s very humbling sometimes.)

Experienced instructors sometimes have a hard time getting out of stage 2 (telling them what you’ve learned recently). It’s tough, because part of the reason I became an instructor is that I not only enjoy learning new things, I love telling people about what I’ve learned. Heck, look at the title of my blog. 😉

It’s important, though, not to overwhelm new learners. I took a golf lesson once and after the pro told me three new things I was very excited and enjoyed hitting the ball. Unfortunately, he couldn’t leave well enough alone. By the time he was finished, I was a complete mess, full of what felt like a huge number of contradictory rules. I couldn’t hit at all after that. I try to remind myself of that experience when I teach.

Frankly, I’m not sure where I’m going with all this, other than to say it’s obviously been too long since I’ve made a blog entry. I clearly have too much to say at the moment.

With that in mind, let me leave it at this. The Hibernate materials are done. They’re pretty good and seem to do the job well. I learned a ton in the process of writing them, and will no doubt learn more as I get feedback on them.

I’ll certainly say more later. Heck, I’ll probably be posting several times in the next week or two because so much has happened, but this post is already way long enough.