The future of .NET, Visual Studio and more

May 24, 2008

Last year I blogged about Microsoft SOA initiative “Oslo” and the first mentions of .NET Framework 4.0. Today I decided to try to find more information about what the future in the Microsoft development world will hold.

As the information has been quite minimal, I decided to find out what kind of job postings Microsoft has listed at the moment as they reveal something of what they are planning at the Redmond. As it turns out, there are lot’s of interesting things coming in the future versions of .NET Framework, Visual Studio, SQL Server and SharePoint.

It should be noted that the information in this post is based mostly on combination of several job listings and speculations and it shouldn’t be taken as a definite road map or truth. Projects can be combined, canceled and delayed. I’ll link to the original job posting sources, but I’m not sure how long the links will work.

.NET Framework

This job post reveals how there will be several SKUs of the .NET Framework:

You would work with the .NET Framework teams in proactively identifying/consolidating redundant feature areas and in driving the core framework technologies. One of your immediate roles will be in helping us factor the .NET Framework to be more flexible, by building the right set of runtime features, such that we can ship multiple .NET Framework SKUs in an agile manner. For example, we must reach the right layering and componentization goals to ship a nimble form factor, such as the .NET SilverLight Framework (for web client) and the .NET Compact Framework (for embedded devices), then build it up to the .NET Client Framework (for rich clients) and ultimately to the full .NET desktop client (for client/server). You would establish framework life cycle, with a particular emphasis on removing obsolete features, so that we can advance the platform futuristically. You would also closely work with Visual Studio architecture team in enabling a flexible multi-framework-targeting experience.

Source

These days .NET Framework distributable is quite large so this was also bit expected to happen at some point. I recall reading from Scott Guthrie’s blog about this earlier. It should also be mentioned that VS2008 SP1 will bring “.NET Framework Client Profile” as mentioned in ScottGu’s post.

Web Development, SharePoint, IIS

Apparently some sort of media server product for Silverlight is in the works:

Do you want to help drive the technical strategy around Web and Media technologies that will shape the internet? Do you love deep, pragmatic, and focused engineering challenges where you control the schedule? Have you ever wanted to drive a small, start-up engineering team building a code base from scratch?

The .NET Developer Platform team is looking for a Group Manager to build Microsoft’s new media server product. This team will deliver the server-side media infrastructure and services required to stream rich media on the Web and work hand-in-hand with Silverlight running on the client. We are looking for a Group Manager who can lead a small team of 10-15 engineers to build this code base from scratch, as an integrated part of the new Web and Media platform.

Source

Now this is getting more interesting. It remains to be seen, if this will be a free add-on for IIS or a commercial product.

Moving on to the SharePoint:

Would you like to be part of the newly formed team whose charter is to develop a v1 infrastructure and tools for SharePoint platform? Would you like to invent, design, and influence a wide range of RAD developer tools for the fastest growing server product in Microsoft’s history? Would you like to work on a team that is in the early stages of execution, designing a new revolutionary set of tools? If so, the Developer Division Business Applications team is the place for you.

Our mission is to empower professional, departmental, and end user developers to create a complete range of business solutions and customizations on the SharePoint. We are part of the Visual Studio family. One of our vNext deliverables includes a rich tool set to support Microsoft Windows SharePoint Services (WSS) and Microsoft Office SharePoint Server (MOSS) that enable developers to fully utilize Visual Studio and the .NET Framework as a development platform.

Source

The last paragraph is the interesting part. Anyone who has developed custom solutions on MOSS 2007 knows that it can be a nightmare. While it has a good collection of components and services, the development and deployment experience could be a lot better. I personally prefer plain ASP.NET projects as the development life-cycle is much more enjoyable and more risk-free. Hopefully these tools will make the SharePoint vNext development much more enjoyable.

This is also very interesting as it seems to unify ASP.NET, AJAX and Silverlight development:

