Bill Blogs in C# -- local interest

Bill Blogs in C# -- local interest

Created: 1/3/2012 1:34:07 PM

For most people, the holiday season is over, but here, where Michigan and Ohio meet, there is one more major event:  CodeMash.

I have not yet figured out my entire schedule, but there’s a few things I plan to concentrate on.  I need to learn more about WinRT. I’ve had too little time to build samples and learn about it yet. I want to learn more about Scala, an exciting functional style language that runs on the JVM. Beyond those specific goals, I want to learn about techniques I can apply across any platform. I don’t believe I’ve learned as much as I can about modern software engineering techniques: testing, continuous improvement, advances in languages, frameworks, and libraries. I want to spend as much time as possible in sessions that are not platform specific, or language specific.

I am giving two different talks this year.  Early Friday afternoon, I have “C# Stunt Coding: I Dare You to Try This at Home” This is a really fun talk to give. I get to start by saying that all the techniques I’m explaining are for edge cases, and specific problems, so chances are you will rarely want to use them in your everyday coding activities. Of course, that means everyone will pay careful attention, and immediately try everything I show the very next day. There’s no avoiding it. Developers just think that way. That makes it more fun.

Spoiler Alert

Ok, not really.

The other talk I have is “Async From the Outside”, where I discuss how the new async programming model in C# 5 introduces new ways to to make async programming easier.  You may have noticed that the abstract for Async From the Outside references the talk “Async From the Inside”, given by Jon Skeet, author of the very popular and respected “C# In Depth”. If you look at the abstract for Async from the Inside, you’ll see it references Async From the Outside.

There’s a few more items you should notice about these two talks:

  • They are in the same room
  • The second (inside) immediately follows the first (outside)

You may be thinking that it would be better to mash these two talks together, giving attendees two hours of async inside and out.

Well, Jon and I thought the same thing. We’re working together on a single stream of content, with both of us working together for the duration of the two talks. We’ll discuss how to use a feature, how it’s implemented, and how to use it in your regular development activities.

Well CodeMash fans, this will be the first time Jon and I have met in person. We’ve emailed, chatted, skyped, google talked, and been on .NET Rocks together, but we’ve never yet met in person. I’m looking forward to it. Jon and I are working quite diligently to make sure we deliver quality content. 

Jon also has his own individual talk to give: C#’s Greatest Mistakes. I’m really looking forward to that one as well.  Jon has shared some of the content with me. He’s one of a very small set of people that can give a talk like this, and make it a great talk for people to learn, not a screed. It’s one of Jon’s best qualities: the skill to be critical, yet positive.

Jon has written a similar post on CodeMash.

Created: 12/19/2011 8:01:07 PM

Dianne Marsh and I have been doing some planning for our expected growth. We will be doing more announcements during the course of the next year.

Right now, we’ve got an immediate opening for a business development associate. (I know that most of my readers are developers, so please pass this on, if you know someone interested in joining us in this capacity).

Of course, we are always interested in talking to exceptional developers about our ongoing growth plans as well.

You can read more here.

I promise: the next posts will have the technical content most of my readers prefer.

Created: 6/23/2011 6:02:45 PM

I’d had this feeling for a while that developers are in high demand in Michigan.  Earlier this week, I had confirmation on that during a meeting with some folks at the Michigan Economic Development Corporation (MEDC).

The MEDC, by working with growing firms, has learned that software development skills are in great demand in Michigan. They recently opened a state wide jobs portal, based on a version run by Ann Arbor SPARK over the last few years. After being open for a few weeks, over half of the jobs posted are software development, or IT jobs. There are 16 different (somewhat overlapping) categories, and still more than half of the jobs are IT and software jobs.

