10
Feb

Impact The Planning For EF/Astoria vNext

Now that the VS2010/NETFX4 train is about to grind to a half, the vNext discussions are ramping up for each of the encompassed technologies. Why is this interesting to you? Because it’s the perfect time to start voicing your personal opinions. If you’ve been moaning about a feature that you need, or a behavior that should be improved, you absolutely need to tell us about it. Despite what some believe, Microsoft listens very extensively to customer feedback, the trick though is knowing where to give that feedback.

I get e-mails all the time, and I read tweets every day talking about some change request that a developer would like to see made. Unfortunately, those mediums aren’t the best way for us to be able to rally behind. Don’t get me wrong, we want that communication to happen, and we take those comments into account when doing product planning, but in order to justify new features, it’s very key to have as much support behind it as possible, and this typically can’t come from a bunch of disparate e-mails, tweets, etc.

You don’t need to be BFFs with ScottGu (that certainly won’t hurt) or attend every SDR to have a voice in Microsoft. This was loudly confirmed by ASP.NET MVC, which anyone can tell you was heavily driven by customer comments. The same can be true for the Entity Framework and WCF Data Services in their vNext releases. We just recently published Connect sites for both products and are asking for all the feedback you’ve got. This can come in the form of bugs or suggestions. Both are much appreciated and will be directly taken into account. One of the main reasons using Connect is great is that it allows other people to upvote/downvote your suggestions. This makes it much easier for us to justify working on a specific feature (or not too if you’re the only person in the world that wants something added).

Entity Framework vNext Connect

WCF Data Services vNext Connect

Long story short: go make your suggestions on the Connect sites, otherwise I don’t want to hear you complain a year from now about something we didn’t add :)

26
Jan

If He Walks Like A Ruby Developer, But He Talks Like A PHP Developer, Then What Exactly Is He?

After I made my opinionated post last week on the pointlessness of debating what the “best” is in regards to programming languages, frameworks, etc., I got a rather substantial amount of feedback/whiplash from it. I really appreciated someone submitting the post to Hacker News because it ended up generating a lot of great commentary that made me rethink my thoughts on the matter. Have I changed my story? Not really. But, I need to clarify a couple of things.

One of the better responses that I saw came from Ryan McGreal who I thought made an excellent observation:

“It seems to me that the author is ignoring the relationship between experience and expertise in a language. Programmers call themselves [language/framework] developers because they’ve invested a lot of time becoming proficient in that language/framework. Of course there’s some skills transference when you pick up another language, but they’re not commodities and they’re certainly not entirely fungible.”

Ryan is totally right, and I admit that I carelessly made some rather abstract comments without mapping them back to reality. As professionals, we all need jobs, and those jobs come with a label attached to them (e.g. ASP.NET developer). In order to be valuable for those jobs we need to do our best to excel in a specific language and/or framework (most likely both). I was never trying to call out that truth or somehow sound disillusioned to the way you can become successful.

What I need to clarify though is how I view developers, their multiple personalities, and their immensely powerful ability to change between those personalities as needed. When I think about software development as a whole, I think of it as a series of different personalities that people can choose to adopt over time. For instance, if somehow along your career path, you do a stint as a DBA, you’ve acquired that personality. Done embedded development? You got another. Written ColdFusion? Eek, sorry about that (I know how you feel). Worked with functional languages? Guess what? You’re now changed forever.

As your career progresses, your “value” can be calculated in one of two ways: how many personalities you’ve acquired, and how strong some of your individual personalities are. The former is what I focused on in my previous post, the later is what I believe Ryan was referring to, and in most cases is what lands you a job in the real world. But, is that what makes you the most flexible? Or the most well-rounded? It’s hard to say.

I’ve interviewed many developers who applied to a position that was attached to a specific programming language, and didn’t even know that language, but I still gave my recommendation to hire them. The reason was that I felt comfortable enough with their current skill set that I knew I could not only mentor them to transition in another language, but they could become really strong. Truthfully speaking, I never once saw a negative recourse from one of those decisions (thank goodness!).

