I spent this past week at the 10th annual CodeMash conference in Sandusky OH. Every single event has been enjoyable, envigorating, and a great way to kick-start the year.
The event has changed dramatically over the past decade, but it still has the same core values from when it was started. It’s a group of people passionate about technology in many incarnations, and willing to share and learn from each other. Looking back at 10 years of CodeMash, several larger trends appear.
Early on, the languages discussed most were Java, C#, VB.NET, and Python. Over time, more and more interest in Ruby grew. Java waned for a time. Functional languages like F#, Haskell, and Erlang became more popular. There were a few Scala sessions.
Interesting, for me, is that C# and .NET have always had a presence, and continue to be relevant and modern. Some of the most popular talks this year were on C# 7 and the upcoming ASP.NET 5 release. I’ve given a talk at every CodeMash. I’ve spoken on C# 3, LINQ, dynamic support in C# 4, async and await in C# 5, TypeScript, and C# 6 features. I’ve had a great time, and I hoe that the attendees have learned and enjoyed by talks.
I remember some of the amazing people that have been speakers at CodeMash: From Scott Guthrie, to Bruce Eckel, to Mads Torgersen, to Scott Hanselman, to Jon Skeet to Jesse LIberty to Lino Tadros to Katlhleen Dollard. I’m also sure I’m missing several prominent people that have spoken over the years. Carl Franklin and Richard Campbell have recorded several .NET Rocks! shows while in Sanduskey.
The attendance has grown from around 200 to roughly 2000. That still amazes me. It’s lost som of the feel of those early events. In the first few years, it always felt lie you knoew everyone. But, the current event does have the same culture, the same caring community, and the core group of friends are still there year after year.
Over the years, I’ve driven through ice, snow, and in some years Sptring like weather for CodeMash. My family has enjoyed the waterpark on the weekend after the event.
I want to congratulate the crazy dreamers that started CodeMash, and made it happen. It’s amazing to see what you’ve built, and how much fun the first 10 years have been.
I was honored again by speaking at CodeMash on the TypeScript language. I’m not going to post my slides, because most of the talk was demo.
The demos are here on my GitHub page. I tried something new with this talk, and I hope it helps you follow along after a talk.
If you look at this page, you’ll see 41 merged branches. Each branch represents a step in the demo. The commit messages explain what I did in each step, and what you can observe a you switch to each new branch.
My labeling convention is to use <demoName>-<major step> for a branch on each task based demo. Inside each of those branches, you’ll find a branch named <demoName>-<major step>-<minor step>. There will only be one commit on those branches. These <minor-step> branches show the small steps that make up each demo.
For example, the second demo I did was “Migrations-02”. To follow along, check out branch “Migrations-02-starter”, and each step is “Migrations-02-01”, “Migrations-02-02”, and so on up to “Migrations-02-final”. The “Migrations-02” branch shows all the checkins in order.
I would not follow this checkin policy on a product repository, but it does seem to make it easy to follow along and learn. I would like your opinions on that. If you find this easy to follow, please comment here. If you can think of improvements, please let me know.
I’m thrilled to be enjoying a new experience at CodeMash 2013: I’ll be hosting a precompiler workshop on C# 5.0 async programming techniques.
I’ve spoken at every previous CodeMash, but this is the first time I’m running a half day workshop. I like the challenge of preparing a half day of async content, and taking participants on a larger journey. That’s what this is about: My goal, if you give me four hours, is to teach you to see async, await, Task<T> and related types the same way you see for, if, and foreach: tools you use every day. There’s quite a bit to cover, and I’m looking forward to every minute of it. I hope you’ll join me.
You can see all the sessions here: http://www.codemash.org/sessions They are a menus of awesome that’s better than a bacon bar.
If you want to experiment with the code (or the slides) while watching, all the samples are here on BitBucket.
Of course, the current VS11 / C# 5 software is a moving target. When we spoke in January, we were working with a pre-beta CTP of VS 11. The sample code reflects that drop of the upcoming release. Jon has written a recent blog post in his EduSync series that describes the changes (some public, some private implementation) between the VS11 preview build and the VS11 Beta build released in March.
Happy async coding!
First, let me preface this by saying I’m truly amazed at the quality and quantity of of submissions. I’m not on the speaker selection committee, so I don’t see all the abstracts. Several colleagues whom I greatly respect have shared their talk ideas. There were simply more great talks than they were slots. I can’t imagine a harder task than being part of the CodeMash speaker selection committee It’s especially hard because there are so many different technologies represented.
That said, I’m super thrilled to have made the list for 2012. I’ve actually got two talks, and I’m excited to deliver both of them.
The first is C# Stunt Coding: I dare you to try this at home. In this talk, I get to stretch the C# language in ways you don’t expect. I’ll show techniques to do things you don’t think C# can do. Every technique will come with the warning that it’s one of those techniques that you should only apply in rare situations. Knowing most C# developers and CodeMash attendees, that will only make you want to use them more.
The second is Async from the Outside. This talk will discuss how the async and await keywords will change the way you code in C#. I’ll discuss the async features, and go over coding practices you should adopt to make sure that you’re making the most use of these new tools. You may have heard that async APIs are much more prominent in the WinRT library. That’s true, and that’s why many of the demos here will be designed for the Windows 8 Metro platform. People interested in the inner workings of the async details should attend Async from the Inside given by Jon Skeet.
The code is the starter code, with the test projects’ asserts commented out. Go ahead and guess the results for yourself, and see if you’re right.
Then, try to change the code using the recommendations in the slides, and test your knowledge.
I ended the first day in Jennifer Marsman’s Parallel Programming made Easier talk. This was one of my favorite presentations at CodeMash. Jennifer is a very engaging speaker, and her love of technology is infectious. She went through quite a bit of the Task Parallel library, and different ways you can control the execution of parallel tasks in your programs. She also went into quite a bit of depth on how task scheduling works now. The .NET Framework team has done quite a bit of work to take advantage of locality of reference and CPU caching when you work with multiple tasks. The enhancements are in the .NET 4.0 framework. I took several pages of notes to help make my parallel programs better.
Day 2 was about stretching outside of my .NET comfort zone, I attended Dick Wall’s “Scala 2.8: What’s in it for me” talk. Dick demonstrated several enhancements to the scala language. He started with the improvements to tail recursion optimization. Scala now finds more opportunities to rearrange code so that it can replace tail calls with loops.
The other interesting feature to me was the way scala now handles generics when value types are used for type parameters. Unlike Java, scala writes specific classes for the generic class when using a value type. That avoids the boxing and unboxing penalty that java generics have long suffered.
Overall, I like scala. If I were working on a JVM –based project, I’d be much happier using scala than java. There are quite a few more features, and it’s a much better language. Its only drawback, in my opinion, is that without being able to add new features in the JVM, there may be features that Scala can’t add. (For instance, scala generics still suffer from type erasure, just like java generics).
I went to this session because, like most developers, I’m not that good at UX design. I need to get better. Joe had a lot of tips to run a project and get the best user experience possible.
One of the most important tips Joe mentioned was to avoid design by committee. While collaboration and cooperation are important, one person needs to own the experience. It will make your experience more consistent. It will also help you avoid the mediocrity that comes from repeated compromise.
I started the afternoon session with the Mobile Smackdown. Jeff Blankenburg, Chris Judd, and Dan Steinberg wrote a simple mobile application for Windows Phone 7, Android, and iPhone, respectively.
To me, this was important because none of these platforms will be completely dominant. If you are serious about mobile applications, you must have skills in all these platforms.
Most interesting, I asked Chris and Dan if they had tried building with MonoDroid and MonoTouch. Both had a strong preference for writing to the metal. I’m still hoping I can leverage some shared code, but I can see their point: writing natively will create the best experience.
The important takeaway from this session is that the developer story for all three platforms is strong, and you’d be wise to support all of them.
As a Platinum Sponsor of CodeMash, we have one of the vendor sessions. We chose not to make it about us, but to invite attendees to speak at our session. We asked attendees to suggest lightning talks, and then asked visitors to our booth to select their favorites. In addition to Dennis Burton’s SQL Azure talk, we learned about NuGet, and Git Powershell scripts. Thanks to Dennis, Rob and Keith for presenting.
I finished CodeMash back in the .NET world with Jim Wooley and the Rx extensions. That was still opening my mind, because I really don’t know much about Rx. It looks interesting, but I’ve not used it in production. Jim does a great job of explaining the inverse relationship between IEnumerable and IObservable.
I learned enough about Rx to decide I need to download it, and to look for when I should use it.
And with that, another CodeMash recedes into history. I like the fact that CodeMash is early in the year. It give me inspiration to build the list of learning topics for the year.
I’m grateful for the CodeMash board, the committees, the speakers, sponsors and the attendees. It’s great to have CodeMash in our backyard to give our software community a strong start to each new year.
Before any of the breakout sessions, Chad Fowler gave a fantastic keynote.
To me, the mark of a great keynote is that many attendees can take away different messages. I’m sure other blogs and discussions about Chad’s keynote will highlight different moments. Here is what I’m taking away: Software as a Craft may help to define our industry better. Chad defined a continuum with form or art at one end. The other end had function or commodity. Craft is at the center of that continuum. I think that’s a great analogy. We are not creating art, like a painting or a musical composition. Some people argue against developers never finishing, instead continuing to polish their code forever. Of course, the other side where minimal effort produces software that “works” but has no other redeeming factors has just as many problems. Our job as professionals is to find the middle of that continuum.
That journey is more difficult than it sounds. The middle of that continuum is where that very subjective adjective of “quality” lives. Chad’s point is that quality is very difficult to define. It’s subjective, and it’s one of those things that we can’t define, but “we know it when we see it.” Our job as professionals is to do what we can to make this subjective metric of quality the outcome of something that is objective.
The last section of Chad’s talk discussed outsourcing, business models, and mentoring. My thought on this is that our industry does not do a good job of mentoring the next generation. I was struck by how much of the current push toward offshoring could be mitigated by having our more experienced technical leaders mentor those new individuals joining our profession. (Notice that I didn’t use ‘senior’ or ‘junior’ in that description. It’s possible that a younger person has more experience in this industry than an older person. Mentoring should be based on experience, not age.)
OK, no clear answers from this post here. But, that is a great keynote: it asks a lot of questions, and makes me think. Actual answers will come later.
For the start of the day, I went to Kevin Pilch-Bisson’s C# and VB.NET futures talk. This was similar to the PDC talk on the same subject, but it gave me a review after spending a little time with the CTP and reading about it.
I am always impressed with how the language team continues to enhance C# with features that make me so much more productive, without removing those lower level abstractions that we all sometimes need. The more I understand it, the more impressed I am with the async and await features being added.
Of course, they are not perfect, and as I keep digging deeper, I’ll find those areas that do cause pain and confusion. As I learn more, I’ll be blogging more about what I learn, and what I hope helps others.
My talk was right after lunch, so I caught some of the WebMatrix launch, but not all of it. My impressions come from the perspective of coming in and out of the launch, so I’m not going to review the launch content in full.
I’m incredibly proud of everyone that has been involved in CodeMash over the years. To go from a small conference in Jan of 2007, keep growing through the recession. It’s a great thing for CodeMash that Microsoft recognized that and chose this venue for the WebMatrix Launch. For those that don’t know, CodeMash is a cross-platform, community driven conference. That gave Microsoft the chance to reach out to some members of the non-microsoft developer audience for WebMatrix.
After lunch, I gave my talk. I’ll post the slides and demos on Monday. (I wanted to wait until after my talk because posting the puzzles and answers beforehand kind of defeats the purpose.)
Thanks to all that came. The feedback and the Q & A gave me lots of ideas on ways to make it better.
The evening keynote brought us information about the Ford Sync platform. There are quite a few different design considerations for creating an interactive computing platform for the car. UX is totally different. You can’t have people paying more attention to the compute platform than driving. Feature set changes: some features that might be super cool become super dangerous while driving.
The feature I liked the best was the ‘caravan’ set. This links several Sync vehicles through the cloud to communicate with each other using small messages. You can notify everyone about food breaks, gas station breaks, upcoming speed traps (yes, they said that), and so on. It’s a great step forward.
This event shows one of the reasons CodeMash is so different from other conferences. The attendee party is for whole families. It’s at a water park. We had more than 1000 people in the water park at midnight. Kids, developers, spouses. I met one attendee’s parent at our cabana. That’s why I love CodeMash.
I originally planned on spending the morning in Barry Hawkin’s user story workshop. They weather and airlines changed my plans, as Barry did not get to CodeMash early enough to conduct this session. Therefore, I spent the morning in Steve Smith’s Software Craftsmanship session. Steve did a really good job of putting together a tough set of topics. The purpose of the workshop was to give developers motivation to be better developers. As a side effect of becoming motivated to become more of a software craftsman, you’ll also learn techniques that can help to drive change in your current work situation.
The best part of Steve and Brendan Enrick’s delivery is that it was based on using these techniques to produce better results. It was refreshingly devoid of the dogma that often accompanies the Software Craftsmanship community. Steve and Brandon make it much more approachable, and much less argumentative.
We are SRT Solutions do several things to make sure that we stay on the front edge of software construction techniques. I went to Steve’s session to learn other techniques that might help us improve.
He went through many of the techniques that are quite familiar to anyone that has been paying attention to the software craft community: practice, test driven development, pairing, quick iterations. What I really liked was how Steve and Brendan gave many different techniques that can help motivate people not already engaged in these techniques. I plan to try some of these with customers that are interested in adopting these practices.
One of the ones I really liked was quickly rotating pairs. For one of the demos, Brendan wrote the first test. Then, one of the attendees made that first test pass, while pairing with Brendan. Then, that attendee wrote the second test with a new pair from the audience. The person who wrote the test left the workstation for a new person after his test passed. The new person listened and reviewed while a new test was written. It was great to see complete strangers starting to work together.
Several of the labs had us working in pairs with new and different people. It was amazing how quickly this structured format brought the whole room together, and made pairing and other practices more approachable.
We are also interested in improving our software practices as well. There are a couple differences in what we do compared to Steve’s workshop. We pair when people want to pair, and people can work individually when it suits them. I wouldn’t recommend this practice until people are comfortable working in pairs. I would be afraid that people accustomed to working alone would simply continue to work alone.
The other difference is that when we pair, we pair across from each other. We all have laptops, so we hook up extra keyboards, mice, and monitors. I really like it because it’s a great way to have eye contact with your partner. It also requires some discipline to avoid fighting over the keyboard and the mouse.
I don’t know how I would fix this, but there is one challenge in how Steve and Brendan present the opening sessions. The first lab is to solve a problem on your own, without tests. The second lab is to solve the same problem using tests. The third lab is to solve the same lab again pairing and using tests.
You get faster each iteration, but it’s hard to know if that’s because of the technique, or because you are solving the same problem again. I wish I had a better way to get this, but I don’t have one. If I come up with some ideas, I’ll pass them on.
Even so, you can feel that you’re more productive by working in a different technique, even if some of it is due to the fact that you’re solving the same problem.
One goal I had from this workshop was to learn techniques I could use to help convince customers to adopt some of these practices. I did get some techniques that can help get people to try it, but I got less about hoe to convince business leaders that craftsmanship is important. I’d like to see more of that in the workshop.
To be fair, because of a couple appointments I had already scheduled, I missed much of the afternoon portion of the workshop. I’ll post an update here if that material was covered in the afternoon.
In the afternoon, I had a few meetings, one of which was with Jesse Liberty to make a recording for his YAPCast. We had fun chatting for quite some time, and when it goes live, you’ll hear the best portions of a long, rambling, and occasionally interesting conversation.
My more important take away was from Dick Wall. He made the comment that Moore’s law applies to more than processor speed, using the example of the human genome project. In that project, they were less than 10% done after 7 years of a 15 year process. By continuing to double their velocity, they did finish on time. I hesitate to give that information to the average project manager, but it’s an interesting alternative way of expressing Bill Buxton’s “Long nose of Innovation”. It’s food for thought if you still believe that the software industry is a young industry, and still hasn’t hit the high-slope part of its growth.
All of these projects are Open Source (using the Creative Commons license for content, and the MIT license for code). If you would like to contribute, visit our GitHub Repository. Or, if you have questions, comments, or ideas for improvement, please create an issue for us.