There are several reasons why software companies are migrating to Michigan. All of them are about the talent pool. Smart companies know that the manufacturing sector makes extensive use of technology, especially software. The auto companies have an especially strong background in leveraging software in all areas of their business. That gives the region more software developers than anywhere else outside of silicon valley. Several years ago, we began using the term “Lakeshoring” to describe bringing software development work to the Great Lake state. Companies are responding.  Systems in Motion opened an office in Ann Arbor and has hired by the hundreds. GalaxE Solutions has opened an office in downtown Detroit and is hiring at a pace that has ourperformed their own projections. Google has opened an office in Ann Arbor. Compuware has been a long time fixture in the Detroit area. QuickenLoans, while classified as a financial company, employs a large software development team.

But it’s not just large companies.  Ann Arbor alone has more than 100 software startups or second stage companies (like SRT Solutions). Grand Rapids also has a thriving software community.

The Software Community needs to answer this challenge

The software community needs to continue to ensure that we have the people that can step into these new jobs as they are created. We also need to demonstrate to those companies looking at Michigan that there is a wealth of talent ready to help them succeed. Luckily, we’re already doing much of work. We just need to keep doing the work, publicize it more, and attract more new members.

The obvious first task is to talk up the user groups. Many SRT developers, including me, have spoken to developer groups in Detroit, Southfield, Ann Arbor, Flint, Lansing, Kalamazoo, Grand Rapids, and Traverse City. We’ve talked to students at Michigan, Michigan State, and Michigan Tech.  If you’re here, find a group that interests you and start participating. You’ll learn the skills you need for your next career challenge. If you’re already attending a group, tell your friends. I recommend every developer should find a group to attend. That’s especially true if your considering a job change. Every meeting I’ve attended includes job announcements. You’ll learn more about software development, meet friends, and learn about new opportunities.

We need to promote our regional conferences more. We’ve got GiveCamps, Day of .NET events, CodeCamps, CloudDevDays, The Kalamazoo X Conference, and more that I’ve probably missed. We need to continue inviting new developers to these events, and make it easier for people that want to update their skills to attend.  We need to publicize these events to state leaders that are in the business of attracting companies to the area. I’ve been here a long time, and I know how strong and vibrant our development community is. We need to get that information in the hands of the economic development teams attracting companies to our area.

Finally, we need to do more to encourage the next generation of software developers to consider a career in Michigan. Get involved with one of the universities. Ask to be a guest lecturer to students in Computer Science or Software Engineering. Tell them about the opportunities, and the vibrant software community here. Get them to investigate opportunities here in addition on both coasts.

The software industry has already been an important driver in Michigan’s economic renaissance. It can continue to enjoy that role if the software developer community helps to do more to promote itself and our location. What other ideas can you come up with? If you have ideas, follow up with me on twitter. Let’s show the world how strong our software development ecosystem is.

Created: 5/31/2011 6:20:58 PM

Earlier this Spring, SRT Solutions was awarded one of the Michigan 50 Companies to Watch award. This award goes to 2nd stage companies that have been experiencing significant growth. We invited the entire SRT team to join us.  Not everyone could make, but those that did helped make the night more memorable.

We learned a lot that night.


Dianne Marsh is pretty bad at Jazz Hands. She prefers the more traditional, business like pose:



But, that doesn’t work for Chris. He felt a Stanley Cup style pic was needed:


In all seriousness, these people are the reason we could earn such an award. We have super smart people working here, and we also really like working together. The collaborative nature has been, and will continue to be critical to our success. Everyone wants to work together.

One simple way to see that is in our large training room (where we host several user groups). If you walk into the office on a regular business day, this room isn’t setup for a user group.  It’s the company lunchroom:


Depending on the day, some folks bring lunch, and some get food from one of the many excellent lunch restaurants in downtown Ann Arbor. But, almost always, people bring the food back to the office to join their coworkers and friends.

Like many of the traditions and activities around our office, this one just sort of happened.  I don’t even remember how it started. I just remember folks starting to eat together. Whenever someone new joins, they get invited to join in. Early on though, we used one of the other spaces (because there were fewer people).

We might have had a few folks at the conference table in the office Dianne and I shared:


Or maybe the original conference room:


I think this started because for many years before opening our space, Dianne and I worked out of our homes. Opening an office became as much about the social aspects of a workplace as it did about the work. It still is.