To me, these types of incidents have always spoken to the fact that a good developer, who has strong fundamental knowledge, paired with the right team, can easily move between languages and frameworks. Everything out there is made up of the same ideas, they’re just worded differently. Give someone the right translator and they’ll be happy to speak the language. Anyone who is running a development team, and doesn’t try to see that potential in people, is doing themselves and their team a disservice.

This anecdote doesn’t exactly hold up for contractor positions where a company is looking to hire someone with a specific skill for a specific amount of time. But, I only think my point degrades from the perspective of the company, not the developer. The next subheading will explain why.

Human Duck Typing

Besides the case of a developer who can flexibly move between languages/frameworks due to his core knowledge, what about the developers who have strong knowledge in multiple areas? I personally know some guys who are ridiculously versed in both PHP and Java, or .NET and Ruby, or both C# and Scala, etc. What do you label those people as? I don’t think that you do, but that’s just me.

If our expertise were like a base class, we could only ever have one (in most languages), but I think many of us can agree that inheritance is overused. If expertise were like attributes that a person could have, then we wouldn’t really care what they labeled themselves as, because we’d only be concerned with the fact that they can speak the language we want them to. That is exactly why “duck typing” in programming languages can be so useful, because from a programmatic perspective it allows us to not be considered with what something is, but what it can do.

When a company puts out an ad for a “Ruby developer”, the guy who has multiple different technical personalities, one of which is Ruby, could then apply for that job, and everybody wins. The company had to choose a specific attribute to ask for up front, but if they were really smart, they’d be interested in a lot more in the long run. In some ways this can also be paralleled to claims-based identity. The identity provider could have a whole ton of information on a user, but the relying party only requests the bits it needs. Likewise, a developer can contain a whole slew of technical prowess, but an employer is only “demanding” a few primary ones.

Wrap This Up For God’s Sake

If you strip out all of the ridiculous analogies and ramblings, all I was trying to say is that as a developer I love sharing ideas with other people and gleaning from them parts of their technical personalities (read my other post here). I feel like this is what makes me a better professional, and keeps my interest in the industry fresh. I appreciate other developers who have a similar interest in learning, and take the approach with their career to try to be as well-rounded as possible without sacrificing the expertise in the areas that make them valuable. At any given time we’re obviously going to have a stronger slant towards the technologies we’re using, but that doesn’t mean we have to settle ourselves in that bucket in terms of conversation. Be what you need to be for your day job, but be all that you can be for your community.

FYI, I realize that was disgustingly cheesy, but it was just too awesome an opportunity for me not to close it like that :)

25
Jan

Dear Son, Don’t Forget…Give Credit Where Credit Is Due

My whole life growing up my mom repeatedly told me a phrase that my dad used to say (apparently a lot): “Give credit where credit is due”. If I had to pick the lessons that were reiterated to me the most as a child, that would be in the top five. The notion that giving someone appreciation isn’t enough, but rather, you should actively seek out the opportunity to give someone credit when it’s owed to them. It’s a pretty powerful thing.

It’s easy to get wrapped up in our own ideas and pursuits and not be able to see how we got where we are and who it was that helped us along the way. There are many areas in our lives for us to be appreciative, but I’ve been thinking a lot lately about the collective opinions of people around us that end up making our own. It would be haughty to think that anything we say or feel is actually of our own creation, instead of realizing that we refined or derived it from someone who ultimately inspired us (whether is be subconscious or not).

As a kid, I was in love with the Mega Man video game series. What enthralled me the most was the fact that you could absorb the abilities of your opponents upon defeating them (thereby making you the “Mega Man”). This interested me even more as I got older and thought about how this slightly paralleled our interactions with people in reality. Obviously we’re not out to defeat our friends and colleagues, but there’s no doubt that we “gain abilities” as it were by being influenced by the opinions and ideas of others. In effect, all of our individual intelligence is nothing more than a personal slant on the overall collection of ideas that we’ve absorbed throughout our entire life.