Are you interested in delivering a cutting-edge technology that will revolutionize Microsoft’s developer platform? Are you looking for the opportunity to help drive several of the key value propositions of the next release of Visual Studio and the .NET Framework? The UI Framework and Services team - part of the .NET Developer Platform group, and owners of ASP.NET, ASP.NET AJAX, and Windows Forms - is kicking off a new project that will be at the heart of the developer experience for building Rich Internet Applications on Microsoft’s .NET Client platform. The goal of the project is to deliver a dramatically productive and simple experience that enables RIA developers - a key developer market - to easily build rich and powerful data-driven applications on .NET. The project will build on the huge customer excitement in Silverlight and WPF, and the success of ASP.NET, to deliver an unparalleled client developer story. The key value propositions we will deliver on are:

  1. A complete RIA platform
  2. An application model that vastly simplifies LOB application development
  3. Greatly simplify N-Tier app development
  4. Seamlessly take your RIA out of the browser

To assist us in this project, we are looking for a strong and experienced SDE to help drive our Application Model and Services team. This team’s challenge will be to deliver an application model that makes it dramatically simple for developers to build a rich, occasionally connected, n-tier application. Team deliverables will include a new deployment model that can seamlessly take .NET-based Rich Internet Applications from the browser to the Windows desktop, a framework library that makes it incredibly easy to deliver rich occasionally connected user experiences, and a set of application building blocks like authentication and personalization that reduce the time to build rich application functionality, and integrate Rich Internet Applications with Windows, IE, and Office.

Source

And another related post excerpt:

To assist us with these efforts, we are looking for a strong and experienced SDE to help drive our UI and UI Framework team. Building UI from data is at the heart of virtually every LOB application, and the team will deliver a set of rich Silverlight based controls, including a data grid, that enable new data experiences. The team will also deliver a programming model experience that makes it incredibly easy to build rich data-driven UI and visualizations. Building on innovative technologies such as Silverlight, LINQ and WPF, this team’s work will allow developers to very easily build a fully functional UI application out of data. Using the UI Framework, developers will be able to then easily customize and enrich the application by adding functionality such as navigation, editing, and validation.

Source

This isn’t a big secret, but it was news to me:

Our goal this year is to get Ruby on Rails working in IronRuby. You will be expected to work on the compiler, Ruby libraries, and performance improvements. We also want to provide IronRuby support in the Visual Studio IDE. This includes editing features (color-coding of source code, intellisense, etc), debugging features (breakpoints, data tool tips), ensuring a Ruby look-and-feel (interactive console, etc), and integration into the Visual Studio project system.

Source

Visual Studio

Major changes are coming to Visual Studio (some day):

Over the next few years we plan to modernize and/or re-architect various areas of the [Visual Studio] platform where we see the greatest potential opportunities for improving the developer experience exist. These include creating a new User Interface that takes advantage of the latest in UI tools, techniques, and hardware; a robust extensibility model that helps 3rd parties extend and enhance the VS environment to improve developer productivity; an editor that is both modern and extensible and greatly improves developer code understanding; a build system that can scale to projects as large as building the Windows Operating System; and an automation model that makes it easy to automate the development environment and allow for tasks like nightly builds to be automated.

Source

Another posting reveals that WPF is one of the “latest UI techniques”:

Major initiatives for this team for the next release of VS include:

* Work with the Shell UI team to migrate portions of the VS Shell to WPF

Source

Visual Studio Team System

I have just adopted Team Foundation Server 2008 and other Team System features so I’m very excited to see what’s happening on this area. Here are some finds:

If you use Visual Studio or any other popular IDE to write code in C#, C++, VB, Java, etc. then these services are a familiar part of your development lifestyle. If you develop for any of the major SQL platforms, then the available development tools leave you relatively out in the cold. In certain respects, database development tools are fully three decades behind the curve!

Come work for the team that is changing this with a market-shifting database development project system within Visual Studio. The mission for the team is no less than to bring tooling-support for database developers to par with that of traditional languages such as C# and C++, for the complete application lifecycle. This is a challenging charter, in a fundamentally unique problem-space. In one team you will find a broad spectrum of software development challenges from designer and user interface work, to the nuts and bolts of language parsing and cutting-edge code-modeling.

Source

Interesting and I have no idea what it could be in practice. ;)

Testing will also get more tools in the VSTS:

In the Rosario release of VSTST we have the ambitious goal of fundamentally changing the relationship between Development and QA by providing tools and workflow that make testers first class citizens in our customers’ development process. To do this, we will deliver world class Test Case Management, Test Authoring, Automation Tools and Frameworks, as well as game changing integrations within Visual Studio Team Suite.

Source

Distributed Applications

