The first day of Tech Ed has been exciting and full of things to be learned and explored. Here are the sessions I attended and my thoughts/reflections on each.

Keynote with Bill Gates, S. "Soma" Somasegar, others
Pragmatic Architecture: The Role of an Architect with Ted Neward
- Architects spend too much time defining their role
- The building architect analogy is good, but the maestro/conductor comparison is better.
- How do we start polishing the process of software architecture over the next 5-10 years?
- Why is there often a negative connotation with the title "Architect"
- Some architects really have no idea what is going on. You must understand the big picture before you can create solutions at this level.
- Should architects still write code? Absolutely!
Best Practices with the Microsoft Visual C# 3.0 Language Features with Mads Torgersen (PM for C#)
Automatically implemented properties
public string CustomerID { get; set; }
Implicitly typed Local variables
var custs = new List<Customer>()
{
new Customer()
{
CustomerID = “MADST”;
CustomerName = “Mads Torgersen”;
City = “Redmond”;
}
}
Collection and Object Initializers
Code-result Isomorphism
Shape imitates result
ObjectDumper
Extension Methods
Public static IEnumerable<Customer> GetLondoners(this IEnumerable<Customer> source)
Foreach (var c in source)
{
If (c.City == “London”) yield return c;
}
Allows you to insert extension methods into an instance (even if static)
New functionality on existing types
Scoped by using causes
Interfaces & constructed types
Lambda Expressions
Public static IEnumerable<T> Filter <T>(GetLondoners(this IEnumerable<T> source, Predicate>T> p)
foreach (var c in source)
{
If (p(c)) yield return c;
}
var query customers.Filter(delegate(Customer c) { return c.City == “London”; };
Terse syntax for anonymous methods:
var query customers.Filter(c =>{ c.City == “London”;});
*When you only have one thing left you can remove the parens
LINQ to Objects
var query = Customers
.Where( c=> c.City == “London”);
.Select ( c=> c.ContactName);
ObjectDumper.Write(query);
Monads – Look into this
Don’t use LINQ for *other magic* that is not a query
Expression Trees
Related to link
Expression(of)
Represents a lambda expression as an expression tree at runtime
ASP.NET MVC with Scott Hanselman
- Separation of Concerns!
- A new .NET project type
- Designed to be very easily testable with minimal need for mocking objects compared with other patterns
- Test with mbunit or integrated VS test system
- Uses three new namespaces:
- System.Web.Abstractions
- System.Web.Mvc;
- System.Web.Routing;
- "Bin-deployable" These new assemblies do not have to be installed in the GAC. Useful when you can't, or are afraid to, install them there.
- Flexible. Plays well with Winforms
- Fundamental to .NET from version 3.5 forward
- Demo of red-green TDD. This is really quite easy with MVC because of much improved separation of concerns when used properly
- JQuery and AJAX compatible
- Dove into the call stack for MVC at runtime, it's quite informative for understanding what's going on "under the covers". Have a look at the call stack of a running MVC app to get a good picture of what's going on.
- Discussion of Routing
- Provides for cleaner URLs and HTML
- Phil Haack (PM for MVC) is open to suggestions from the community and will be incorporating recommendations from developers as much as possible.
- "Strongly typed query strings"
- Much better than average runtime errors when something goes wrong. This is strange but true!
- Discussed Extension Methods, Lambda queries, and LINQ