There are also a special class of people who have created unique ideas completely of their own initiative, who we would label as geniuses. But, I would argue that despite the fact that the idea in question might be unique, they absolutely were influenced by someone in some capacity. Nothing in life is new, we’re just refining the same ideas over and over again until they reach the point of satisfaction for the current state of our society. As society changes, so do the ideas.

When you think of it like that, it’s hard not to feel indebted to those people who influenced your thinking. It’s one thing to be given a tangible gift, but it’s an entirely other type to have had wisdom shared, leaving you with the opportunity to do something with it. When I say “wisdom shared”, I don’t just mean someone who is giving a talk at a conference, or doing a podcast, or writing a blog post. Any of those things on their own are just sequences of words that we interpret either visibly or audibly. Where those mediums transform between empty words and wisdom is when the person speaking is transmitting more then just words, they’re transmitting passion.

The smartest person in the world would be completely useless if they didn’t know how to articulate their ideas in a way that caused us to understand not only what they’re saying but where they’re coming from. The harder you have to work to deduce value from someone’s ideas, the less worth there is to continue listening. It’s kind of like the attempt to use ethanol as a source for fuel. Sure, ethanol is a valid fuel alternative to petroleum, but the amount of resources and effort that it takes to process corn into usable ethanol makes the whole process almost useless (not to mention the fact that you still need petroleum to operate most of the process).

The other day, Alex James (who is an incredibly smart guy) was asking on Twitter whether the best programmers are the ones who are most well-rounded. This is obviously a fairly subjective question, but my answer was yes. I say this because my interpretation of “best”, in the context of software developers, are the ones who are most capable of participating in the inspiration of the team as a whole. The more well-rounded a developer is, the more areas he is capable of sparking the idea that might lead to success. The inverse of that is that a well-rounded developer is also not going to be a roadblock for an idea permeating. In my experience, nothing kills the morale of a team like someone who doesn’t understand something, and translates that misunderstanding into disapproval of the idea.

It’s too easy to overlook those guys who strive to be as well-rounded and articulate as possible and make an effort to really share their passion for software development with others. Working at Microsoft, I have the pleasure to interact with some pretty amazing people on a daily basis and I can’t even begin to express my appreciation for it. The following is a list of people that I believe have been integral in my growth as a developer in the last year (excluding the “celebrity developers” that everyone already knows), who I’d love to see start having a broader influence:

  1. Jason Olson
  2. James Senior
  3. Matias Woloski
  4. Dave Reed
  5. David Fowler
  6. Pablo Costantini
  7. Johnny Halife

In many ways, that group makes up what I would consider part of my “collective intelligence” (yes I’m overloading that term). Between language design, business/startup trends, web development, identity/security, and everything in between, I’ve learned an immense amount from those guys, and will continue to learn.

The point of this post wasn’t to namedrop, but I thought I’d throw out a couple names of people that I feel deserve a shout out, and hopefully encourage them all to blog more :)

Whenever I hear people complain about the state of the .NET community, I just can’t help but feel like they haven’t found the right people. Our community is absolutely loaded with the right people, unfortunately some of those folks aren’t nearly as vocal as others. I’m sure there are tons of awesome people in the .NET space that I’m missing out on by not knowing. The question is: how do we surface these people out? Simple: give credit where credit is due.

22
Jan

The Current State of the Web: Why It’s Pointless to Debate Which Language, Framework or Architecture is the Best

I’d like to make it clear beforehand that the following novel is fully my opinion and not that of my employer.

