I drove up to Sandusky, OH yesterday, and attended the first of two days of the CodeMash conference today. Here are some of my impressions:

But first, a tangent...

On my way there, I was caught speeding in Kentucky (80 in 55 zone - bummer). Luckily, I got off with a warning, but the copy asked if he could use the drug sniffing dog in the back of his SUV to search my car for drugs (I think he noticed the curious pill box full of vitamins I had sticking out of a bag in the passenger seat). "Sure!", I said, just happy to not be getting a ticket. So, I got out of the car (in a white t-shirt and comfortable jeans, redneck style), while another cop car arrived (making the total 3, because 2 cars pulled me  over). So, I'm standing beside the interstate in my t-shirt with 3 cop vehicles behind me and a very spirited German sheperd sniffing his way around and inside the car, when suddenly the dog signals that my bag has something in it. Great. To shorten things a bit, basically I ended up successfully convincing the cops that somehow the dog must be confused with my vitamins, and eventually they let me go. Whew! So glad they didn't search in the gas tank, though ;)

Sorry - back to the conference.

The opening keynote, I think, summed up the current state of software engineering nicely: SE is, at its current state, at the same point that structural engineers building bridges were at when they didn't understand physics and math enough to be able to successfully specify bridges and ended up building one, rolling a cart across it, and, if it fell, then they knew they needed to improve things and try again. Fortunately, testing in SE is much cheaper that said bridge testing and, for the time being, testing is the engineering underpinning of software. Since software is the stuff of thought, and we don't have physical laws to rely on (as civil engineers do), test driven development seems to be the way to go (so they say). 

That being said, there seemed to be common theme of test driven development throughout the session talks. This has another side affect as well - TDD seems to deemphasize slightly the role of compiliers and strongly-typed languages (such as Java, C#, C++, etc), since the compiler error messages shouldn't be trusted as a measure of code quality as much as unit tests should. Therefore, there seems to be another trend throughout the sessions of meriting various dynamic languages (such as Ruby, Python, Groovy, and JavaScript). Interestingly, people are often choosing to run these languages on top of established runtimes (such as Java's JVM or .Net's CLR). So, basically, instead of writing Java code to run on the Java runtime, you can write Ruby code which compiles to Java bytecode and is executed on the established and stable JVM. Someone quoted Martin Fowler in a talk today as saying that Java's legacy won't be the Java language itself, but the runtime. One way of thinking about this is that the Java language could be used for more lower level programming on the JVM while you could leverage a more loosely-typed and possibly productive language to write your main application code. Talk about layers of abstraction!

There is also several sessions being presented about Rich Internet Applications (such as Microsoft Silverlight and Adobe Flex). I was able to see back to back talks today about Silverlight and Flex, and it made for an interesting comparison of the types of developers that are attentive to these two platforms. Enthusiasm for the promise of Silverlight seems to be very high, although it's still in the fairly early stages. Attendance at the Silverlight talk was high, while that of the Adobe Flex talk not so much (I'm note sure why - maybe it's just the demographics at this conference or region, or maybe it's that Microsoft has a stronger developer prescence than Adobe). Silverlight's strategy certainly seems to be solid, with good developer and design tools, but what can be accomplished with it is still mainly limited to video deliverly or basic rich clients. Adobe Flex, on the other hand, seems to be much more mature in control support and interface mastery (although code is still mainly written in ActionScript, compared with the .Net languages that Silverlight can leverage). I was very impressed with the sophisticated demoes that the Adobe evangelist demonstrated with Flex and also AIR. They really seem to grok UI design. Slick.

Another great presentation was given by one of my favorite podcasters, Scott Hanselman (now working at Microsoft), who gave a very entertaining presentation on IIS 7 called "Mashing it up with IIS 7". I think his talk partially reflects the more open stance Microsoft is trying to promote now, as he demonstrated how he could integrate PHP and ASP.NET by plugging the PHP Qdig photo gallery library alongside ASP.NET and using functionality from both platforms. Very interesting stuff, IMHO, but he seemed to have a hard time getting the audience into it - looks like it's hard to convince a general audience that Microsoft is not evil.

Lastly, I saw a sponsored session by several developers from Amazon. What was intersting about it was its lack of interstingness. The audience kept probing for some secret IT processes that they use interally that explains the company's wild success, but all we got were simple, mundance answers. I'm now convinced that they fuel their fire by hiring super genius developers and maintaining a humongous QA department.