If you have followed me this week on twitter, you saw me mention that I was working on quite a few new technologies this week. This has easily been a week of both pure joy and pain. Over the past 5 days I worked with:
- Flex (pretty familiar with it, just out of practice)
- AIR (kind of familiar with it, not much practice yet)
- Groovy (never used it)
- JBoss (never used it)
- Hibernate (never used it)
- Spring (never used it)
- testng (never used it) (and I assume this is the one item most of my readers won't recognize - it's a Java unit testing framework)
Flex
Ok, I already knew Flex, and loved it. What made it difficult this week was getting a grip on how my coworkers were using it. I've blogged before that I felt like I had a good grip on Flex in general, but needed to move into better architecture. Much like how I had to move into using a framework to grow as a developer. This was my first time using interfaces, delegates, and mock objects in Flex, and like most things, because I had an actual need for it (after Joe showed me why) it made a heck of a lot more sense than reading about them in an abstract sense.
Groovy
Groovy is what I'm most interested in right now. I find it interesting that they seem to have employed some of the same ideas that ColdFusion did. Typeless, practical, etc. I can see why it's getting so much press now, and I can see why some folks have expressed an interest in writing the model layer in Groovy while keeping the view in ColdFusion. I will say that I find the shortness of it a bit difficult at times, much like I found the abbreviated nature of jQuery a bit hard to grok at first as well. I know - it's crazy. It's almost like I want to type more and that should be wrong, but at least when learning though I find more descriptive code to be friendlier. But I've got about 1000 pages of Groovy docs to read (two books), so hopefully I'll know a bit more as time passes.
JBoss
Um, boy, I really, really appreciate how easy ColdFusion makes development. The whole Eclipse setup, restart on any change, forcing Groovy to recompile at times, etc, is very annoying. I don't know. It seems like "Java Application Servers" in general have always been a pain to use - but I tend to use them in spurts so maybe its just that I'm never gotten a chance to get some good experience. JBoss is easily the part of the stack I like the least.
Hibernate/Spring
So I knew that Transfer was based on Hibernate and ColdSpring was based on Spring and so far, both of these are really familiar to me. I had no problem working with Spring, and I've slowly begin to learn how Groovy/Hibernate play together. Not writing SQL in other languages is just as good as not writing SQL in ColdFusion. Imagine that.
testng
I finally got the unit testing bug earlier this year and it is not only a good development practice, it can be kind of fun as well. I get a little jolt of excitement as I watch to see if all my tests will pass. I also learned a valuable lesson this Friday when I did not run the tests my coworkers wrote. I spent hours trying to get JBoss to respond right to something I was doing, and if I had run the unit test, I would have seen the issue right away. I'm being dragged (kicking and screaming I suppose) into TDD.
Archived Comments
I didn't know you did Java Ray - have you done alot of it in the past?
How does it feel doing non-CF stuff then? I can imagine it must be quite a change of style to say the least. Is a lot of your work going to be focused on Java rather than CF?
I agree about your "shortness" comment (in reference to Groovy and jQuery). I had the exact same problem when I tried to learn jQuery. They say it's super simple, like CF, but it's not that easy to learn, imo. I think it's one of those things that once you get it, you say, "Ah, now I get it! This IS very cool and easy!". But some folks "get it" quicker than others, apparently.
@JA: I would not say I "do" Java. I've of course been exposed to it over the years. I did one entire web site in JSP (with a few classes) about 4 years ago. I did a tiny bit of Java coding for Macromedia back when I was on the CF engineering team. But I'm really just a 'trifler' when it comes to Java.
Re: JBoss - once Eclipse is setup correctly, JBoss is pretty much invisible. Eclipse compiles your code when it changes and it redeploys your code to the server and then restarts the server. All automatically. It's only a pain when it isn't configured right (although the Groovy Builder in Eclipse sometimes seems to "forget" to compile files until you tell Eclipse to "Clean..." the project).
I've always deployed CF on top of a Servlet container (Tomcat) or a JEE Server (mostly JRun but often JBoss) so, to me, CF always runs on a Java Application Server and that's just the way of the world. I guess it just shows how transparent Macromedia/Adobe have made the Standalone deployment of CF-on-JRun!
As for TDD... yeah, that really does take some getting used to but now that I don't even try running my AIR app until I've run all my unit tests, life is less frustrating. But right now we still don't have many unit tests - we will be writing a lot more :)
back when i was playing with the webwork framework for java (now struts2), I really came to appreciate using jetty as a development container. No server restarts (well, usually), no waiting for containers to stop and start on each save, etc. It was really nice. This was particularly useful when working on the front-end stuff (jsp, velocity) and tweaking the interface.
Take a truly "enterprisey" app like Jira, by Atlassian. Those guys are a world-class java shop. They crank out tons of (good) code. I highly doubt they're waiting for app servers to restart every time they save.
If there is an upshot to the forced restarts, though, it's that it makes the perceived pain of TDD much less so. It also has this nice side effect of encouraging decoupling, in that you're doing yourself a favor every time you write business logic that is easier to test and aren't reliant on in-container testing (ala cactus).
it's been several years since I was doing all that though. One pain point for me was always the annoyance of having to restart after changing the spring config file. I remember at that time there was a fair amount of community "outcry" for spring to solve that problem. Do you know if they've done so? Just curious is all.
thanks for the post ray. it's neat watching other people learn and teach.
@Ray
What I mean is, are you now going to be doing lots of Java work which is why your getting so involved in these Java technologies?
Just wondering how this will be tying into your Coldfusion work?
One place where pure Java can shine over CF is in the model layer, especially when creating lots of beans. So we may be looking at that as a way to ensure that layer of our platform is as speedy as possible.