These days I do integration projects and distributed programming is part of my daily life. That’s why I’m increasingly looking into WCF, WF and BizTalk as they could be part of our integration product. After reading these posts it seems that something interesting (that is, Oslo) is on the way:

Join the Connected Framework (CFx) team and help us create the programming model central to Microsoft’s next generation of the distributed application framework. The team has recently delivered first versions of WCF (aka Indigo) and Windows Workflow, which are receiving significant customer acceptance. WCF is THE Web Services stack for Microsoft, and Windows Workflow is THE foremost declarative, process model framework. Now is a great time to join the team as we are starting to work on the next major release that consolidates and enhances these two powerful yet simple and elegant development frameworks into a single unified platform aiming for 10x productivity increase in distributed applications development.

Source

For the last few years, we have been on a mission to make the usage of transactions simple, fast and ubiquitous. We have made tremendous progress so far. The Systems Transactions namespace in .NET 2.0 made transactions far easier to use, with dramatic improvements in performance. We have extended the reach of transactions all the way from web services to the kernel. We authored and implemented the WS-Atomic Transactions standard. In Vista, we integrated our transactions stack with the transacted file system and registry! In Oslo, we are planning to add distributed compensation support by adding long-running transactions support to the connected framework runtime! But all of this is just the beginning. In our upcoming releases we will continue to extend our reach, from atomic transactions to long-running activities with compensation to generic agreement protocols! We will continue to make it easier to write reliable and consistent distributed applications. Most importantly, we will continue to ship regularly to get our work into the hands of customers.

Source

SQL Server and Data Programmability

Do you have a passion for building state-of-the-art graphics software? Would you like to influence the direction of a key technology used across multiple Microsoft products?

We are seeking a Lead Software Development Engineer to drive the architecture, design, and implementation of rich data visualization components - including charts, gauges, maps, and calendars - that will be included in upcoming releases of SQL Server, Visual Studio, and Office. In this highly visible leadership role, you will be responsible for managing a high performance team of software developers using the latest Microsoft technologies, including C#, ASP.NET, AJAX, Silverlight, and WPF.

Rich data visualization capabilities are quickly becoming a requirement for modern business applications. The SQL Server Reporting Services team is on the cutting edge of this technology, creating a set of powerful and interactive data visualization components for application developers, IT professionals, and end users. We are a growing team that is passionate about creating the most comprehensive database reporting, data visualization, and notifications platform in the industry. We have an expanding customer base that has ever-increasing demands for more capabilities, and we are continuing to extend our product reach, evolve the feature set, and deliver new customer innovations.

Source

Those data visualization controls will be welcomed. :)

XML tools for SQL Server/Visual Studio will be enhanced. Interesting point is that WPF and Silverlight will be part of it:

Help build the XML Editor, XSLT Debugger and XML Editing platform for developers. The Data Programmability (DP) Tools product team is a new and growing product unit that is looking for a talented and motivated developer. We want you to help define and build state of the art tools that are distributed as part of Visual Studio and SQL Server and are used by millions of developers world-wide - hobbyists and enterprise developers alike. We value and encourage innovation and excellence in graphical tool design, usability, infrastructure, and execution. SQL Server is investing in tools. If you want to make a difference and work with state of the art technologies such as WPF, Silverlight, MEF/MAF, and help define tools standards for developers, then we would like to talk with you.

Source

This posting gives many interesting details about SQL Server’s future:

SQL Server is embarking on an ambitious effort to rejuvenate the T-SQL language and to embrace all the programming models in the data platform - relational, spatial, full text, xml and entities. This involves all aspects of the SQL programming surface from designing procedural extensions to the language, to improving the cursor model, to enhanced metadata discovery, to application packaging, to building a new compiler for T-SQL, to building extensibility into SQL Server. And this is just a sampling of the problems for which you will need to design and help build good solutions. In addition, this effort will require you to work on and influence Microsoft’s Data Platform Strategy.

Source

Last notes

As you can see, many interesting tools and technologies are on their way in the next few years. My research method was very random and the job postings don’t reveal much, but I’m sure that we’ll get more information in the coming months.

However, the pattern already shows that many coming features build on existing components and aim to unify the development experience by combining them in many ways.

