NetBeans 6.1 is a lot better than I thought

July 18, 2008

This week I’m in New Haven, CT, teaching a class that combines UML and Java Web Services (an odd combination to be sure).  The client wanted to use NetBeans as their primary IDE, and I always try to accommodate that if I can.

My last exposure to NetBeans was back in version 5.5, I think, when a couple of friends suggested I give it a whirl.  I’ve been an Eclipse user since version 1, so I’m very comfortable with that environment.  As part of giving a presentation at my local Java User’s Group, I also got a license for IntelliJ’s IDEA, so I’ve been playing with that off an on.  When I don’t want to use a heavy IDE, I generally stick with UltraEdit, which does a decent job, even with Groovy code.

Nevertheless, I downloaded and installed NetBeans 6.1.  I have to say that I’ve been very pleasantly surprised by the editor.  The UML support is surprisingly good, including the capability to generate sequency diagrams from code.  But its JAX-WS and JAXB support has been outstanding.  I’ve been using them with the embedded Glassfish server and really enjoyed it.

I’m in a bit of a rush (have to get back to class) or I’d say more.  What I can say, though, is that if the NetBeans group really does deliver on Groovy and Grails support in NB 6.5, as promised, I’m definitely going to try it.  I’m still mostly an Eclipse person (and the commercial MyEclipse tool as well).  I know it’s practically heresey to say so these days, but I’m still finding that IntelliJ slows me down a lot more than it speeds me up.  But this single week with NetBeans has been a revelation.  I can only hope the Groovy and Grails support when it comes out in October is as good as the rest of the IDE.


Our last, best hope … for message digests?

June 26, 2008

So I’m teaching my course in Securing Java Web Applications (my third one in the last six weeks) and we got to a section that discussed the MD5 algorithm for generating message digests.

One of the students asked, “whatever happened to MD’s 1 through 4?”

I simply couldn’t resist saying, “MD’s 1, 2, and 3 were sabotaged during construction.  MD4 vanished without a trace shortly after it came online.  Now we have MD5, our last, best hope for peaceful digests.”

To my pleasant surprise, about five different students got the joke.

(And yes, every time I see the abbreviation JMS I don’t think Java Message Service, I think J. Michael Straczynski.)

We live for the One; we die for the One.


Eight years and haven’t missed a day yet

June 16, 2008

On May 31, 2000, I officially left my job at United Technologies and became a full-time technical trainer. It’s now been eight years since that day. While I don’t like to talk about personal things here very often, I thought that was worth a mention. That, and the fact that in all the training classes I’ve taught since then (probably somewhere around 250, though that might be a bit low), I’ve never missed a day.

As Inigo Montoya said, “Let me ’splain — no, it is too much. Let me sum up.” After receiving my Ph.D. in Aerospace Engineering from Princeton, I took a job as a research scientist at United Technologies Research Center in East Hartford, CT. I spent nearly 12 years there, mostly investigating the aerodynamics and aeroacoustics of jet engines. That meant lots of math (pretty cool) and lots of Fortran (shudder). Toward the end of my stay, I learned Java and switched to a different group at UTRC that specialized in Artificial Intelligence. Quickly realizing that twelve years of programming in Fortran hadn’t taught me anything about modern software development, I went back to school at night and got my MS in Computer Science from Rensselaer at Hartford.

Just before graduation I reentered the job market. This was in the Spring of 2000, just before the dot-com bubble burst completely. In the end, I had to choose between a developer job, and a job teaching training courses. One night at dinner with the family I said, “I’ve decided which job I want.” My son Xander, who had just turned 8 years old, said, “did you take the one with more money, or the one you liked?” I was very happy to say I took the one I liked, and became a member of the Golden Consulting Group.

Five years later, in March of 2005, I formed Kousen IT, Inc., and went out on my own. I now look back and can honestly say that I’ve never been happier. I spent years in jobs and in situations I intensely disliked. It took me a long time to correct all that. Now I’m finally in a job where

As for never missing a day of class, I simply can’t. These aren’t like academic classes, where you see a single group of students for months at a time (though, come to think of it, I’ve never missed a day teaching an academic class, either :)). People clear their work schedule for training classes. The classes only last three to five days, too, so missing a day is a huge sacrifice. No, I can’t miss a day if it’s physically possible to be there. It’s more than a responsibility; it’s an obligation.