Whenever I hear a developer address themselves as a “C# developer” or a “Ruby developer” or an “[Insert programming language here] developer” I really can’t help but cringe. Why? Because as an industry, we should be long past the days where you align yourself to a specific programming language. Now, I’m certainly not saying you shouldn’t pick favorites (that’s just human nature), or even lean towards one most of the time (I currently do ~90% C# development), but at the end of the day, being a great developer means learning core fundamentals which can be applied to any language. If you have a solid grasp of object-orientation, functional programming tenets, the benefits of dynamic programming, and so on, you could seamlessly pick up a new programming language that fit one of those paradigms. Most of the time, languages share ideas between each other, so keeping a keen eye to the languages landscape can also help promote fresh concepts regardless which one you’re currently using.

A better question to ask could be: which language paradigm do you prefer? Many developers are very passionate about dynamic programming languages, and so having to use a statically-typed language might feel constraining to them. But, even that debate is getting blurry with languages offering strong type-inference (e.g. F# or Scala) that can get a statically-typed language pretty close to providing a “dynamic” experience. The addition of LINQ into .NET 3.5 also proved that languages that aren’t functional in nature (e.g. C# and VB) can have a strong functional offering. Things like this lead us to believe that the best question to ask here would be: which language paradigms (note the plurality) do you prefer? Single-paradigm languages are a thing of the past, and developers have an even better opportunity to be productive by using a language that amalgamates the paradigms they prefer in a way that is as close to their preference as possible (no language is without its problems).

That said, I’m also not promoting “polyglot programming” here (which I think is mostly a load of crap). What I am saying is that it’s a waste of time to get caught up into a single programming language or even a single paradigm, when that would only be doing yourself a disservice. This is why I also don’t think that a Java vs. Clojure vs. Scala vs. F# vs. Whatever makes any sense either. Sure, each language is going to have tangible benefits and reasons you could argue that it’s better than another, but “better” becomes largely subjective based on your individual scenario and perspective.

For instance, I personally love Clojure and think it’s JVM interop is just beautiful, but would I recommend it to someone who is familiar with Java and is looking for a functional language? No, because the learning curve is too drastic (unless they’re already a Lisp nerd). Scala is just as powerful and provides a substantially lower barrier of entry for someone coming from Java. And it’s type-inference provides plenty of powerful scenarios that make up for it being a statically-typed language. But even that decision is based on my own perspective. Point being: I believe in being prescriptive, but unfortunately you need to do your own research and make your own decision because ultimately the only deciding factor is your own personal situation/preference.

Languages –> Web Frameworks

What does any of that have to do with the current state of the web? Everything. Just like programming languages, there was a time where it was common for developers to align themselves to a specific web framework. If you address yourself as an “Rails developer” or an “ASP.NET developer” or an “[Insert web framework here] developer” you’re doing yourself a disservice. Why? For the exact same reasons mentioned above. I consider myself a developer first and a web developer second. I like to think that I’m a student of all the cross-cutting concepts that make up what it means to develop for the web. Those skills can then easily translate to any framework (and language) you pick.

The real questions to ask isn’t which framework is better but which attributes of a web framework you prefer and make you more productive. Do you like component-driven development (e.g. WebForms, Wicket)? Are you more efficient using an MVC architecture (e.g. Rails, ASP.NET MVC)? Do you fancy a more “light-weight” HTTP framework (e.g. Sinatra, Compojure)? Going further, even those questions have additional sub-questions. There is no “one-size fits all” approach to MVC frameworks for instance, and in some cases the expressiveness of a framework is dependent on a specific language, so you need to pick the one that ultimately suits you best.

Just like languages, some web platforms allow you to be multi-paradigm. For instance, with ASP.NET, you can easily intermingle MVC and WebForms together into a single application. That may or may not be the right option for you, but it’s an option nonetheless. This further drives the point home that arguing WebForms vs. MVC just doesn’t make any sense. Neither Microsoft nor anyone in the community can or should make that decision for you. Why? Because both are equally as good choices, and can ultimately only be chosen based on what makes you and your team more productive.  Point being: I believe in being prescriptive, but unfortunately you need to do your own research and make your own decision because ultimately the only deciding factor is your own personal situation/preference (does anyone else hear an echo?).

If you’d like someone else to make your decisions for you, that is fine as well. Just be clear that that is what you’re doing if you ask an open ended question like WebForms vs. MVC or Ajax vs. Silverlight, etc.

Web Frameworks –> Architectural Styles

So why does the title of this post claim that debates about which language and/or framework is the best is pointless? Frankly, because that debate isn’t interesting anymore, especially in the context of the web. The current state of the web is such that it is the compelling ideas that are interesting and how they affect the way we live our lives. If you want to become the next Twitter (who doesn’t?), you should be focusing your attention on how to add value to the overall social network of applications. From a technical perspective, what makes those types of applications possible isn’t a single language or framework but rather an architectural decision that can maximize on the potential for success. Out of those decisions, new languages and frameworks will be born, that will be founded on solving actual problems rather than just academic exercises.

Am I claiming that you shouldn’t discuss how to make a language or framework better? Of course not. Any given day of the year you will find me discussing everything from MongoDB to Grails to OData and so on. Discussion is absolutely necessary, and it is the continual engagement with the different communities that keep us sharp as developers. But, MongoDB as a product isn’t itself interesting. When it becomes interesting is when MongoDB proves to be a great option for enabling a compelling idea. Hence, talking and debating over whether MongoDB is better than CloudDB or SQL Server is pointless outside of the context of actually creating something meaningful.

When we raise the level of conversation from frameworks and languages to architectural styles, does the debate over which is best become any better? Not really. If we’re talking strictly about web applications, there any number of choices here. RIA (e.g. Silverlight, Flash, JavaFx) vs. Server-centric (e.g. ASP.NET WebForms, Struts 2) vs. “pure” Ajax vs. some hybrid approach vs. Whatever is just as boring a discussion to have as languages and frameworks. Why? Because there is no right answer. The point being is exactly the same for architectural decisions as I’ve already stated twice. The best thing we can do as developers is strive to stay as relevant as possible in all areas of our industry. Am I saying you should become a jack of all trades and a master of none? Certainly not, but there is a healthy balance between betting your career on a specific technology and positioning yourself to move forward with the industry as a whole. Let’s take a look at Twitter, and see how they’ve done this beautifully.

Twitter Case Study

If I was to ask you what makes Twitter so successful from a technical perspective, what would you say? Would you talk about its use of Scala for the backend or Rails for the front-end? What about its extensive use of memcached and their rather genius caching strategy? While all of that definitely peaks my nerdometer, it doesn’t have anything to do with why they’re successful. I’d argue that what makes them successful is also what makes the debate over what language, framework, or UI technology the best is pointless: their API.

Let me ask two other questions here:

  1. Is Twitter a web site? A web application? A web service?
  2. What is your favorite Twitter client? The website? Seesmic? Tweetdeck? Tweety 2?

Answering #1 would depend entirely on how you view Twitter. You could say that it is a web site, and yes www.twitter.com does exist, but I’d call that their “canonical UI”. What I mean by that is that the website is nothing more than the default client that anyone new to Twitter might use. It is the baseline experience that Twitter personally created to make sure that anyone could access their service. Ultimately though, Twitter’s value is wrapped up in their services and ultimately their data (including users and tweets).

The answer to #1 leads directly into #2. Because Twitter isn’t just a website, and because they’re not partial to who uses their data, that allows us to actually choose a favorite client. Even further, we might have a favorite client for different platforms (e.g. Windows Mobiles, iPhone, Android, Mac). Because of the way that Twitter positioned themselves, they’ve enabled every user on every platform to choose the experience they prefer. That’s a very powerful achievement, and is exactly why it no longer makes sense to argue over what UI or web framework is the best. If you want to achieve large success, it isn’t in the client business, it’s in the services and data business. Whoever has the data has the power.

This is also why it doesn’t make sense to ask whether it’s better to use Scala on the JVM for Android or jQuery and ASP.NET or Flash and ActionScript, etc. I don’t know about you but I’d rather come up with a great idea and then make my data portable so that any of those aforementioned experience would be possible. That’s when your reach and social relevance can be truly compelling. This is also the blueprint being employed by just about every startup worth anything (e.g. Foursquare, BlockChalk). Languages, frameworks, and architectural styles are nothing more than tools in our arsenal that can enable us to create our ideas. We’ll continue creating new ones, and there will continue to never be a right answer in any of the categories.

The discussion over services and data opens a whole other can of worms that I’m not going to go into in this post. Maybe another day :)