We build software collaboratively. Our company works on many different projects all the time. It’s not uncommon to have one project team get stuck and get help from someone on a totally different project. Something clicks about a problem, and a new perspective helps.  That can’t happen without the social aspects of our workplace being strong.

We believe in this part of our culture so much that many of our interviews are scheduled to include lunch with the team. Prospective hires will get the chance to interact with everyone, see if they want to belong, and see how easy it is to fit in here.

That culture, and the camaraderie that we share is a key reason awards like the Michigan 50 to Watch are important to us. We get to share it with the best, most talented, and coolest software development team around. And there’s still room for a few more lunch tables in the big room. We’re not done. And now, Michigan is supposed to watch us.

Created: 5/12/2011 3:47:01 PM

I’m thrilled to announce another event in the SRT Software Development Series.

Paul Sheriff, a fellow Regional Director, and author of an immense amount of developer content, is coming to Ann Arbor for a one day class on Silverlight. “From Zero to Silverlight” teaches developers the fundamentals of Silverlight, and gets them started on the road to being highly productive Silverlight developers.

This class will be held on June 7th, at SPARK Central, just a block from SRT Solutions.

If you’re interested in becoming a better Silverlight developer, or you’re interested in being a Silverlight developer, you need to attend this class. Learn more, and sign up here.

Created: 3/30/2011 12:18:49 PM

Standard business advice is “network, network, network”. I disagree, and in this article I’ll tell you why you should concentrate on building communities instead. Let’s begin with the definitions (both from Webster’s). 

network (n) as, “a usually informally interconnected group or association of persons (as friends or professional colleagues).”

community (n) as “a unified body of individuals as: a body of persons of common and especially professional interests scattered through a larger society.”

Community is stronger. Networks are informally interconnected. Communities are unified, of common and especially professional interests. Communities take longer to build, but are much more valuable. There are three communities that I’m especially proud to be a part of.

The Heartland Developer Community

Yes, our regional community of software developers has a name. We are the heartland. This is an amazing group of people that builds the software that builds new companies in our region. We create CodeMash, we run GiveCamps, we host, run, speak at, and attendmanyoftheusergroupsinourarea. We spend time together learning more about software development, and teaching others what we have learned. I’ve spoken everywhere in our region from Traverse City to Dayton, OH. I also have asked for topics and received offers from speakers to come to Ann Arbor and help our developers learn new topics. The answers come from all over the region.

Many of the developers in our region are self-employed or independent consultants. Being a member of this community means I’m never more than a couple emails away from the right person to help us on a project, or help our local developers learn something new.

Passion for software development, and our region are the bonds that hold this community together.

The C# MVP Community

I’m also a C# MVP. The C# MVPs are a community within the larger MVP community. The MVP community is a world-wide group of people with very deep knowledge of the C# programming language. These are other authors, speakers, and developers that help others learn more about the C# language. As a community, we help each other by reviewing book manuscripts, draft talks, articles, and new product ideas. As a world wide community, we grow friendships around the globe. The team Canada hockey jersey I sometimes wear is a gift from a C# MVP from Ottawa. Some days in Ottawa, he’s wearing a Michigan football jersey I gave him in return. The technicalreviewers for my books, members of the C# MVP community, span three continents. All had comments and feedback that made the books better. I’ve made similar comments on friends manuscripts from around the globe.

We meet together in person at conferences, like the recent MVP Summit. Between these major events, we chat through social networks or email.

A common desire to create great software using C#, combined with the knowledge to do so bonds this community together.

The Microsoft Regional Director Community

The Regional Directors are a smaller, and more close knit community. They are a group of 115 of the most influential software developers in and around the Microsoft Developer Community. These are business owners, C – Levelexecutives, investors, entrepreneurs, and softwarearchitects that span 6 continents. We regularly communicate via an email list that generates between 20 and 50 emails per day. We get together regularly at conferences around the globe. The wealth of knowledge, insight, and friendship among us is truly amazing. I’ve asked questions about topics ranging from finance, to angel investing, to business plans to software market trends. I’ve answered my share about growing a business, being an author, what the business climate is really like in our region, and some of the markets we’ve been involved with.