I freely admit, though, that keeping a perfect record going involves some luck. I’ve certainly been sick enough to miss days. Earlier this year I caught some stupid stomach bug that knocked me for a major loop. I couldn’t get out of bed, much less make it to class. I’m just glad it happened to hit me on a day I wasn’t scheduled to teach.

I’m sure that first missed day is coming. Life simply isn’t always controllable like that. Illnesses happen, and I received a reminder about a week ago that my parents are aging and no longer in the best of health. As they say, stuff (or even life) happens.

Still, I wanted to take a moment to feel quietly pleased about the fact that I’ve made it this far.

Recent classes:

Upcoming classes:

  • OOAD/UML in Austin, TX
  • Java Web Security in Asheville, NC
  • Java Web Services in New Haven, CT
  • Java Web Security in Huntington Beach, CA

One of the best things about teaching

October 26, 2007

I’ve been very busy teaching classes recently (The last four weeks have gone Ajax, Spring, Struts 2.0, and XML and Java) so I haven’t had much time to blog.  Every once in a while, however, I try to stop and smell the roses, such as they are.

You want to know one of the best things about teaching training classes?  Think back to when you were in school, and remember the last day of classes.  More specifically, think about the ending of one of the classes where you had to work hard, but wound up doing a good job and being rewarded for it.  Picture that last day, when there are no more assignments, no more exams, no more projects to be done of any kind, just a warm feeling that you did everything that had to be done and you did a good job doing it.

Feels good, doesn’t it?  I get that feeling at the end of every training class. :)

I do enjoy the actual classes.  The give-and-take is always great fun.  For me, a big part of my job is technology transfer, telling the current students what’s going on at other clients I’ve seen (without the specific client names, of course), talking about events in the industry, learning how they plan to use the subject I’m teaching in their actual business.  I also enjoy seeing the light bulbs light up over the students’ heads when they “get” a particular concept.

Also, not every class goes well for every student.  Since the students are grading me, rather than the other way around, I hear about it when it doesn’t work.  I really feel every negative evaluation, too.

But there’s nothing like the joy of finishing, knowing that everybody is (basically) happy, there’s nothing else that has to be done, and you did a good job.  I love that feeling.

(That’s also a much more pleasant reward than what my friend Tom once told me, “the worst class in the world is over in a week,” even though he’s right, too.)


My winding career path

April 16, 2007

I got a question today about why I left the aerospace engineering to become a software developer and trainer, especially when the aerospace field is so popular at the moment.   I’ll assume for the sake of argument that the questioner is right about the popularity of aerospace engineering.  I don’t know any more, for obvious reasons.

I spent four years as a graduate student and eight years as a research scientist in the aerospace engineering world.  I started out investigating the flutter of airplane wings as an example of the nonlinear dynamics of fluid-structure interactions.  That’s what my Ph.D. thesis was all about.Even at that point the “engineering” part of my background was a bit of a running joke in my family.  I was never the sort of kid who took things apart to see how they worked.  I never learned the internals of a car or even a computer.  Everything I did was theoretical and mathematical.  Actually, going into Mechanical Engineering at M.I.T. was my way of doing physics without being a Physics major.  At the time it seemed to me that the Physics community had abandoned most of the “real world” in favor of the very, very small (quantum mechanics, string theory) or the very, very large (cosmology).  While I found both of those areas fascinating, my M.I.T. experience quickly showed me that I wasn’t going to be the next genius who revolutionized either field.  If I went into physics, I felt my career was going to consist of begging for funding to do slight modifications to the existing theoretical structure, just waiting for some genius to come along and revolutionize everything.  I didn’t really want to play that game.  By going into engineering, though, I thought I could make progress in existing fields by applying computer analyses to them.

I fully expected to become a professor after graduation, though.  I always wanted to be a professor.  I really liked teaching and I thought I was going to like research.  Being a professor always seemed like such a cool job to me.

When I was in my last year of my Ph.D. work at Princeton, though, my thesis advisor didn’t get tenure, despite his obvious qualifications.  I still think they made a staggering mistake, but their decision changed my perspective on the whole business.  I had no desire to be a glorified grad student with a title and then not get tenure.  Instead  I decided to go get a “real” job in an industrial lab, build a resume and funding contacts, and then go into academia.  That’s why I joined the United Technologies Research Center in East Hartford, CT.