Have The Conversations

What can you do to contribute to the overall conversation of the web? Be open-minded and be solution-driven. If you need to ask a question about product comparisons, make sure to have some solution context to back it up, so that recommendations can be made based on merit and not pointless debates over which is “better”. Also, be willing to hear people out when they’re talking about some language, framework or style. Good ideas come from all directions, and you can guarantee that what you believe in today will be obsolete tomorrow (not literally, but it almost feels that way sometimes).

Cross-pollinated conferences like CodeMash and MIX are the perfect place for such conversations to occur. When the Ruby folk and Java peeps and .NET group and PHP clan (etc.) get together magic happens. If you see me at one such event, I’d love to chat about what cool stuff you’re doing. Otherwise, if you’re at a conference, talking about cool stuff, hopefully I’ll find you :)

17
Nov

Tailspin Travel

logo.pngThis morning, Cameron Skinner presented a demo in Bob Muglia’s keynote at the PDC. The demo focused on some of the most exciting new features coming in Visual Studio 2010, .NET Framework 4, SQL Server 2008 R2, and the new Windows Server AppFabric. We felt that the demo did a great job of highlighting the value of the next wave of Microsoft developer tools and as such we wanted to make sure that it was readily available to everyone.You can now download the Tailspin Travel application from Codeplex (download here). In addition to the feature use cases that were presented in the demo, the released version of Tailspin contains many additional scenarios to help developers see a broader view of possibilities with the respective technologies.

