Apart from onsite training, I've been doing very little training of late. My excuse is that I've just been too busy. I decided today, though, in response to several emails, to announce a training class entitled "Mastering ColdFusion Object Oriented Programming".
I've done many "OO Programming with CFCs" classes and I like them very much. But after folks master the fundamentals of OO, there's still a lot to be learned before we begin deriving substantial benefits from OO programming.
I'm asked a lot of questions about the best way to do OO (everything from aggregation to polymorphism to translating objects to and from relational databases). There's an awful lot on the web that is (in my NOT so humble opinion) pure nonsense.
I've spoken about part of this before with my friend, Jeff Peters. After the initial "I finally figured out how to write and instantiate a CFC" phase, many programmers get trapped in what I call "POO" -- pseduo OO programming. This is a wretched place to be: one has all the extra work of building OO apps -- and almost none of the benefits. Sadly, there are many voices that encourage POO.
I was bemoaning this in a recent IM exchange with another friend (I'll call him "Xavier"). I had been helping him with some problems he ran into. Xavier (or X for short) and I have known each other for years and consider him a real friend. I'm copying the IM exchange with minimal editing:
Me: It's just a matter of time before these POO programmers lose their faith in OO and go back to procedural coding. Really, POO *is* procedural coding -- it's just wrapped up in OO form.
X: Yeah, well, what's a POOr boy to do?
X: No, really, I understand what you're writing, but I know that once this crisis is past, I'm going to have another one. Why? Cause my lack of knowledge gets me into corners I can't get out of. At which point I write you and you get to bill me some more. I need to somehow turn a corner with OO programming -- I need that time you spent at Xerox Park.
Me: I know what you're saying, X. I could not have been more fortunate than I was, being exposed when I first started out to real OO programming. It's like you get a taste for the real thing -- and you have an instinctive aversion to POO.
X: So they taught you real OO?
Me: Absolutely. Now, my head swam at first. I didn't just "pick it up" like a natural; I really struggled to understand it. I think that's helped me be a better teacher, remembering how hard it was for me.
X: So, what about holding a class not on basic OO, but on real-world OO? A master course where you'd only have a few students and they would all know the basics of CFCs already and you could really show them the ropes, the stuff they'll encounter in the real world.
Me: Hmmm...tell me more.
X: OK, stuff like the strategy design pattern that you used to fix this latest mess. How to do aggregation. Also programmers are learning things from Java and that's not necessarily how to do things in CF, right? Then there are all the tricks you use, the code snippet stuff, the Object class that you gave me (and which I'm using only a tiny portion of, btw). You keep telling me I'm using inheritance wrong, but how SHOULD I use it? And if that's not enough, there's the whole object/database stuff that is so frustrating. And don't tell me it's frustrating because I'm not doing it right. I *know* I'm not doing it right. So why don't you have a class that teaches how to do OO right?
Me: Hmmm again. I think I got a little burned out over the "framework wars" and got tired of fighting the reams of bad advice I was reading. People were turning OO into POO. Sean Corfield referred to it as the 5:1 Syndrome, where every database table ends up with a bean and a dao and a gateway and a service class and a controller.
X: Been there done that.
Me: A lot of the ills of POO programmers comes from starting with the database. Like you were doing.
X: No, like I *am* doing. I know I'm not supposed to, but what exactly AM I supposed to do? That's a little hard to write in an email or even an article, no?
Me: Yeah, it takes hands on experience. You know how I'll ask you "how would you model this?" questions when we go out to eat?
X: I've learned a lot from that. And I like to learn a lot more. But you stopped giving classes, didn't write much -- what was up?
Me: Like I say, I got kind of burned out. I just didn't want to fight.
X: I love you like a brother but that was wrong.
Me: Yep. Well, I'm writing more now.
X: I see that. You ever gonna get a new site up?
Me: In the works.
X: Great. Then it's time for that Mastering OO class. Seriously, Hal, a lot of programmers want to do better but they don't know what you do. They're trying the best they know how. Hell, *I'm* trying the best I know how. And I've been reading the books you suggested and yes that helps but I need some intensive time where someone (you!) translate all the stuff I've been reading into "Look, this is how you should do it" time.
So, properly chastened by a real friend, I'm announcing that I'm going to hold a week-long class in just what X asked for: Designing and Building Real-World ColdFusion Object Oriented Applications. If you'd like to attend, you do need to know all the basics of CFCs. I'm not being an elitist: I love teaching OO fundamentals with CFCs. But we'll have so much deeper stuff to tackle that there won't be time for the basics.
Students should bring their own laptops because, in addition to the classroom time, you'll be working on class projects at night. (I'm not a big fan of the "macho coding/I can write code for 24 hours straight" school of training; we just have a lot of material to cover.)
Up to six students can enroll. I've done small classes and large classes and -- no surprise -- small works better. And with something this intense, six is enough.
The class will be held here in beautiful Sarasota, FL, Oct 20-24. The cost is $3800. I know that's expensive and I intend to make sure you get your money's worth.
If you want to sign up or if you have questions, you can email me at hal[at]halhelms.com or call me at 941.716.6909.