10 years, and never missed a day

On May 31, 2000, I formally left United Technologies Research Center and joined the Golden Consulting Group (now BIT Advisors) as a full-time technical trainer. ¬†I’m posting now to celebrate the fact that, having just passed my 10th anniversary at a technical trainer, I’ve still never missed a day. ūüôā

I spent almost 12 years at UTRC.  The first eight were as a research scientist, where my specialty was theoretical and computational analyses of the aerodynamics and aeroacoustics of jet engines.  It all sounds pretty impressive, at least when it worked.  If you look, you can still find some papers I wrote or co-authored, through Google Scholar.  My work at the time consisted almost entirely of lots of math and lots of FORTRAN (shudder).

I was never that wild about research. ¬†I liked the actual investigating part, and I liked presenting results and explaining what they meant, but I hated all the begging for funding. ¬†That’s actually how I wound up at UTRC in the first place — I planned to be a professor, but I thought if I went to a research laboratory I could build up my resume and publications list and then later join a university somewhere. ¬† Unfortunately, the market for professors fell apart soon after I joined UTRC. ¬†A year later I was married to a local girl, too, so I wasn’t able to move to wherever the opportunities might be. ¬†Sigh.

I was always an awkward fit in engineering. ¬†I never took things apart or put them together as a kid. ¬†I liked the science aspect, but never really felt comfortable as an engineer. ¬†I always wanted to move away from FORTRAN, too, which was problematic because I naturally didn’t want to write my own numerical analysis libraries. ¬†Eventually, though, I discovered Java back around version 1.0.6, and started learning that.

Around the same time, I made a friend at UTRC who ran an Artificial Intelligence group. ¬† After some discussion (and the fact that the acoustic funding dried up), I joined his group and started learning about neural networks and genetic algorithms. ¬†Unfortunately, I also realized that about fifteen years of coding in Fortran hadn’t taught me anything about modern software development. ¬†So I went back to school at night at Rensselaer at Hartford and got my MS in Computer Science. ¬†I also became a Sun Certified Java Programmer along the way.

During the spring of 2000, when I started interviewing, I found that I could either work for a consulting firm as a developer (back then having the SCJP certification was hot), or I could join a training company and teach technical training courses in business and industry. ¬†It came down to two job offers at the time. ¬†I’ll always remember my dinner-table conversation the night I made my decision.

Me: I’ve decided which job to take.

Xander (my son, age 8 at the time): Did you take the one that had more money, or the one that you liked?

Out of the mouth of babes. ūüôā ¬†I’ve always been pleased to say that I took the job I liked, and I’ve never regretted that decision.

After five years with Golden, I eventually went out on my own. ¬†I’ve now been an independent trainer for five years as of last March, as the owner (and sole employee) of Kousen IT, Inc. ¬†I’ve learned a ton along the way (sometimes I shudder to think about how little I knew when I started) and still love what I’m doing, especially when it involves Groovy or Grails.

One notable achievement, as I mentioned at the beginning of this (way too long) post, is that I still haven’t missed a day. ¬†There are roughly 20 or so training days available in a given month, and a typical trainer tries to schedule between 10 and 15 of them. ¬†How many depends on the length of individual classes (a two-day class often wipes out a week, because it’s very hard to find a three-day class that will fit into the remaining slot), but you don’t want to teach too many in a given month or you get tired and nothing good comes of that. ¬†I tend to average about 120 to 150 days a year, so conservatively I’ve taught about 1200 days during that time.

Some of that is luck, of course. ¬†I’ve certainly been sick enough that if I’d had a class scheduled, I couldn’t have made it. ¬†Also life tends to intervene, with family illnesses and the like. ¬†But so far, so good. ¬†I’m rather proud of that, actually, and hope to keep the streak going as long as possible.

My wife is very happy I made it, too, partly because now I’ll stop obsessing over it. ¬†Over the last few months I grew increasingly paranoid that something would happen to cause me to miss a day, but fortunately it never did.

Maybe I’ll see you in a class someday. ¬†If so, the odds are very good that I’ll be there the whole way. ūüôā


My approach to academic teaching

