Tonight I attended the local Enterprise Guild's ASP.NET MVC presentation by Brian Hitney . I don't know if I've ever given a review of a colleague's presentation (so this might suck) but I feel one's in order. Brian's doing his best in this area for Microsoft to spread this and other information and I want to take a moment to recognize, suggest some critique of, and applaud his efforts.
Brian's an excellent speaker and a major contributor to the .NET and Microsoft community in the southeast. He was patient, careful, and did his best to keep things on track without pandering to or disregarding the audience when they requested more information be given to specific areas of interest. He has a way with any collection of subject matter; he adds humor to the presentation, keeps the pace moving along, and overall seems to feel really cozy in front of a crowd. A truly good presenter knows the value in saying something akin to "I don't know, dude, that's an interesting point you bring up," and Brian's not afraid to do just this thing. I think that may be his biggest strength as a developer evangelist - he doesn't preach and he isn't a know-it-all.
I got the impression that most of the people in the audience tonight benefitted from the presentation, which covered some fundamental aspects of the MVC "idea," rather than focus on some of the lower-level points concerning the actual execution of a coding experience using the ASP.NET MVC framework. So when Brian made it clear that the presentation would be covering the "why's" and not the "how's," I have to admit my colleague and I had a mutual eye-roll. MVC isn't an easy concept to grasp, I know. It took me about 3 years to really understand how it's supposed to work. Even now I still struggle with some of the innerworkings of the approach. So that portion of my review is, I admit, somewhat selfish in nature. I would've like to have seen more low-level discussions of the technicalities.
During the initial chat, Brian brought up Inversion of Control and Dependency Injection . I think a better approach for Brian when dealing with these more complex and abstract concepts would've been to defer to the audience's willfullness to learn more on them; maybe say something about them being important ideas that are "outside the scope" of the presentation (because, well, they are outside the scope of a presentation like this ). Instead, Brian gave a few examples of IoC and/or DI. One in particular was to use the event model - a button-click event handler, to be precise - as an example of IoC. I don't claim to be a guru at IoC, but I am positive that I can't think of how IoC could be represented via such an example. I really can't, and I tried. My co-worker agreed with me on this matter, too, so I know I'm not nuts (or that I have a partner in my misunderstanding of something ). That's my one major "you didn't capitalize the 'N' and the 'E' and the 'T' when you put '.NET' on your resume'"-type complaint with Brian's presentation. My guess is that Brian understands all of these ideas quite well and could discuss them rather fluently under the appropriate context. In that, when he put them on the slide he had excellent intentions that completely escaped him when he was in front of a crowd of geeks. It happens.
There were a few technical items of note during the presentation. The first was when Brian created an ASP.NET MVC project in VS2K8. When the "do you want to create a test project" screen was presented and the MS Test the only option in the "what type of test project do you want to create" drop-down, Brian said "If you install NUnit you'll see it in here too." I have both VS2K8 installed and NUnit, and I don't see an NUnit option. So I conclude that there's some additional schnizzle that I need to download and install to tie NUnit to VS2K8, that I haven't yet read that particular blog post (note no link, feel free to hook me up in the comments), or that his statement was incorrect. Brian? Bueller? Anyone? What is it? How do I get NUnit to appear in that list?
Later occurred what I think was the only major and potentially heinous blunder of the presentation. A question was raised about the variance between ASP.NET MVC's behavior on IIS6 and IIS7. It was late in the presentation when an audience member asked about the differences between the two server versions. The meeting was in a new room, started late, and had a huge crowd, so I'm sure Brian was exhausted and ready to call it quits. So, when this question was asked, Brian's answer was simply to state that there was no difference in the way the routes had to be set up and that it'd all work just fine under either version. I'd been bitten by this variance myself (and I have a complete lack of being able to keep my trap shut) so I raised my hand and commented that this wasn't the case. For the record, I said this not to call Brian out and make him look like a dimwit but rather to make sure the correct information was given to the audience. I mean, that's why we're all there, and it is called a community group so I figure that's the best thing one could do in the situation. I specifically mentioned the approach taken in the Kigg framework, and how it seemed to accomplish this for both versions pretty elegantly. The crowd seemed generally cool with this and we moved on, Brian relatively unscathed. No harm, no foul, but I urge (read: plead with ) Brian and the rest of the evangelists - don't forget that many of us in the community hinge on most of the things you say. If you tell me it works, I think it works, and when it doesn't work I think it's something I did. When I find out it's something you guys did and that I've wasted many hours trying to make something work that just isn't supposed to work, I want to forget I ever loved coding I get so irritated - nothing plagues a coder like time lost on poor documentation, so just keep doing your best to keep the facts straight. The whole with great power comes great responsibility speech is implied here.
My favorite moment during the presentation was when Brian talked about the collection of form data in the "new MVC way." He specifically mentioned getting back down to basics and dealing more directly with the Request object. I'm a huge fan of this, and of removing a lot of the gunk between me and my HTTP protocol, so I was all about this commentary. Additionally helpful was his code example demonstrating form-collection using the BindingHelperExtensions class. This has been one of the things I've not yet learned how to do with MVC - dealing with forms. I've been more focused on link-based approaches using MVC and on JSON transmission, so the traditional forms approach had been something that'd eluded me. Brian's example of this was great.
Overall, a good presentation. I would like to see a round two of this presentation (or to provide it, as sometimes the requirement of teaching something enables/forces you to learn it pretty well) or to be provided something comperable to Brian's presentation on a more technical, "how-to" level. I look forward to his evolution as a DE, his upcoming travelling show with some of the other guys in his squad, and to learning more about ASP.NET MVC.