Within a year or two after I got there in 1988, the market for engineering professors dried up.  I recall seeing an advertisement for an Assistant Professor of Mechanical Engineering at the University of Connecticut and hearing that they received about 450 resumes in response, all of whom were qualified.  I also got married in 1990 to a woman who had her own law practice in CT, so my moving options were also limited.

Worse, it turned out I wasn’t happy doing research anyway.  It’s a lot like the fiction writing I did in the early ’90s — I really enjoyed having done research, but I didn’t really enjoy actually doing it.   Doing productive research means working on hard problems all the time because the easy ones have all been solved.  It means working on problems that may not even have a solution at all.  It also means (and this was the worst part for me) constantly having to justify yourself to funding sources so that they’ll give you money to pay your salary.

I’ve never been happy at zero-sum games.  I’d much rather everyone win, as long as I get to win too.  I don’t need to get an A while everyone else gets Bs.  Likewise, I hated the thought that the funding I received meant that others with good ideas got less or even nothing.  That probably doesn’t make a good businessman, but I know now it’s who I am and I can’t change it.  I have to remind myself of it periodically so I don’t get greedy (I’ve posted about that here before), but it’s true for me.

Some of the work at the research center was very interesting.  I started off in a Theoretical & Computational Fluid Mechanics group working on the unsteady aerodynamics of axial turbomachinery, which is a complicated way of saying I used computer programs and math to analyze air flow through jet engines for Pratt & Whitney Aircraft.  Over the years I moved into aeroacoustics and worked on noise control in jet engines.  I even got a patent during that time, which you can probably find using Google Scholar.

I spent four years in that first group and then another four in the Physical and Mathematical Modeling group.  Eventually funding for acoustics dried up, though, as it always does.  Acoustics doesn’t affect engine performance.  It just affects where and when the planes can land.  Once that’s fixed by some jury-rigged solution (or a change in regulations), it’s back to performance issues.

That happened to me around 1996.  I discovered Java around that time, too, which was still fresh and new enough that it was considered “easy”.  Just download a JDK, write some code in Emacs (I was firmly a Unix user at the time) and run from the command line.  I’d already dabbled in C++, pretty much unsuccessfully, and Java was a welcome respite.  I also had a friend at UTRC that ran an Artificial Intelligence group, and he was willing to take me on.

In the AI group, my task was to help apply AI technologies to engineering problems.  I learned a lot about genetic algorithms and neural networks, or, as I used to call them, the cool stuff in AI.  I worked on one project to analyze elevator data to predict mean time to failures and another to design a distributed, enterprise architecture integrating systems across Otis Elevator’s international network.

That project was an unmitigated disaster.  I suppose it’s possible it all worked out, but it was certainly a disaster for me.  The project used CORBA and C++, neither of which I found very comfortable or easy to implement.  The project also involved three different project managers who disagreed on nearly everything.  We wasted staggering amounts of money.  Plus, I quickly learned that about 15 years of coding in Fortran (and a little Pascal) hadn’t taught me anything about modern software development.

During that time I also knew that I was growing increasingly unhappy with what I was going and where I was going it.  In response, I went to a woman who called herself a “career counselor”.  She gave me a barrage of tests (Myers-Briggs personality tests and things like that) and tried to help me discover what I really wanted to do with my life.

She told me that nearly 75% of all workers are unhappy in their jobs.

That’s a scary statistic.  I’m not sure where it came from, but it rings true, too.  I know lots of people who don’t like what they’re doing.  They get there by all sorts of paths, but it’s very difficult to make a fundamental change.  I usually feel that the problem can be fixed, but it often can’t be fixed easily and almost never right away.

At the same time, a new manager at UTRC gave everyone a copy of “First Things First” and forced us all to come up with our own personal mission statements.  Normally I viewed such a Dilbertian exercise as an amazingly useless waste of time and resources.  This one time, however, I decided to do it right.

In trying to decide what I wanted, I narrowed my list down to three items:

1. I like learning about new, state-of-the-art technologies.

2. I like playing with state-of-the-art toys, especially computer toys.

3. I like sharing what I’ve learned with other people and helping them learn it too.

As a reaction to what I was learning, I started looking at teaching as a possible alternate career path.  In 1997 I made a contact at Trinity College in Hartford, CT, and a year later that gave me a chance to teach a course in sophomore dynamics.

(That figured, by the way.  M.I.T. didn’t have a class like that and I was already in an AI group, so I was hardly prepared to teach it.  That’s one way G-d often plays games with me — often when I struggle with a subject or do badly in it, I  wind up having to teach it.)