I recently read a fascinating post by Joel Spolsky entitled “Capstone projects and time management”.¬† It’s highly opinionated, as usual, but makes several interesting points about teaching computer science in academia.

He basically claims that academic computer science doesn’t teach you to use modern tools, or do version control, bug tracking, teamwork, planning, etc., etc., etc.¬† He repeats his frequent assertion that the academic world is almost completely divorced from the real world of software development.

I imagine he’ll get a ton of responses to his post, which is fine.¬† Somebody needs to whack the beehive every now and again, and I’m glad this time it won’t be me.

(I’ve been bumping into beehives lately, which is unfortunate.¬† I like causing trouble, but I hate getting into trouble, and I’m doing way to much of the latter.¬† Maybe it’s my premature entry into curmudgeon-hood.¬† Ginger thinks it’s way too early for me to be turning into such a grumpy old man.¬† But, you kids, get off my lawn!)

At any rate, most people who follow my blog are aware that my regular job is teaching software development training courses.¬† Roughly once a year, though, I get to play at being a professor at Rensselaer Polytechnic Institute in the Education for Working Professionals program in Hartford, CT.¬† That’s formerly Rensselaer at Hartford, formerly the Hartford Graduate Center.¬† In the late ’90’s I got my MS in CS there, at night, while I was transitioning from my career as a research scientist into my current business.

I teach a class called “Developing Enterprise Applications”*

*So all of our programs work on the library computer on a starship (rimshot).

The basic idea is that I try to show the students the current state-of-the-art in software development, based on my experiences.¬† Since I teach a lot, I can travel to 20 to 40 different companies a year.¬† That gives me a decent sense of what’s going on around me, along with blogs, podcasts, twitter feeds, and participating in the Groovy and Grails open source projects.

I’ve taught my Rensselaer class about half a dozen times so far, and it’s been completely different each time.¬† Most recently I taught it last spring (2009).¬† We talked about Spring and Hibernate, used a Subversion server to check in code (actually a Google code project, but that’s the same thing), ran lots of JUnit tests, added Ajax capabilities with prototype and, and briefly went over, of course, Groovy and Grails.¬† I write code during class which the students are free to use, and I keep notes on Google Docs, which I share with them.

Here’s the cool part, though.¬† There are no assignments, no exams, and no homework of any kind, with one exception.¬† At the end of the course, the students have to present an application they’ve written to the rest of the group.

The choice of project is completely up to the individual student.¬† I do give them a list of requirements, which are negotiable until about half-way through the semester.¬† Here’s a portion of this years’ list:

  • Use a framework (Struts, Spring MVC, JSF, Grails, RoR, or other)
  • Create an ORM layer (Hibernate, JPA, roll-your-own)
  • Test as much as possible (unit, integration, functional)
  • Ajax capabilities are a plus
  • Do something with web services (REST or SOAP; at least consume, generate if possible)
  • View templates are optional but preferred (Velocity, Freemarker, Sitemesh, whatever)

I’m quite flexible on the actual implementations, as long as the student clearly learned something and the implementation has some value.¬† Students can write in Java (most of my demos are in Java, so that tends to be a favorite), or .Net, or anything else they prefer, as long as they try to fulfill the requirements above.

My favorite requirement, however, is the Design Document.¬† This is very important to me because I want the students to tell me what worked, what didn’t, what they liked, and what they didn’t.¬† I want this to be a low-pressure opportunity to experiment, and if they’re truly experimenting, then not everything will succeed.¬† I want to know what they tried, even if it failed.

I do ask that one use case has to work.¬† I’m fine with experimenting, but there’s nothing like working code to motivate you.¬† Students (like most developers) tend to way overestimate how much they’ll actually finish, though, so I only ask for a single case to function correctly.

Regarding teamwork, I allow them to work in groups of one or two only.¬† My experience has been that groups of three or larger don’t finish in time, or one student winds up doing too much of the work.¬† I like the idea of doing a team project, but I haven’t figured out a good way to manage it yet.¬† Two person teams tend to work, both in scheduling and production.¬† Most students prefer to work by themselves.¬† I’m fine either way.

During the last class, each student (or group) hooks up their laptop to the projector, demonstrates the application, and then walks through the code.  I bring the donuts and coffee, and we all watch together and ask questions.