It seems that there will be much more graphical designers, DSLs and other modern ways of generating applications. This will split the opinions as many developers prefer to code in the traditional way, but I’m sure there will be something for everybody - I probably found just a few interesting bits out of many!

From my view point the most interesting finds were:

  • UI developers will get the Application Framework(?) that combines the WPF, Silverlight and ASP.NET technologies.
  • SharePoint development experience will be tolerable, perhaps even fun.
  • Distributed developers will get the Connected Framework(?) that builds on WF and WCF.
  • Productive LOB-application tools that utilize latest UI-technologies (Silverlight, WPF) with little or no code.
  • SQL Server will get major changes to T-SQL and new XML tools.
  • Visual Studio will be enhanced in many, innovative ways with technologies like WPF.
  • Visual Studio Team System will make database development more integrated with the development process. Testing will get more tools.

Do you have any rumors to share?

kick it on DotNetKicks.com


C#: Comparing ways to iterate lists in C# and some lambda expression examples

January 16, 2008

As one who has been learning  .NET and C# since it was first public preview I’ve found it interesting to follow how the language has developed.

One way to see how expressive C# has become is to compare ways how to iterate collections. I also hope this helps you to understand lambdas (new in C# 3.0) better.

C# 1.0 - foreach

This first example shows how I usually iterated a collection of objects in C# 1.0:

//C# 1.0 Basic Approach

foreach (Product product in products)

{

    WriteOutProduct(product);

}

This is very familiar way for almost any coder of any syntax and it is probably self-explanatory for non-coders, too.

The products -object is of generic type List<Product>. Generics didn’t exists in C# 1.0 (how did we ever manage?), but that basic foreach-method works with any array or IEnuramble -collection.

C# 2.0 - Anonymous Methods

Anonymous Methods were introduced when C# 2.0 was released.

After that we could alternatively go through the items like this:

//C# 2.0 Anonymous Method Approach

products.ForEach(delegate(Product product)

{

    WriteOutProduct(product);

});

While the performance is good for this method, the syntax is quite hard to remember and hard to read. Note that the ForEach is a method in List<T> and it doesn’t automatically exist in all collection types.

When the method has only one parameter that takes an object as a parameter like in the example above, the call can actually be shortened into form:

products.ForEach(WriteOutProduct);

While this is probably the neatest way, it won’t work when the method requires more than one parameter (as far as I know). Then it has to be expanded to a form described in the previous example.

C# 3.0 - Lambda Expressions

I’m fan of simple and fast syntaxes and the more I get used to Lambda-expressions, the more I like them.

Here is an example, how to achieve the same result using the lambda-expression:

//C# 3.0 Lambda Expression Approach

products.ForEach(product => WriteOutProduct(product));

It takes a few tries to get used to the lambda expression as the order of parameters may be little confusing at first. But once you do, it’ll come out naturally.

More lambda examples

Here are some more examples to get your ideas flowing. For some  cases LINQ to SQL could be better candidate as it limits the results of the query already in the database-side. However, sometimes you want to get subset from collections without extra round-trip to the database and that’s when these methods are useful.

LINQ is also a very good alternative for doing queries to the objects, but in simple cases I prefer this even shorter syntax. When queries and objects are more complex, then LINQ has more power, but that’s outside the scope of this post.

For these examples I have used a typical method that returns a list of all products:

private static List<Product> GetProducts() { …

With lambdas I could filter the results to those products that cost more than 50:

List<Product> products = GetProducts().FindAll(product => product.UnitPrice > 50);

Or get only those products whose names start with "A":

List<Product> products = GetProducts().FindAll(product => product.ProductName.StartsWith("A"));

Or sum the prices:

double sum = GetProducts().Sum(product => product.UnitPrice);

Have fun :)


Stored Procedures vs. Dynamic SQL - The never ending debate?

January 6, 2008

One of the recurring discussions among developers of data-driven applications is the choice between stored procedures and dynamic SQL.

Last time I stumbled upon this subject was when I started reading this post about NHibernate at Karl Seguin’s blog. Years ago one of the longest discussion was caused by this post from Frans Bouma. This is an another typical post about the subject I saw today.

I’m not going to start another rant about which is the right choice for everything, as there simply isn’t any ultimate answer. Deep Thought could argue with this, but the answer would probably take millions of years, so who cares. ;)

Use object-relational mapping for the generic stuff