Technologies Covered

The Tailspin Travel application covers a pretty substantial set of functionality, but ultimately seeks to provide a holistic perspective of how Visual Studio 2010, .NET Framework 4, and the server platform can be used together. The following is a list of the exact features that are shown in the application:

Visual Studio 2010
  1. Assembly Dependency Graph
  2. Multi-monitor
  3. Navigate To dialogue
  4. IntelliTrace
  5. New WF designer
  6. MSDeploy
  7. Coded-UI tests
.NET Framework 4
  1. ASP.NET MVC 2
  2. Windows Identity Foundation
  3. Windows Workflow Foundation
  4. Windows Communication Foundation
  5. Entity Framework
Server Platform
  1. Windows Server AppFabric
    1. Service Container
    2. Workflow Container
    3. Monitoring
    4. Cache
  2. SQL Server 2008 R2
    1. DAC

System Requirements

Tailspin was built using Visual Studio 2010 Ultimate, and there are a few features in use in the demo that require that version (e.g. coded-UI tests). If you’re using a different SKU, you’ll still be able to run the solution, but there will be some features you won’t be able to take advantage of.Because we consider the new Windows Server AppFabric a key part to the Tailspin Travel application, we also require that you have it installed. This is what enables the memory-caching, as well as the service/workflow containers, and monitoring support.SQL Server 2008 R2 isn’t a hard requirement, but if you don’t have it installed you won’t be able to deploy the Data-Tier Application (DAC).

Next Steps

We plan on doing at least a couple more iterations on Tailspin Travel. There are a few tweaks we’d like to make, plus I’m confident we’ll get some great feedback from you guys that will help make it even better.





March 2010
S M T W T F S
« Feb    
 123456
78910111213
14151617181920
21222324252627
28293031  

Categories