Then I give out the A’s.¬† If you clearly tried something ambitious, and you clearly learned something, and you fulfilled the deliverables above, then why not?¬† I only give out A’s and F’s, and the latter only happens if a student clearly left everything until the last minute, never came to class, and then tried to snow me with a rushed project.¬† My rule of thumb is that if I could do your entire project in a couple hours, you didn’t do enough*.¬† I get a student like that about once every other year.

*Of course, I have to pretend I don’t know Grails when I say that…

I find this a very easy, successful way to teach, and the students seem to like it too.

Baseball Teaching

Dragons roar, cough, and sputter in Dayton

Tim Kurkjian says you should never miss the chance to go to a ballgame, because you might see something you’ve never seen before. ¬†On Tuesday I got the chance to go to see the Dayton Dragons play in their charming stadium, Fifth Third Field (seriously, that’s the name) in downtown Dayton, Ohio.

(I’m here this week teaching a class that combines Java Server Faces, Spring Web Flow, and Spring Faces — an adventure to say the least, but a story for another post.)

Accompanying me was my friend Stephen Williams, who I hadn’t seen in about eight months. He lives reasonably close to Dayton, but had never seen the Dragons play.

The Dragons are the A-ball affliate of the Cincinnati Reds. ¬†They draw extremely well in Dayton, despite the fact that they’re really, really bad this year.

(This is in contrast to my own Connecticut Defenders, who are limping their way out of town this season and playing to an almost empty stadium.  That, too, though, is a post for another day.)

The Dragons were 8 Р23 when the game started.  Their opponent tonight was the West Michigan Whitecaps, the Class A affliate of the Detroit Tigers and leaders of their division with a record of 21 Р9.  The weather was beautiful, roughly 70 degrees and sunny, with a very mild breeze, and the stands were nearly filled.  They were treated to what only can be described as a very odd game.

The fun started in the bottom of the second inning. ¬†There’s no score when Taylor Sloval led off with a walk. ¬†Then Stephen Chapman was called out on strikes, leaving a man on first with one out.

The official boxscore then says, “Kevin Coddington reaches on a fielders choice, fielded by third baseman Bryan Pounds. ¬†Tyler Stoval to 2nd.”

Hmm.  How did that happen?  How can a third baseman field a cleanly hit ball and manage not to get either runner out?

The key is that it looked to everyone in the place, including poor Bryan Pounds, like Coddington hit a soft fly right to him which he then caught. ¬†Pounds looked around, expecting the umpire to signal an out, but nothing happened. ¬†The runner, seeing this, kept going for 2nd, and by the time Pounds threw the ball there, he was called safe. ¬†Even that wasn’t clear, though, because it looked like the throw beat the runner.

So, either Coddington is out and Stoval is safe at 2nd on a stolen base, because he wasn’t tagged, or Coddington is safe at 1st because the ball bounced, but Stoval is out at 2nd on a force out. ¬†Which is it?

The umpires got together and talked it over. ¬†Eventually they settled on the unlikeliest of outcomes, which was that both runners were safe, but Coddington didn’t get a base hit on the play, nor was anybody charged with an error. ¬† Instead, it looked like Pounds was an idiot for holding onto the ball too long.

In my scorecard, I just put in a giant question mark. ¬†Welcome to A ball, where the umpires, too, are not necessarily ready for the big leagues. We’ll come back to that later.

Of course, what followed was a double and a single, resulting in a 2 Р0 lead for Dayton.  Yay home team.

Skip forward to the top of the 7th, where the fun really started. ¬†The Dragons are holding onto a 2 – 1 lead when Billy Nowlin for the Whitecaps singled and stole 2nd. ¬†Joseph Bowen struck out swinging, then Luis Salas walked, and Gustavo Nunez popped out to the catcher in foul territory. ¬†So now we have men on 1st and 2nd, but with two outs. ¬†The tying run is on 2nd, but both teams have hit horribly with men in scoring position all night. ¬† Then the next batter, Brett Wyatt, hits a soft grounder to the pitcher. ¬†It looks like Andrew Bowman, the Dragon’s pitcher who came in at the top of the 6th, is going to escape with no damage.

