If you’ve read my blog for any length of time, you’ve probably seen me reference (here and here) The Art in Computer Programming by Andy Hunt and Dave Thomas. I first encountered this piece last year when Dave gave a fantastic keynote at NFJS so when I saw this post on Andy’s blog last week I had to point to it. DeveloperDotStar has taken their work and added links to the art mentioned throughout – it’s almost as good as seeing Andy or Dave present live…almost!
Last Thursday, my wife and I hopped into the car and made the journey back my alma mater, St. John’s University where I gave a talk about Ajax. Mike Heroux was kind enough to invite me up and I really enjoyed chatting with my old (you know what I mean!) adviser Jim Schnepf (sorry I couldn’t summon a wittier dedication), John Miller, and Andy Holey. My four years at SJU were a real highlight for me and every time I go back behind the Pine Curtain is special. The talk was great, we had a good crowd that asked some great questions so thanks to everyone that attended! And clearly I forgot just how good Gary’s Pizza is…
Anywho, here are the slides from my talk and for those of you that weren’t there, a paper that might help fill in the gaps a bit and a copy of the links. As usual, these documents are licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License.
I’m not sure about you, but on more than one occasion, I’ve been asked to write a confirmation dialog. As a UI guy, I usually push back since most people get into the habit of clicking through them so the one time the mean to hit “No” it’s too late, muscle memory has already sent their work to oblivion. Anyway, the other day Joe Athman sent me a link to Joe Vasquez‘s article AJAX Delete Confirmation pointing out that the author mentions Taconite! Thanks Joe for writing about our little framework (and thanks to Joe for forwarding the link on to me).
Whew…I’m starting to get caught up (well, not with the Foundations of Ajax account!) By Sunday, I was plenty tuckered out – but I powered through. I had a good chat at breakfast with a few guys, talked about productivity and off-shoring and all that fun stuff and after one of the sessions, I had a great chat with Software Ninja Peter Pascale. Like I said earlier, one of my favorite parts of these get togethers is the time between sessions when you get a chance to talk with your peers and compare notes. We might not be in the heart of Silicon Valley, but there is a lot of exciting stuff going on in the Twin Cities!
OK, so on Sunday, I branched out a bit. I started my day with Andrew Glover‘s Practical Groovy. Now, I’m all for dynamic languages and I’m convinced that the future of Java is as a platform: in the near future, we will have our choice of scripting languages (like JRuby, Jython, Groovy) on the JVM (or CLR if you prefer). This will allow us to start our applications in a more nimble language and then, when we need to, take advantage of the enterprise stack. This means we can avoid most of the complexity that comes along with a language for interplanetary navigation until we need it allowing us to be far more productive. But don’t just take my word for it – Tim Bray thinks this will happen too. And like Obie Fernandez, I hope I’ll be able to deploy Rails on the JVM.…and it better be before 2008!
Anyway, while some think that Groovy is the answer, it’s hard to tell. A few weeks back I read a pretty good write up (alas, I can’t find it…sigh) about how stagnant Groovy was and that it was suffering from neglect. That said, Richard Monson-Haefel thinks it’s a sleeping giant. With that backdrop, I was quite interested in seeing Groovy in action and I have to say, it looks pretty slick. I’m a bit concerned about the whole binary compatibility issue as well as its JSR status, but a familiar syntax isn’t such a bad thing. Of course this has caused some symbol refactoring as the language matures… While I’m not convinced that Groovy is the answer, it certainly does have it’s place. Andrew had some great examples where he’s used Groovy in a production environment and I even suggested it for an issue at work (which prompted a comment along the lines of “crazy workaround” but whatever).
Anyway, after a host of pure tech, I needed to focus on the soft side so I went to David Hussman‘s Losing Battles and Winning Wars: Adopting Agile. If you *ever* have a chance to see David live, take it, he is a dynamic speaker and very engaging. And unlike many speakers, he will actually admit mistakes he’s made in the past! I’m doing everything I can to make my current employer more agile so I look to David for inspiration. This was a fun talk – we discussed a lot of issues that various attendees had at their companies. Unlike some, David doesn’t advocate a whole sale conversion to agile; it’s much more important to figure out what is important to the culture. For some projects, unit testing just isn’t practical, however, there are other practices that can be put into place.
My afternoon was all about testing and code quality with Andrew’s Unit Testing Best Practices and Taking Quality to the Next Level through Code Coverage Analytics. While Andrew is a great speaker (very clean slides though I would have appreciated a bio) I have to admit his Best Practices talk was a bit of a disappointment. Truthfully, it was more of a survey of alternative testing tools like DbUnit, JUnitPerf, and JUnit-addons. Still, he did eventually get to some best practices! Some tests will take longer to run than others and the frequency of running this tests should be based on that fact. I would have liked a bit more of that type of content though…
The Code Coverage session was pretty cool. I’ve always wanted to play around with EMMA and/or Cobertura but I’ve never gotten around to it. The key point: don’t trust a report that says you have 100% coverage! While the tools can give you an idea of where you lack tests, if you rely on a “passing grade” from a coverage tool, you will be disappointed. A good session, but you could tell the audience was pretty tired…and did I mention how hard the seats were?
All in all, a great conference! While not an “event” like JavaOne, NFJS, is a excellent learning experience and if you actually want to talk with the presenters, you should give them a look. It should tell you something that I returned for a second go and this year lots of my circle went too. I can’t wait for next year’s event (though I’d love to be on the other side of the podium)!
As much as I wanted to get this posted, you know, Saturday, I just didn’t have time. After the birds of a feather, I spent a good bit of time chatting with Justin Gehtland about Ajax, Ruby, and Mac tricks so my whole evening was delayed. Of course after spending 10 hours drinking down the tech love, I just couldn’t convince myself to open the laptop. Speaking of which, I’m a bit behind on my email and whatnot so if you don’t hear from me for a couple of days, my apologies! Though the BoF started as a Spring/AOP discussion, it devolved into a Rails/Ruby and why Mac‘s are better talk. I asked what would be more likely in two years – that we’d all be using AOP or we’d be programming in Ruby; needless to say, this got quite rise out of Justin! BTW, for those of you that think there’s no money to be made with Ruby…well, just ask Justin what he’s been up to these days (and they are some impressive apps!)
On the people front, I ran into a few more folks I knew including Mike Calvo (I swear, he asked a great question in every session he was in) and I also had a chance to chat with David Hussman – what a great guy! You know, this year I really found myself wishing for more time between sessions to talk with people. Anyway, on to the show…
I began my day with Venkat‘s refactoring talk and as I expected, it was great! I really can’t say enough good things about Venkat’s presentation style – it really is a pleasure. I especially liked his reference to On Writing Well and its principles of simplicity, clarity, brevity, and most importantly, humanity. I couldn’t help but think that we spend way too much of our time worrying about the computer when in truth we need to write for our fellow developers. I like to follow the homicidal maniac theory – in other words, I pretend that the person maintaining my code is a serial killer and he knows where I live so on the off chance he’s digging through my code at 2 am, I’d like him to think happy thoughts about me. Anyway, as I expected a great talk with live coding (damn, IntelliJ is sweet).
In the afternoon is was back to the phenomenal David Geary for Ajaxian Faces and Hands on Rails. In both sessions, David did a fair amount of live coding and it was impressive. Sure, I know he had a lot of the code hiding in IntelliJ’s smart templates and what not but still…pretty darn impressive. Of course how he handled things not working was quite something – very cool under pressure. I enjoyed watching someone else covering Ajax and I’m becoming more and more impressed with JSF but I’m not quite ready to eat the 7-layer burrito… Of course the Rails session was amazing but I was surprised by two things – how few people actually went (I really expected a packed room) and the fact that there was only one session the entire weekend on Ruby and Rails combined… No matter how many times I see it, Rails still impresses me. When you watch someone code an entire application, live, in just a few minutes, well, it gets your attention.
Couple of other comments on David Geary’s talks. First, he takes advantage of a great Mac feature – the Universal Access panel – to magnify portions of his screen so folks in the back could read the code. Rather than tweak his font settings, he just zoomed in! Very slick – I am going to have to use this next time I present code. Another interesting point, David has a fascinating hobby – French. Yes, he has his language set not to English, but to French… Way cool!
Well, I think that about covers Day 2…
I’m fairly confident that many of my readers are also on my qotd (quote of the day) list (and if you’re not, but would like to be, just drop me a note or post a comment) so you know how much I dig quotes. Needless to say, NFJS has provided a number of interesting quips – here are some highlights. These are mostly accurate though I wouldn’t swear on a Bible that they are verbatim.
The first one’s free… Justin Gehtland in the Spring/AOP “birds of a feather” session.
“Spring is the free vial of crack [for Aspect Oriented Programming]…next thing you know, you’re mainlining the stuff.”
Compiler? I don’t need no stinking compiler… Mr. Gehtland again (though he may have been quoting someone else).
“In two years, we’ll all look at compilers like slow, broken unit tests.”
That’s all for tonight…must rest up for the last day!
Today marks Day 1 of the Twin Cities edition of the NFJS North American tour! What a difference a year makes; clearly, the word is getting out on NF in my circles. Last year, I didn’t know a soul at the event but this year, it seemed like I ran into someone I knew everywhere I turned. Of course it helped that I brought 2 coworkers but while standing inline to register just in front of me I discovered none other Andy Madigan! I couldn’t believe it, but it’s been two years already since he moved on to West. We didn’t have a ton of time to chat but hopefully we’ll catch up at lunch tomorrow or Sunday. Of course I knew my friends Joe Athman and John Shields would be there but I wasn’t expecting to see my favorite Java programmer Christine Simon! She went to some of the JSF tutorials I went to so we had a good chunk of time to chat. Still, I *really* wanted to spend a couple of hours catching up with my old mates!
Just when I thought I couldn’t possibly run into anyone else I knew, there before me was Jeanette Takaoka-Miles! Jeanette is probably 80% of the reason I earned two of my certs…alas I didn’t have much time to talk – hopefully tomorrow! In the break after the first session, I ran into Jeff Jensen of TC JUG fame. Speaking of which, Ryan and I will be back at TC JUG in July. Before dinner, I had a chance to say hi to Venkat Subramaniam coauthor of the fantastic Practices of an Agile Developer – I didn’t get to any of his talks today but he’s first on my list for tomorow! I know there were a couple of other friendly faces but they escape me after a 17 hour day!
Some general thoughts about today. First, while I’m really pumped about the sessions I’ve been to/am planning on, I have to admit when I saw the names that wouldn’t be here, I was really disappointed. No Dave Thomas, Bruce Tate, Ted Neward, Glenn Vanderburg, or Howard Lewis Ship. I was also a bit surprised that the agenda shows only one talk on Rails and not a Ruby talk to be found… Still, we’ve got a good crop with David Geary, Justin Gehtland, the afore mentioned Venkat Subramaniam, and local boy David Hussman among others. As I mentioned earlier, the word is out – and we’ve got a packed house! The venue is good though I was surprised that I didn’t see any laptops in action – maybe there just aren’t that many bloggers in the big Minnie. Speaking of which, every presenter I saw today was using a Mac and IntelliJ IDEA…
So what did I actually see on day 1? Well, I was all about JSF meaning I can recite David Geary’s bio slide (and an impressive one it is I might add). I attended JavaServer Faces: A Whirlwind Tour, JSF: State of the Art, and Shale: Turbo-charge your JSF Apps. I don’t know a ton about JSF but I’ve been intrigued ever since I first hear about it…back in 2001. Though announced at JavaOne in 2001, it wasn’t released until 2004 however it hasn’t taken off until quite recently. David has seen a steady stream of consulting and training of JSF for the past 6-9 months so maybe we’re finally getting some momentum behind this approach.
David’s second talk focussed on Apache Tomahawk (JSF components), Facelets (Tapestry like views for JSF), and Seam (JSF marries EJB 3.0). Though a good introduction to these technologies, I had to wonder what pain these eased for developers. It seemed like the JSF components are a real free for all (especially now that Oracle’s ADF is part of the mix). And while I’m still holding out a glimmer of hope for EJB 3, I had to laugh when David flashed Gavin King‘s quote from a Java Posse interview where he said Seam was inspired by Rails! I’m sorry, but putting Rails and EJB into the same sentence just made me laugh…
David’s last talk focused in on Shale. Now, this talk got my attention. First, Apache’s Commons Validator is *very* slick indeed. I’d worked with it indirectly at my last job and I really liked it but it sure seems to have grown! The ability to specify client and server side checking was way cool. Though the support for annotations didn’t do a ton for me, I was pretty excited to see how Ajax played with JSF (hard to believe, I know); using Shale made Ajax very simple…almost like cheating. Support for Tapestry like views was interesting but the ability to create wizards and control navigation via web flows really caught my eye.
After dinner, Neal Ford of ThoughtWorks gave the keynote on Language Oriented Programming which is really just a fancy way of saying Domain Specific Languages. Though not nearly as engaging or inspirational as Dave Thomas’ The Art in Computer Programming talk, none the less it was thought provoking. Neal showed JetBrains MPS in action and I have to say, the ability to define a language for complex rules that my customers could easily use is quite tempting. Still, I haven’t quite drunk the Kool-Aid on this one yet… That said, when you see how hard it is to write a DSL in Java, it starts to make you wonder how much longer Java has. Speaking of which one of my coworkers asked one of the speakers about Java vs. Ruby – he said *all* of his work is now in Ruby/Rails. So, for those of you that think there’s no money there, well, you’re wrong. But then you don’t need me to tell you that.
Whew – I can’t promise I’ll get around to providing greater detail than this (I took surprisingly few notes, either that or the pages I’m using this year are narrow ruled) but it’s getting late and I have a full day tomorrow!
If you’re actually interested in *hearing* Ryan and I, we now have audio! Our talk at UW La Crosse was recorded (rumor has it there is video too) and Larry Sleznikow was kind enough to convert the talk to an MP3. The audio is quite good (though we don’t quite sound like that in person…at least I don’t think we do) and the running time is just over an hour. Enjoy!
Let there be an end to incredibly boring speakers! They are not sophisticated, erudite scientists speaking above our intellectual capability; they are arrogant, thoughtless individuals who insult our very presence by the lack of concern for our desire to benefit from a meeting which we choose to attend.
In other words, they spend too much time trying to convince the audience how smart they were and not enough on how to help their users kick ass! I certainly can’t speak for Kathy, but I think she would support Jay in the shaming of poor presenters. I also like this line:
[the speaker] must convey enlightened enthusiasm for his subject and the advances he has attained.
Now, I’ve never read anything about bad foils (though I did have a CIO that used transparencies for all of his presentations…) but he takes a shot at those folks that think their audience can’t read – in other words, call an audible. For a comparison, you may want to read Kathy’s take on deadly presentations.
A scientist who cannot retain in his head the essence of his latest work can hardly be said to be enraptured by his subject.
My only complaint…the PDF is password protected meaning the good old copy and paste doesn’t work. Sigh. Way to go Presentation Zen for linking to this article – it should be required reading for technical presenters!
In the last week or so, I read two interesting articles about what it takes to become an expert. There is a perception that, to be really good at something, you have to start when you are two; I think most of us have seen those cute pictures of Tiger Woods as a kid and naturally assume that the reason he’s where he is today is the head start combined with his all-world athleticism. While there’s no doubting his athletic talent and the early start, Outstanding Performers: Created, Not Born? points to a different conclusion.
David Shanks says that practice plays a much larger role. He points to one study that says the best musicians simply practiced more:
Each of the musicians was asked to estimate approximately how many hours a week they had practiced each year since the outset of their musical training, and these estimates yielded cumulative totals of about 10,000 hours for the best musicians, followed by 8,000 for the next best ones and 5,000 for the least accomplished.
People forget that Tiger has spent literally thousands of hours hitting golf balls on the range, practicing his silky putting stroke, and chipping and pitching around the practice green. Talent obviously helps (some athletes are renowned for what they don’t do during the off-season…) but while we can’t all be born with Ken Griffey, Jr.‘s hand eye coordination, each one of us can carve out the time (well, maybe that’s not so easy).
The only thing standing between you-as-amateur and you-as-expert is dedication. All that talk about prodigies? We could all be prodigies (or nearly so) if we just put in the time and focused. At least that’s what the brain guys are saying. Best of all–it’s almost never too late.
So, if you want to be good at something – dedicate the time to do so. Somewhere (can’t recall exactly where) I read that, if you study something for one hour a day for three years, you would be an expert. I can hear you now, where am I supposed to get an hour? Well, for a bit or perspective, 7 hours a week amounts to just over four percent of your week. Considering the average adult male watches close to 30 hours of TV in that same period, I’m guessing we could all cut back a bit. Of course if you’ve read Everything Bad is Good for You, maybe you’ll disagree!
But Kathy highlights another important point in her piece – it’s never too late to start. We’re living longer than ever so saying “I’m already 30/40/50/60 etc” doesn’t cut it (well, unless you want to be, say an Olympic gymnast). To quote Kathy again (her emphasis):
…actress Geena Davis nearly qualified for the US Olympic archery team in a sport she took up at the age of 40, less than three years before the Olympic tryouts.
What’s your excuse again?
The moral of the story – we can become experts if we are willing to put in the time but more importantly, we don’t need to begin as babies. My advice? Start now. In three years you’ll be three years older – you can either be three years older and and on your way to becoming an expert or you can be, well, three years older. Which would you rather be?