A common desire to make our individual regions better places to live, work, and succeed binds this community. It’s the most energetic, successful, and fun group of people I have ever associated with. It’s got world-wide reach, and an incredible wealth of knowledge.

What makes a community?

I discuss those three communities above with some pride. That’s not to brag, but to point out how much stronger a community is than a network. If you’re involved in strong communities, you surely have similar experiences in your own community. If you don’t feel these strong bonds, you haven’t formed a strong community.

A community is bound together by a common purpose or mission. The best communities will outlive any or all of its members. It grows into something that can sustain itself beyond its original charter. I know that if I ask anyone in my communities a question, I’ll get help, knowledge, and guidance. I also know it’s my responsibility to do the same for others in those communities.  That’s much more powerful than any network.

Other area business people have questioned SRT Solutions put so much emphasis on community. The communities we belong to help us make positive contributions to our region. There’s no better way to find the people that will help us succeed in our mission to build great software for our growing companies. People that network are very common. People that can build great communities are incredibly valuable. That’s who we want on our team.

Created: 2/3/2011 4:07:03 PM

We’ve repeatedly said that the best developers learn different technologies and different platforms. I think this is especially true in the RIA space, where your customers may be using a different device, and different platform than you typically use. I believe that if you are building RIA applications, it will be important for you to have some knowledge of both Silverlight and Adobe Flex. 

To that end, SRT Solutions is hosting Adobe Evangelist James Ward for a 3 day Flex Jam. Learn more, and Signup here:

If you’re primary focus is Flex, James will help you learn more about that platform in short order. If your primary platform is Silverlight, you’ll learn some of the idioms employed by the other major RIA platform. That knowledge will make you a better Silverlight developer: you’ll learn some techniques that you can use in Silverlight, even though they are more natural in Flex.

Created: 1/11/2010 7:13:39 PM

A new year means it’s time for CodeMash.  Tomorrow I begin the annual geek pilgrimage into the water park for tech knowledge.  I’m amazed at how much the conference has grown, and the strength of the session list. It was difficult to decide where to spend time, but here’s my current plan:

We’ve got great keynoters this year, and I’ll be attending all of those. I am attending the precompiler again this year. Here’s the current plan:

  • Wed AM:  The Ruby Koans (Joe O’Brien and Jim Weirich
  • Wed PM:  Open. I’m not sure what


  • 9:45:  Silverlight from Zero (Jesse Liberty)
  • 11:00: User Stories: Closing the Agile Loop (Barry Hawkins)
  • 1:45:  Ruby and Rails for the .NET Developer (Matt Yoho)
  • 3:35: Funky Java, Objective Scala (Dick Wall)
  • 4:45: Engineering vs. Design – How to Work Together (Joe Nuxoll)
  • Friday:

    • 9:30: Going Dynamic in C# (Bill Wagner). Of course, I have to be there.  But, I hate pimping my own talk, so if I weren’t speaking at this slot, I’d pick:
    • 9:30 (alternate) Being an Evil Genius with F# and .NET (Chris Smith)
    • 10:45: Restful Interfaces to 3rd Party Websites with Iron Python (Kevin Dahlhausen) (I’m picking this because I’ve seen Jim Holmes’ Leadership talk, and I need to learn Python better)
    • 1:45: Iron Python with ASP.NET (Chris Sutton)
    • 3:35: What’s new in Silverlight (Jesse Liberty)


    Some of this will likely change, but I think you can see the goals:  I want to learn more about dynamic languages in general. I also want to take the opportunity to learn as much Silverlight as I can. Jesse Liberty is a great teacher, and I can’t pass on this opportunity.

    Of course, like every CodeMash, I’ll probably make a number of changes to this one as well.

    Created: 6/25/2009 3:56:56 PM

    Once again, we brought together a small group to discuss two more upcoming topics for the software industry. This time it was Natural User Interfaces and Social Media.

    The most interesting observation is that there is a bigger gap between the future-oriented Natural User Interfaces and the closer-to-the-mainstream Social Media topic. That colors this post: In this group we had much more discussion on Social Media than we did on Natural User Interfaces. That's a function of the group, and the relative adoption of both topics.

    Natural User Interfaces

    Natural User Interfaces are a rather nascent topic in our industry. However, I do think that over the next decade, it will become more and more important. The mouse and keyboard metaphor is more than 30 years old. Gaming has clearly gone way beyond mouse and keyboard.  (How long would you play rock band or guitar hero using a mouse and keyboard? Flight Simulators, racing games, and more use custom controllers that are supposedly more natural than the mouse and keyboard metaphor we’re forced to use in our regular line of business applications.

    We’re starting to see some more forward looking computing devices.  iPhone, iPods, Zune, Surface and Windows 7 multi-touch are all examples of a more natural user interface. In all cases, we’re using more natural motions to directly work with the device.

    The conversation lagged somewhat. We didn’t have many of the devices at our disposal that day. Also, it was a bit harder to create a dynamic discussion because it was harder to get conversations about how to these new devices might map to what we do.

    Social Media

    Social Media was completely different. This was very lively, and it’s clear how we can all make use of social media for our business and personal endeavors.

    The clearest point here is that the twitter model has won. It’s more interesting than Facebook, LinkedIn, or any other social media platform today.

    The reason is that it provides the best way to reach an authentic audience from an authentic perspective.

    Andy Seidl (@faseidl) has described twitter as ‘a world wide cocktail party’. That’s a very apt description. You can wade in at any time, you can choose to behave like a professional, or be that person in the corner with the lampshade on his head. You can leave conversations that aren’t interesting. But most importantly, you can engage in real conversations with those people with whom you interact.

    That’s the most interesting part: Social Media must be personal in order to be useful. You can only create an audience by engaging in real conversations. Once you engage in real conversations, you can get real results.

    Social Media also allows you to get around the major barriers to efficiency today.  Our corporate structure exists to allow specialization, which builds walls and silos around different areas, business units, and disciplines. With a twitter presence, I’ve found it easier to reach elected officials, vendors, customers, and collaborators. I haven’t used anything else that has made it easier to reach as many people in as many ways.

    Bud Gibson (@Innovators) has made significant investments in many areas of social media. He’s also claiming that twitter is a better investment than any other social media. In fact, he’s finding that twitter is better than ‘pay for click’ advertising to reach new prospective customers.  It gets back to Andy’s cocktail party analogy: It’s all about the conversation.

    The bulk of this was about Twitter, although we did discuss other media as well. However, most of the other social media create more walls around different communities. They are ways to interact with people you already know. Facebook and LinkedIN are platforms to talk with people you know. Twitter starts a conversation, and as part of the platform, allows anyone to join and participate.

    Was there a call to action?

    There was less of a call to action here. NUI seems a bit farther in the future. The call to action was to ‘keep an eye on it’. It likely will be important, but not immediately for broad reach applications.

    For social media, the call to action was to develop a strategy about how to participate. Your customers are participating. Your competitors likely are too. That means you need to participate, and you need to differentiate yourself with your content.

    Oh, and you can follow my updates on twitter as well: @billwagner

    Created: 6/19/2009 9:43:22 PM

    Last Tuesday, we hosted our first executive briefing on upcoming technology trends.  The first two topics were Cloud Computing and Rich Internet Applications (RIA). We chose those topics because examples of RIA applications are already around, and cloud computing is on the horizon. It was a great mix of present and future discussion.

    Nerd Note: My regular readers that are looking for core technology content won’t find it here. Our discussions were on the business issues around these technologies. No code samples here, but there were fantastic architecture and design discussions.

    Cloud Computing

    I’ll start by saying that I’m personally excited about Cloud Computing. I’m spending time building applications on Azure and Live Framework.

    The opening discussion centered around separating the buzzword “Cloud Computing” from the substantive advantages of using a cloud platform. The ‘Cloud Computing’ buzzword has been attached to many different activities: Google Docs can be considered cloud computing.  So can LiveMail, GMail, or zune marketplace.  LiveMesh is clearly a cloud based application. However, for most of us in the Software Development community, we think of cloud computing as having our own applications running in the cloud.  That means Windows Azure, Amazon’s Elastic Computing Platform, or the Google App Engine. Even those this was an executive type of briefing, we are all in the software industry. We build things, so we look at tools in terms of what we can build.

    From there, we discussed the risks to moving toward cloud computing. There are many.

    Current Investments: A lot of the large enterprises already have significant investment in their own DataCenters. This will change the economics of moving to the cloud.  Should an enterprise retire its datacenter? If so, at what cost? Having already spent all the money to build a data center, cloud computing will take much longer to generate ROI.

    Sensitive Data:  Others have discussed this as well,but the main concern here is fear.  Many companies have entered into a trust relationship with their customers that involves how the vendor handles the customers’ data. Most vendors are concerned with offloading that trust relationship to a 3rd party. Regardless of how much trust they may place in that 3rd part already, they still have concerns. Cloud platforms increase this concern because not only is the data offsite, the data is somewhere unknown.  You know, ‘it’s in the cloud’.

    Spotty Connectivity:  We developers tend to locate where we have great connectivity.  It’s almost a prerequisite for where we choose to live and work. However, the same isn’t true for all our customers. Some of them still must live in locations where connectivity is not a given. Or, even if there is great connectivity, it may not have high enough uptimes.

    But of course, we are excited about building software for the cloud, so what are the drivers to build software there? We are we excited about cloud computing?

    Once again, there are a lot of great business drivers for cloud computing.  However, almost all of them turn into one statement:

    Cloud Computing is Elastic.

    That implies several drivers for moving applications into the cloud. Economics is the greatest force: Under current models, your data center must be built to handle your peak load. You’ll pay for the infrastructure at all times, even at the minimum load for your application. For applications with seasonal implications (retail, tax applications, Olympics, etc) that can be a huge savings.

    There are other drivers as well.  Scale is a big one.  We work with some researchers that generate terabytes of data every month. That’s an incredible expense, and cloud based computing can lower the storage costs.

    After discussing some of the positives, we did a little comparing on the major announced cloud platforms.  Our index-card sized comparison is this:

    • Amazon’s Elastic Computing is the most immediate on-ramp to the cloud.
    • Google App Engine is a great platform for scripted web applications.
    • Windows Azure is a new OS optimized for cloud computing.

    Here’s why we came to that conclusion:  Amazon’s platform is based on the concept of renting a virtual machine image (either Linux or Windows Server). That makes it the smallest distance from any current application architecture. Google App Engine is optimized for scripting web applications. It’s simple to create web apps there. Windows Azure is setup a bit differently, and enables you to think of an app running ‘in the cloud’ as opposed to running ‘on N servers in the cloud’. That makes it a bit more work to take advantage of the capabilities, but could be a bigger win once there.

    We finished with an interesting question from one of our customers: “Are we recommending cloud computing, and if so, whose cloud?”

    We all weighed in with positive comments.  My own view was that if there weren’t overwhelming negatives (such as resistance to data location), I’ve been recommending cloud based solutions almost exclusively.  Which cloud is trickier. I believe in the Azure vision, because even though you can leverage much of your existing skills, it does make you think about running in a cloud. Therefore, for customers invested in .NET, or open to moving there, it’s my choice. However, it’s not a good idea to recommend porting a large codebase from other platforms (java, php) just to move to Azure.  I know there are some strategies for running those applications in Azure, but I don’t have enough experience there to place big bets on it. And, too many customers with Java or PHP apps have a dependency on MySQL, which doesn’t run in Azure.  When those barriers are in place, Amazon’s Elastic Computing platform makes more sense.

    There’s also a lot of interest from larger companies about running the Azure stack in their own data centers. Interestingly, while I understand some of the justification, I think it’s a short term concern.  Why would you run your own version of the Azure stack instead of pushing your application into the immense scale of a world-wide scale cloud?

    Rich Internet Applications

    One great thing about conducting small seminars is that we can set the agenda and veer off that agenda as energy takes us in different directions. 

    On Tuesday we spent more than 3/4 of our time on cloud computing, and finished with a brief look at Rich Internet Applications.

    Or rather, we talked about RunKeeper. ( If you run, and you have an iPhone, this is incredibly cool. Take your iPhone on your run, and it maps the distance, and all elevation changes.  We were discussing things like having it monitor your heartbeat, and monitor your speed (which it may do, I forget which features it does, and which we wished it did).

    This one was a bit less ‘game changing’ than cloud computing.  The overall consensus was that computer users want more. Better interaction, data from any device, and not constrained by the classic browser / forms metaphor.  That means we may be entering a time when browser based applications will be considered ‘legacy applications’ unless they make use of Ajax, Silverlight, Flex or similar tools. It’s fun to develop applications that have different capabilities.


    This was a wonderful experience. It was fantastic to spend a morning with a tremendous set of brain power, all participating in thoughtful discussions about emerging technologies and how to leverage them to bring more value and more capabilities to our customers.  The best part is that some problems which were considered ‘out of scope’ are suddenly in view.  That’s cool.

    Created: 6/16/2009 7:28:24 PM

    Yesterday, we hosted a Software Development Jam at Automation Alley in Troy, MI (North suburbs of Detroit, MI for those readers not in the Michigan area).

    We billed the event as a way for developers to learn something about those software techniques that we are convinced are the important areas of growth in the future. Those areas were modern software engineering techniques (TDD, Continuous Integration, distributed version control), modern .NET (WPF, Silverlight), and modern Java platform tools (Scala, Jython, JRuby). We spent the morning going over some general software techniques, discussing what kinds of apps we’d want to build, what folks wanted to learn, and why. We spent the afternoon building samples and learning from each other.

    The folks that attended were an interesting mix. We had people  with years of mainframe experience, people that had been teaching C++, and folks in the process of transitioning from IT Pro to developer track careers.

    This was the kind of event that wouldn’t have been possible only a few years in the past. The availability of tools, frameworks, and trial editions helped.  Jay Wren setup an SVN server in the meeting room on a spare laptop. Then, he helped everyone get access to it. He also setup a CC.NET server so that all the samples were building throughout the day.  That was a fantastic way to show all the attendees the power of these tools.  If anyone got stuck on a sample later, they could do an SVN update and see a working sample. Others could ask them to checkin their failing build and get help from someone that wasn’t stuck at the time.  And the best part was that everyone could do an "SVN update” and get all the samples before leaving. Of course, everyone could see if anyone made mistakes by monitoring the CC.NET homepage on the internal LAN.

    Mike Woelmer led a WPF tutorial in the afternoon. He also gave an overview of the differences between WPF and Silverlight. That helped folks understand when to pick one or the other for a new project. I was coding in Mike’s group, helping folks that got stuck.  I also modified the sample so that much of the middle-tier logic used LINQ style syntax rather than the classic imperative style. Later, Mike and I collaborated on an update to a Windows Forms applications that was multithreaded to give folks an idea on how to use multi-threaded concepts in WPF.

    Meanwhile, Dianne Marsh was working with a different group building some of the Code Kata problems in Scala.

    All in all, we all learned quite a bit about how to apply skills used in one environment to another.  Many of the attendees were stretched to apply what they know to new environments. We were all stretched to explain these new environments in a way that would resonate with people coming from a very different perspective.

    We’ll definitely do more of these in the future.  It was a great way to get information in front of a group of developers and understand the challenges many developers face in adopting new technologies in their current environment. That makes in incumbent upon all of us to do a better job of explaining the value proposition of the latest advances in software development.

    Created: 5/19/2009 2:27:23 AM

    The software industry will be part of the underpinnings for the jobs of the future. (You can read more of my thoughts on the importance of Software to Michigan’s future here).

    We created our company to create great software, and help others to do the same. In the current climate, we are holding a series of low cost labs to help developers learn skills currently in demand. Free scholarships are available for developers currently unemployed and in need of updating their skills.

    The first of these labs will be at Automation Alley on Monday June 15th.  You can read more about the event here.  You can sign up here.

    Please inform other interested developers of the event.

    Created: 12/17/2008 2:52:05 AM

    Dianne Marsh and I have been sharing time writing a monthly column for the Ann Arbor Business Review magazine.  This last month, I wrote about the trend for ‘inshoring’: Outsourcing software development from either coast to the midwest regions.

    Read the entire article here.

    Created: 11/13/2008 12:56:00 PM

    Holy wah.

    Dianne Marsh (who is on the speaker committee) posted the final list of the CodeMash 2009 sessions. Wow. She and Jason Gilmore did an incredible job somehow selecting 60 sessions from an incredibly rich pool of submissions.

    I'm rather proud that our little company accounts for 4 of the talks. Lots of prep working coming, but it's great.

     Even more, its amazing how CodeMash hsa grown over the three years of its existence. It's been a great success, and the entire committee deserves thanks from all of us.



    Created: 11/10/2008 5:07:50 PM


    We’ve got a great treat for Ann Arbor .NET this week.  Mark Mydland, from the Visual Studio Test edition, is coming through our region to speak at a variety of user groups.  (Thanks to Jennifer Marsman for setting this up). It promises to be a fun evening, because in addition to the talk, Mark wants to know as much as possible about issues customers have with the product. 

    As always, AADND takes place on the second Wednesday of every month, at 6:00, at SRT Solutions office in downtown Ann Arbor (206 S. Fifth Ave, Suite 200).  Please stop by.

    Here’s the abstract and bio:

    The phrase “drive quality upstream” has been abused so badly by ALM software vendors that it has to be relegated to the platitude junk pile along with such all time favorites as “work smarter not harder,” “Think outside the box,” and “Synergistic leveraging of code reuse.”  Before we drive quality anywhere we need to give quality a seat at the table. VSTS Rosario release will do this by automatically gathering critical information about the project and code and making that data available when, where and to whom it is needed. During this discussion we will examine how Rosario impacts quality across the application lifecycle by:

    •    Allowing testers to provide developers with details about what the code did instead of just providing the details about what the tester did.
    •    Allowing development leads and architects to visualize and understand their current code (not the code they wish they had, but the code they really have) so that they can minimize the impact of changes; and
    •    Allowing developers to understand the impact of their changes in terms of affected tests, concurrency and bounds checking. 

    The Rosario release of VSTS will bring all project stakeholders together to allow richer information to be shared across every role to make software quality accessible and achievable.

    Mark Mydland is the Principal Group Manager for the Visual Studio Team Edition for Software Testers product at Microsoft.  In the past 12 years, Mark has worked as a developer and consultant across a wide variety of applications and industries.  Mark first joined Microsoft in 2001 working as a member of the Natural Interactive Services Division (NISD).  During his time in that group, Mark was the development manager for a team focused on analytics for assessing the efficacy of natural language interpreters with a particular emphasis on driving authoring simplification and relevance quality for user assistance.  Based on this work, Mark filed numerous patents and coauthored a paper for the SIGIR journal.  In 2004, Mark left Microsoft to work as a Director of Development at Getty Images where he led a change in process from a traditional waterfall methodology to a scrum-based agile approach which brought the release frequency from 12-18 months down to 1 month.  Since Getty made extensive use of VSTS, it seemed a natural fit for Mark to join VSTS on his return to Microsoft in 2006.  Mark received his B.S. from West Point in 1991.  He has also held positions with USWeb/marchFirst and Andersen Consulting/Accenture.  ec

    Current Projects

    I create content for .NET Core. My work appears in the .NET Core documentation site. I'm primarily responsible for the section that will help you learn C#.

    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.

    I'm also the president of Humanitarian Toolbox. We build Open Source software that supports Humanitarian Disaster Relief efforts. We'd appreciate any help you can give to our projects. Look at our GitHub home page to see a list of our current projects. See what interests you, and dive in.

    Or, if you have a group of volunteers, talk to us about hosting a codeathon event.