I also decided to do some substitute teaching at the high school level.  I was a sub at Glastonbury High School in physics and math.  I quickly became known as a “teaching sub” who didn’t need hand-holding to help the students learn something.  That was fun.

Teaching full-time in the public school system requires a certificate, though, which I didn’t have.  For a few months I looked at the private school system, which was quite attractive until I found out how little they pay.  I’m still rather astonished that they can charge so much and yet pay so little, but the way the system was set up there was no way I was going to be able to afford that move.

In the summer of 1997, I decided to attend the Alternate Route to Certification program.  Connecticut has an eight-week summer program where you can go full time to be eligible to be hired in a public school.  I took an unpaid leave of absence from UTRC and learned about becoming a physics teacher.  Someday I’ll say more about that experience, but not in this post.

Connecticut has one of the highest teacher salary scales in the country, but the gap between the starting salary and what I was making at the time was still too great.  Since teachers are unionized, too, the scale was based purely on seniority and had no provisions for my particular expertise or capabilities.

In early 1998, I wound up on that nightmare CORBA/C++ project I mentioned above.  That convinced me it was time to fill in the educational background I’d been missing, so I decided to go to Rensselaer at Hartford (a division of R.P.I. in Hartford, CT that catered to working professionals) and get my MS in Computer Science.  I also was not blind to what was going on in the community, so I decided to get my Java certification.

One Saturday morning in late 1999 I was sitting in a networking class (some kind of queuing theory as I recall), stewing.  Another member of my team at UTRC had arranged to attend a Java training class, without even asking me about the required code.  Here I was, one semester from graduation (I took two classes a semester all year around to finish as quickly as possible) and with existing Java experience, and nobody even thought to talk to me.  I wasn’t happy.

Then a light dawned.  It seems so obvious now, but at the time it was a huge revelation.  I suddenly wondered, “who teaches those classes, anyway?”

I’d never attended a training class in my life.  I didn’t know how they worked or how they were arranged or taught.  I did know how to find out, though.  If someone on my team had arranged for one, I just needed to follow the trail to see how it was done and asked who they used for instructors.

I got some names and made some phone calls.  I knew I was leaving UTRC, partly because I didn’t want to be there any more and partly because they didn’t really need the sort of work I wanted to do.  Those of you in the IT field may remember that in early 2000 the bubble had burst, but we didn’t know it yet.  You could still write a “Hello, World” program in Java, put it on a resume, and get calls.  Enron didn’t start to collapse until the Fall of 2000.

Interviewing that Spring was a strange experience for me.  I had been in such a specialized field as a research scientist that I knew exactly where all my opportunities would be and, perhaps more importantly, where they wouldn’t.  As a freshly minted Java developer with industrial experience (even if most of it wasn’t in I.T.), I was very popular.  That was truly fun.

Eventually I narrowed down my options to a developer position at a major insurance company (Hartford, CT — as they say, the insurance capital of the world) and a new trainer position at a training company.  The developer position looked a lot like what I already knew, even though I didn’t have a lot of I.T. experience.  The trainer position looked more fun, but I arguably knew even less about that.

My favorite day was when I went home from work one day and I announced to my family that I’d made a decision on a job.  My son Xander (only 7 at the time) said, “did you pick the one you liked, or the one that had more money?”

Out of mouth of babes, or at least young goofballs.  I was very happy to say that I’d taken the job I liked, and the rest, as they say, is history, or at least the subject of future posts.

When students ask me whether they should bother going into IT in these days of outsourcing and few jobs, here’s what I tell them.

Try to find a field you enjoy.  If the field is popular, you’ll stand out because you like what you’re doing so you’ll do it well.  If the field is unpopular, there will be little competition but you’ll stand out because you like what you’re doing so you’ll do it well.

Finally, the vast majority of jobs are found by meeting the right person at the right time.  That usually requires meeting all the other combinations (right person/wrong time or wrong person/right time) a LOT.  Hiring is no fun at all, so most technical hiring managers will do anything to shorten and simplify the job.  That means if they can get a candidate referred to them by someone they trust, they’ll like that person and be eager to say yes rather than no.

I’m sure the poor soul who asked me about my decision to change careers is seriously regretting that now, so I’ll stop.  Thanks for the comment, though. :)


Focusing on what’s important

March 17, 2007

At the No Fluff, Just Stuff conference I attended last week, I managed to talk to a couple of the presenters and quietly ask about the rates they charge.

