This past Saturday was another local software conference. (I'll admit, I'm hooked on them.) This time I headed back over to the Microsoft office in Waltham for New England Code Camp 16. (Side note: I overheard someone saying that Microsoft will be pulling out of the Waltham location and running everything in the area from their NERD Center in Cambridge and another campus they have nearby.)
All in all a good event, as always. This time my employer was a sponsor and we had more of a presence there, which is cool. I hope we can step it up and have a proper table with swag and recruiting and all that next time. One of our team members was also giving a presentation so it was good for us to show support. I didn't end up going to his, though, because there was other interesting stuff for me to attend and learn something.
So, as per my usual style here, let's take a look at the sessions I attended...
9:10 - "Easy Async With .NET 4.5" with John Bowen
Not bad. The guy definitely needs to work on his public speaking. (And his public shutting up... He'd go off on tangents and just get lost for a while.) He clearly knew the material, but had a bit of trouble explaining it. Cool stuff though, and I'm seriously looking forward to using async and await on a regular basis. If I could give this guy one suggestion it would be to have more concrete examples. After all, this is Code Camp. A slide deck doesn't cut it here :)
10:30 - "ASP.NET MVC 3 Introduction, Part 1" with Brock Allen from DevelopMentor
Very engaging speaker, I liked this guy a lot. The material in this part of the presentation was mostly review for me, but there were certainly little nooks and crannies of the material that were new to me. And it's always good to re-sync with others on material one already knows just to see how well my understanding of it jives with the rest of the industry.
My favorite part was that I very much agree with how this guy develops. At one point someone asked him about some of the widgets from WebForms and what their counterparts were here and he tried to explain that there aren't any. Things like the login control and registration wizard and stuff like that. He said things like, "It's really not hard to just write a couple of views and controller actions, so why not do that? Sure, you could look for some widget that does all the work for you, but you lose the more fine-grained control over what you're doing. And one of the biggest benefit of MVC views is that you have that much more control over the resulting markup." It's always nice to see an industry partner who thinks like I do, because all too often I'm immersed in the Kool-Aid that I refuse to drink.
One interesting thing happened during this presentation. Someone started asking about ViewState, and the presenter explained that it's not there anymore. This apparently shocked and dismayed people. (That fact, in tern, somewhat dismayed me.) He explained that you can still use "ViewState" in the sense that you can still serialize a dictionary, base-64 encode it, and store it in a hidden field. The fact that many people in the audience didn't understand what he meant was also a little disconcerting.
But then a frightening question was asked... "Without ViewState, where should I store sensitive information like Social Security Numbers?" My hand shot up in the air to respond. The presenter handled the question well, explaining that sensitive information should be avoided and statefulness should be avoided and all that good stuff. But I still had a point that needed to be driven into the asker. When I was called upon, I tried to explain to the asker that ViewState is completely open and readable by the user and should never be used to store any sensitive information. Ever. But I don't think he understood. Sometimes I'm ashamed of my industry, I really am.
11:50 - "ASP.NET MVC 3 Introduction, Part 2" (same presenter)
This is where things got a lot more involved with the stuff specific to version 3. There was a lot to take from this. (Both talks were very fast-paced and involved lots of jumping around in Visual Studio. The guy said that these are usually longer talks that he had to condense.) It was mostly about the various tooling that's available to help with things, including Data Annotations :)
You know me, I have sort of a love-hate relationship with frameworks and tooling. But this guy kept it together really well even for me. Use the tooling where it's appropriate, don't rely on it where it's dangerous. In fact, he even made it a point to use Data Annotations on his input models and not his domain models. He had the domain models in a separate project and in his MVC project just had view models and input models. (I bet he's a fan of FubuMVC.)
Honestly, what I liked most about this presenter was his approach to coding. Clean code all the way. He never left anything messy or unfinished. No placeholders, no TODO statements, none of that. He kept it clean and concise and to the point. If something worked but needed to be cleaned up a little, he took a moment to clean it up. Much respect, Brock. Much respect.
1:00 - Lunch (pizza), provided by Telerik
1:30 - "Objective-C for C# and Other .NET Developers" with Chris Pels
I'm definitely interested in the material, and clearly so is the speaker. But the presentation itself was kind of a bust. His screen saver kept triggering, he kept having to fiddle with the MacOS environment to get things to work, etc. Basically, he didn't seem to know his way around the presentation tools. That kind of thing will kill a presentation, man. If you have to stop presenting for a few minutes in order to fix something, you lose the audience.
I think the focus of the talk was lost. He went into some Objective-C and general iOS development in XCode, but he didn't really tailor it to the audience. We were expecting something from the perspective of people who live and breathe within Visual Studio. This wasn't it. He'd occasionally try to tie things back to C# jargon, but it was kind of forced and ineffective.
And he didn't handle questions well. As you'd expect, some people were asking about how to leverage the .NET code they already have and how much of it would need to be re-written for iOS devices. He couldn't really say much more than "look into Mono." Something more apt may have been along the lines of...
"Well, that depends a lot on how the existing .NET code is architected. In an ideal situation, and if you can make use of MonoTouch, then you should only have to re-write the UI portions. The views still need to be created in XCode just like any other native iOS development, but all of the code that drives them (models and controllers, mainly) can be in .NET through MonoTouch. Just as .NET is a framework layer sitting on top of the Win32 API (and now the WinRT API as well), MonoTouch is a .NET framework layer sitting on top of the iOS API. Just like there are some differences between Win32 and WinRT, expect that there are also differences between Win32 and iOS. Some things are available in one but not the other. So you may have to adjust some of your code to be truly cross-platform, maybe abstract out some of the platform-specific stuff into services that you can swap between them. But as long as the code is separated out away from the views, then you should be able to leverage much of what you have."
Was that so hard? I just made that up on the spot. I know, public speaking is hard. But you've got to stay focused and give clear and engaging responses or you're going to lose the audience. I doubt anybody in that room walked away excited about doing iOS development as a .NET developer. Much of the murmuring seemed to indicate that they just won't bother and will wait until Microsoft saves the day with its own tablet.
2:50 - "Introduction to Windows Identity Foundation" with Brock Allen (same presenter as the MVC stuff earlier)
Definitely comprehensive, and as you know I like this speaker. The material was a little tough to follow, though. I haven't done a lot of authentication stuff myself, so he was moving across subject matter that was a little foreign to me in some cases. But he kept it within reach and I'm definitely continuing to learn about it.
What I'd really like to see is a more complete end-to-end implementation, like he had with the MVC 3 talks he gave earlier. This one involved more slides and less code. He did tie it together very well at the end, which was great. As before, very fast-paced and a lot to cover. I'm sure that someone equally as familiar with the material as I was with MVC enjoyed this talk as much as I did the earlier one.
The juiciest nugget was when he told us to go to http://www.leastprivilege.com/ to learn more, and claimed that there's a free eBook on Windows Identity Foundation there somewhere which he highly recommends. I haven't found it yet, but I'll look again later.
4:10 - I took a break during this session. My eyes hurt from projectors and monitors. I'm getting old.
5:30 - ".NET and MongoDB: A Code First Introduction to NoSQL" with John Zablocki
By this time of the evening it was very dark outside and the snow was really coming down, so a lot of people had left already and those of us still there were finding ourselves in a much more relaxed atmosphere. So I think that contributed to the fact that this talk didn't stay on topic very effectively.
It was a great introduction to MongoDB, and covered some stuff I didn't already know about the database, which was great. But we spent way too much time mucking around in the Mongo shell and hardly even looked at any .NET code. Seriously, what's "code first" about mucking around in the database and then writing a little code to use it?
The guy's got NoSQL skills, no doubt about that. But this audience isn't looking for a young ninja to show them something cool. These are mostly Microsoft Kool-Aid drinking developers in their 30s and 40s who want to know how this can help them with the work they already do. It's an older crowd and teaching them new tricks requires a little understanding of how they currently do things. (And I'm no exception to that, though I like to think I'm further away from them on the overall scale.)
Basically, the guy got really side-tracked by his intro into MongoDB and barely even touched the agenda he set forth for the presentation. There was almost no .NET code.
Looking back at what I've written, I sound very critical of the presenters. I guess that's just how I approach these things. But don't get the wrong message. This event and other events like it are fantastic. I learned a lot, I networked with colleagues, I advanced my career ever so slightly.
In fact, I'm inspired to put together some presentations of my own. I'd been toying with the idea, but couldn't think of something that would be worth everyone else's time. The problem, as it turns out, was that I was trying to think of talks that I could give for my colleagues. But that's just it... I took this job because my new colleagues are really good at this stuff. I'm here to learn from them. And I love it.
Sitting in the room during the MVC 3 talks cleared my head a little bit. Not everyone is surrounded by the developers who surround me. There are a lot of developers out there who just do the same stuff day in and day out. They don't take for granted all of the things I do. I can give a talk that introduces other developers to the concepts I take for granted in my development, and there's an audience for that.
I'm thinking I'd like to start with a simple introduction into dependency injection. It's only an hour of time, I can certainly fill that. I've come up with a basic agenda and have thrown together some code samples that I can walk through (or build on the fly, to engage the audience a little more). I just need to remember to keep focus on the material. Don't get lost on a tangent, don't focus on everything else being perfectly designed, etc. Just put together a simple application and demonstrate the concepts of dependency injection. That's all.
Another idea could be to take a look at MongoDB again and how it can be used in a .NET application. Focus less on the internals of the database engine, there's plenty of material out there for that. Just use it in a simple application to demonstrate how it would be used.
Any other ideas? Man, I can't wait until the next Code Camp.