Or not.  His throw to 1st winds up somewhere near Cincinnati.  Nowlin scores, Salas makes it to 3rd, and Wyatt is safe at 1st.  Now the game is tied, with men on 1st and 3rd, still with two outs.

Surprise, surprise, the next batter, Ben Guez, gets hit by a pitch, loading the bases.   This despite the fact that Guez was 0 for 2 at the time, with a strike out and a foul out to 3rd, and had already been hit by a pitch way back in the 1st inning.

The catcher trots out to have a word with Bowman.  Steve and I imagine the conversation going something like:

Catcher: Dude, stop thinking about your throwing error, or the fact that you just blew the win so that the best you can hope for now is a no-decision.  Just throw strikes.

Pitcher: Yeah, whatever.

Next up comes Brandon Douglas. ¬†Whack! ¬†Yet another hit by pitch, bringing home Salas. Now it’s 3 – 2 Whitecaps and the bases are still loaded. ¬†The night is now officially over for Andrew Bowman. ¬†He’s replaced by Aguido Gonzales.

Gonzales faces Bryan Pounds (remember him from the 2nd inning?). ¬†Pounds works the count full and is rewarded with a walk, bringing home another run. ¬†Ron Bourquin then singles, scoring yet another. ¬†Finally, Billy Nowlin (batting again this inning — yup, the Whitecaps batted around) pops out to 1st to end the inning. ¬†The score is now 6 – 2 Whitecaps and the game is effectively over.

By the way, the second-to-last batter was given a single by a generous home scorer when the 2nd baseman (Cody Pucket, who went 4 for 4 and probably won’t be playing here long) should have been given an error. ¬†If it had been ruled an error, then the Whitecaps would have scored 5 runs on one hit, two walks, two errors, and two hit-by-pitches. ¬†I don’t expect to ever see that again.

The fun wasn’t over yet. ¬†Advance to the bottom of the 8th, with the score still 6 to 2. ¬†After two fly-outs and two singles, it’s now men on 1st and 2nd with two outs, and up comes Byron Wiley for the home team. ¬†The count goes full, and to Byron Wiley, the next pitch looks very much like a ball. ¬†He actually tosses his bat three feet away and starts heading for 1st when the umpire yells strike!

Oops.  Umpires really hate it when you show them up like that.  Wiley retrieves his bat, and again Steve and I imagine the conversation going on at the moment.

Umpire: Make me look bad like that? ¬†You better swing at the next pitch, dude, because it’s a strike. ¬†I can tell you that right now. ¬†I don’t care if it’s over your head, in the dugout, or three rows into the stands, it’s a strike. ¬†So don’t forget to swing.

Wiley: <grumble>

Sure enough, the next pitch is high and outside.  Sure enough, Wiley swings and misses.  Sure enough, the umpire calls it a strike before the swing even starts.  Inning over.

Wiley throws both his helmet and his bat this time, and the umpire throws Wiley.  Out of the game, actually, which comes as a surprise to nobody.

You’d think that would be it, but no, the top of the 9th was great, too. ¬†There were six total at-bats in the top of the 9th. ¬†They went: home run, strike out, strike out, home run, home run, strike out.

Yes, that’s three homers and three Ks. ¬†The fielders might as well have stayed in the dugout. How cool is that? ūüôā

The bottom of the 9th featured yet another homer, meaning that there were four total home runs in the 9th.  The final score was 9 Р4 in favor of the Whitecaps.

Even then my evening wasn’t finished. ¬†I convinced Steve to come with me to the Dragons Team Store, so I could buy a massively overpriced T-shirt or a massively overpriced cap. While I was browsing the massively overpriced merchandise ($35 for a shirt, and even $33 for a cap, but at least I wasn’t even tempted by the massively overpriced $125 jersey), a worker in the store pointed us to the line for autographs. ¬†It turned out one of the Dragon players was coming down to sign for the fans.

Who was the player?  Yup, you guessed it, poor unfortunate pitcher Andrew Bowman, whose pitching line for the night read 1.2 innings, 1 hit, 5 runs, none earned (wow), two walks, two strike outs, a very bad throwing error and a 6.48 ERA.  He got both a blown save and took the loss.  Not his best day.