That’s always a dicey subject, of course, but it’s very hard to get good information about that.  Software trainers don’t have a union, or anything like that.  We also tend to be a pretty independent lot.  Also, software developers are almost always highly opinionated, and trainers can be even worse since they have a soapbox to stand on.  It’s easy to see how egos can bump into each other when we get together.   The result is that my “market research” consists of talking to a few, trusted individuals and then negotiating with my favorite training companies as a subcontractor.

Those can be unreliable sources of information, though.  Individuals can exaggerate and claim that they gate a particular rate when they rarely see it.  Training companies want to minimize their costs so they may claim they can find someone else for a lower price.

My original approach was to talk to a good friend who was a trainer and adopt his price as mine.  It also fit my budget, which is based on invoicing a certain minimum amount per month.  Based on that amount, I know how many days I need to teach.  I’ve learned over the past couple of years what my upper limit is before I start to get really tired and my quality starts to suffer.

For me, though, I still get many more requests than I can honor.  Without any marketing at all, my schedule can get booked solid for months.  It’s probably inevitable that I start wondering whether I’m undercharging for my services.

At the NFJS conference the presenters are among the leaders in the development industry.  They consequently are in serious demand for their services, but mostly in the form of contracts.  Most of them also do training, though, and they charge a premium for it.

Comparing my rate to theirs, though, is not so easy.  I’m a trainer first and a developer second, though writing code is very important to me.  I can’t imagine I’d ever be happy without being in a classroom occasionally, for reasons I’ve detailed here many times.  Since I spend much more time and effort teaching than writing code, it’s also very unlikely that I’ll ever come up with some fundamental framework that everyone adopts, so I’m unlikely to be the sole or original source of some highly sought-after technology.

Still, it’s hard not to get greedy.  I spoke to a couple of presenters at the conference, as I said above, and what they said gave me the feeling I was significantly underpaid.

Now, I’m not a presenter at NFJS.  I don’t have major book publications to my name.

(Aside: I once read that Bruce Eckel, author of Thinking In Java — now in 5th edition, but whose first edition was my first Java book — said that the book didn’t make him a lot of money.  Instead, being the author of that book helped him increase his rates considerably, and that made him a lot of money.)

I don’t run a consulting firm with lots of employees.  I also don’t run a training firm with lots of employees.  I occasionally work directly with a client instead of as a subcontractor to training companies, and that’s both much more lucrative and much more work.

Greed is a great motivator, though.  So is jealousy.  I don’t like either one, but it’s hard to ignore them.  I suppose they’re acceptable if I use them as motivation to work harder and improve myself.  I’m now thinking I should get more involved in book projects, for example, and become a better developer by doing more project work.

In the meantime, though, I prodded my clients by asking for a slightly higher rate.  One client accepted without a second thought.  Another pushed back, and I compromised.  A third said fine, charge anything I want, but that it will affect what work is offered to me later.

I also had a change to talk to one of my friends at a training company and discovered that one of those presenters at the conference was lying to me, or at least exaggerating.

The upshot of all of this is that I have to periodically remind myself what’s important to me in this business.  I want to work with clients I like.  I want to work on state-of-the-art technologies using state-of-the-art tools (I’m never going to be a Microsoft Word trainer, for example).  I want to make money for people I like.  I want to help students do things they couldn’t do before.   I’d also like to make a million dollars, but only if I can still do all the above.

Money isn’t the most important thing, not by a long shot.  I need to have enough that it’s not an overriding issue, and there’s a certain amount of pride involved, too.  I believe I am a very good trainer and I’m always working to get better.  I think that’s worth a certain amount of reward and a certain amount of respect, a respect in this culture is often given in dollar amounts.  Still, the key is to do what I want to do with the people I want to work with, and that’s awfully valuable.  I spent years and years in other jobs where I didn’t get any of that.

My route to making money will be to learn what’s both popular and enjoyable and cutting edge and do a lot of that.  That’s why these days I teach a lot of Hibernate, Spring, JSF, and Ajax classes.  I also happen to like EJB3 and think it’s going to be very big.

In the meantime, I’m going to spend this afternoon digging into  Dierk Konig’s Groovy in Action book some more and get ready for next week’s class.


Always trying to make contact

December 22, 2006

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.


Some things I’m happy about

December 9, 2006

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

December 6, 2006

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

October 17, 2006

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. :)