My view is, honestly, that people are making a mountain out of a mole-hill.
The simplest thing to do in the world is to match a string to a string. If I see this:
Given my name is Darren
and
Given("my name is Darren")
I'm using the powers gained in elementary school. I read a sentence in English, I read the other sentence in English, and there's no conflict. But If I match it to:
public void my_name_is_NAME(string name)
I've left the real world and jumped into programmer world. My brain has to process this sentence much differently. Many programmers might say, "Oh, but I can take that stuff easily," but they're wrong -- they still have to process that sentence. Even subconsciously, they're doing more work. And if anybody wants to claim differently, I'd be happy to take a popular blog post, convert the entire thing to this_is_a_name type of syntax, and we can see what it really takes to read it.
Plus, to make it worse, it's completely out of the scope of regular C# syntax. Though I write much more Ruby these days and I prefer the underscore syntax, that's not the camel case that C# is written in. C# devs expect to see
public void MyNameIsName(string name)
and not
public void my_name_is_NAME(string name)
It's not a natural fit. We're already trying to bend C# to fit a natural language, and it's so awkward to do so we have to resort to breaking regular C# conventions to the point where we're assigning meaning to ALL CAPS. These non-regex method statements ooze with insider-knowledge, where any dev would look at it and know there are hidden rules and conventions.
But regex isn't a natural fit, either, right? Well, that's one of the neat things about SpecFlow: You don't have to know regex to write it, you just need to use (.*) as a wildcard. I've written thousands of steps with SpecFlow, yet I've never gone past this:
Given("my first name is '(.*)' and my last name is '(.*)'")
This is one case where a static language is useful, as it can be leveraged to convert a string to any primitive type. And if one prefers, SpecFlow even offers the ability to control how that string is converted to *ANY* type. No need to do what I've seen the Cucumber guys do, with their fancy regex statements to turn strings to whatever.
SpecFlow was a big part of my personal advancement as a developer. Early in my SpecFlow days, I was one of those guys who preferred the C# syntax over the natural language, but after using it for a while I started to see the benefits. I started learning more about Cucumber, and everything I read in books, wikis, and blog posts could be ported to SpecFlow. I've always advocated and taught other devs to "stick with the basics," to give up today's personal preferences for future gain, but I'm afraid most are going to forgo all of that for the new C# syntax. They'll be closer to MSpec than Cucumber.
Haha, in fact, I can already see it now: People adjusting the way they write the their steps in the feature file to better fit the C# syntax. (shedding a tear)
Darren