He was warm and friendly, though.  He was kind enough to put an unintelligible scribble in my program and I got a quick picture with him on my phone.

Me and poor Andrew Bowman, of the Dayton Dragons

I did feel I had to say something, though.

Me: How’s your arm?

Bowman (smiling): It’s sore.

Me: Ah.  Well, good luck.

Bowman: Thanks.

I think anything else would have been cruel. ¬†I paid for my massively overpriced shirt and left with a cool story to tell. ¬†Yup, never miss the chance to go to a ballgame. ūüôā

Groovy Teaching

O’Reilly screencasts coming

A few weeks ago, I got an email from a “digital content director” at O’Reilly. He said he was building up O’Reilly’s catalog of screencasts on technical subjects and wanted to know if I wanted to participate. The plan would be for me to come to California, where a camera crew would record me teaching students, in an informal setting, about new interesting technologies.

As they say in baseball, that’s right in my wheelhouse. While I do as much development and consulting as I can, my schedule fills with teaching engagements very quickly. I probably consider myself an instructor above everything else. Asking me to talk for a couple of days to make a 90 to 120 minute screencast is simple — getting me to stop talking would be much harder.

(That’s the thing about instructors: the job requires you to respond to every question with a conversation that lasts until the student is either satisfied or gives up. The job selects for that. After all, I’m not grading them; they’re grading me. Okay, that was a bit facetious, but only a bit.)

The upshot is that last week I traveled to California and recorded two screencasts. The first is tentatively entitled “How Groovy Helps,” and walks through a handful of Groovy-based applications to show how the language dramatically simplify application development. The other is called “Modern Enterprise Java Development” and discusses how creating web applications evolved from a servlets/JSPs/JavaBeans model to Spring Core + JPA + Ajax, with an overview of tools and technologies thrown in for good measure. They were all recorded as I talked to one student at the Westerbeke Ranch in Sonoma, CA.

I’ll have a lot more to say about them as we get closer to their availability, which ought to be in a month or so. In the meantime, here are a few observations:

1. You know you’re in wine country when there’s a bottle of wine waiting for you in the hotel (a decent chardonnay as it turned out).

2. I enjoyed adding Google Maps functionality to my Groovy Baseball application. Now when I choose a date, I get a marker at each home stadium with an info window showing the scores. Once I clean up the look and feel, I’ll add that to my own web site.

3. My student didn’t have much of a programming background, so I inevitably slowed down. The screencasts are therefore geared more towards beginners than experts.

4. We recorded almost everything outside. That was quite an adjustment for me, since I consider air conditioning and high-speed Internet access minimum requirements for any trip, including vacations. My son was quite amused to hear I got a mild sunburn on my bald spot.

5. I had to drive to Boston in order to take Virgin America, but have an actual, real live plug in the seat was worth it.

6. The production values on these things are going to be sick. I saw a preview and was very, very impressed. I only hope the content measures up. ūüôā

My only regret was not being able to meet up with Andres Almiray while I was out there, but he was south of San Francisco and I was about an hour north of there. Maybe next time.


Podcast on Pulse in education and training

A couple of weeks ago I participated in a BriefingsDirect podcast about using Pulse in academic and training environments. For those who aren’t aware, Pulse is a product created by Genuitec (the same people who make the MyEclipse IDE) that allows you to manage Eclipse profiles and plugins. I’ve used MyEclipse in my academic courses at Rensselaer at Hartford for several years, so they asked me to be on the podcast.

The other people on the podcast were Michael Cote, an analyst with RedMonk, and Todd Williams, VP of Technology for Genuitec.  The podcast was hosted by Dana Gardner, principal analyst at Interarbor Solutions.

The podcast itself and a verbatim transcript are now available, and can be found here.

This was my first time being interviewed on a podcast, and it was quite an experience.¬† I would say that it was an interesting experience, but one of the most obvious things that jumps out at me from reading the transcript is that I use the word “interesting” far too often. ūüôā

Teaching Web Services

NetBeans 6.1 is a lot better than I thought

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?

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

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

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

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. ūüôā