My recommendation is to use dynamic SQL for the most database access methods (say, 80-90%), when coupled with a solid object-relational mapping tool or some code generation tool.

Especially with large databases that have many tables it wouldn’t be wise to code all the SQL by hand (sprocs or inline). Add tight schedules and changing requirements/database schemas and long days are guaranteed.

Usually majority of the data-access methods for normal, transactional databases are basic CRUD-operations, so why bother coding sprocs when they don’t bring any advantages?

Better choice is to use LINQ, Entity Framework or a good third-party object-relational mapper to reduce routine coding and to get lazy-loading etc.

Use stored procedures for the heavy stuff

No matter how useful OR-mappers can be, I still think that for the rest of the data access (the remaining 10-20%) stored procedures are a better option.

For complicated queries like searches and reports you often need more sophisticated SQL than what the generic tools can generate. I’m talking about queries or updates that span many tables, aggregate data or those that would require lots of round-tripping when using dynamic SQL and other client-side alternatives.

Of course you can combine all the data from automatically generated collections, but it would mean very chatty way to collect the data. With sprocs you can often get all the required information in one access to the database.

In cases like these it is better to fire up the good old Management Studio (or Query Analyzer) and optimize the queries for better results. While tuning, you can easily check the Execution Plans, index usage and logical reads (with STATISTICS IO option on).

I’m not saying that stored procedures are always automatically faster than similar dynamic SQL-clauses (they are not). My point is that manual tuning SQL by hand brings more performance as long as you know what you are doing. Crappy SQL in stored procedures (cursors, temp tables etc) won’t bring any benefits. Also, business logic belongs to the business logic layer.

When you notice that some part of the application is performing slowly, moving and optimizing that part of the code as a stored procedure could help. SQL Server Profiler is a good tool for finding slow-performing queries.

Conclusion

Like with almost everything, choosing the right tool for the right job applies here as well. Better get the best of both worlds than choosing blindly one over other.

For normal (CRUD) database operations, use object-relational mapping. However, make sure that the tool can use sprocs when needed or write helper classes for sproc-access manually as sometimes it is better to optimize the queries manually.


Somasegar talks about performance improvements in Visual Studio 2008

October 10, 2007

Here is a part about the LINQ performance from the Somasegar’s blog:

For example, with the new LINQ facility we set a goal that LINQ performance be significantly better than using a SqlDataAdaptor for the same query and competitive with using a SqlDataReader, the lightest weight interface available for retrieving data from SQL Server.  In our testing, LINQ does in fact out-perform SqlDataAdaptor on almost every test case we tried, and in many of the exceptions, it is no more than 10% slower than using a SqlDataReader to accomplish the same task.  Given the power of LINQ, we feel this is a very reasonable trade-off.

There are many other interesting topic mentioned. Be sure to read this post if you are interested in performance improvements of VS 2008 and CLR 3.5!


Entity Framework Beta 2 & Tools CTP1 released!

August 28, 2007

While browsing through feeds, I spotted these news - Entity Framework Beta 2 is now available for download.

I believe that once Entity Framework is ready, it’ll work sweetly with the LINQ to Entities. That way you’ll get best of both worlds. The figure on the right (copied from the MSDN) describes the architecture and relations of the Entity Framework, LINQ and ADO.NET well.

image

The new features and improvements in the Entity Framework include:

  • Events to customize code generation
  • Abstract types in EDM models
  • Complex types
  • <Using> support in metadata files
  • Entity key serialization
  • Increased persistence ignorance in entity data classes
  • Improved connection management in ObjectContext
  • Improved DataBinding usability
  • Metadata annotations
  • Better support for span over LINQ to Entities queries
  • Improvements to LINQ queries: additional canonical functions and automatic mapping from CLR functions to server functions
  • A new event for extensibility of SaveChanges
  • Usability and consistency improvements
  • Polymorphic results from stored procedures

If you are interested in trying out this beta, be sure to test the tools (CTP1), too. The tools will bring you the joys of Entity Designer, Entity Mapper, Entity Model Browser and Visual Studio Integration.

Other useful links:

I’ve been bit busy lately due to moving to new apartment this week and otherwise busy, so there haven’t been lately as much time for blogging as I have hoped. It’ll be fixed soon, though :)


Common Data Patterns with LINQ

August 9, 2007