Resources

Books

I write books that help developers learn their tools thoroughly. I strongly believe that deep knowledge of the tools you use to create software will help you create better software.

I wrote Effective C#, now in its third edition. Click to see discussions, and see the errata list. If you do find any new errata, please reach out through my Contact page.

I also wrote More Effective C#. Click to see discussions, and see the errata. If you do find any new errata, please reach out through my Contact page.

Articles

I often write for different online properties. Here are links to my most recent publications:

Static usings and Better Betterness. InformIT.
Ninth (and final) of a series of articles discussing C# 6. In this last installment, I discusses new syntax for static methods that will really de-clutter your code, along with improved overload resolution that reduces ambiguity by helping the compiler to make better method-overload choices.
Await in Catch and Finally clauses. InformIT.
Eighth of a series of articles discussing C# 6. Did you think await was allowed everywhere in earlier versions of C#? You're not alone. Now that the keyword is available in catch and finally clauses, I show how to use the advantages await offers in exception-processing scenarios.
New Ways to Initialize Collections in C# 6. InformIT.
Seventh of a series of articles discussing C# 6. I shares the details of two enhancements in C# 6 for initializing collections, which read more naturally and bring associative containers into parity with sequence containers' initialization syntax.
Better Error Handling with the New Exception Filters in C# 6. InformIT.
Sixth of a series of articles discussing C# 6. The exception filters in C# 6 cut back on the cumbersome error-handling code commonplace to earlier releases. Of course, handling errors is part of the job, but new implementations in C# 6 can diminish the extra work.
The New nameof Expressions in C# 6: Painless Conversion of Symbols to Strings. InformIT.
Fifth of a series of articles discussing C# 6. Translating symbol names into text is common in modern code. The task isn't exactly odious, but it still takes time, it's tedious, and it's easy to make mistakes. I happily skip all that work with the help of the new nameof expression in C# 6.
A Pleasant New C# Syntax for String Interpolation. InformIT.
Fourth of a series of articles discussing C# 6. Does your C# code produce strings that combine text and computed values? The new features for string interpolation in C# 6 will make that code cleaner and clearer. I share my enthusiasm for this new feature's ability to let you do more with less.
C# 6: Using the new Null Conditional Operator. InformIT.
Third of a series of articles discussing C# 6. I show how to use the new null conditional operator in C# 6 to reduce code size, decrease bug counts, and make code more readable.
C# 6: Auto Property Enhancements. InformIT.
Second of a series of articles discussing C# 6. This article demonstrates how enhancements in auto properties make it easier to express your design intent. This modern syntax helps your code's design to be cleaner and clearer, with a much more concise syntax for read-only properties.
C# 6: Expression Bodied Members Simplify Your Code InformIT.
First of a series of articles discussing C# 6. This article discusses how to simplify your C# code with the precise syntax of expression bodied members, saving time, keystrokes, and overhead.
Automate your Development: Build Code Diagnostics and Code Fixes with the .NET Compiler APIs. InformIT.
An important feature of the API framework in the Visual Studio 2015 compiler is the capability to create your own diagnostic, code fix, and refactoring projects. I show how you can use these APIs to automate everyday tasks such as finding code that lacks enclosing braces - and then adding them automatically.
A Brief Tour of C# 6. InformIT.
Are you eager for the release of C# 6.0? I discuss a few of his favorite new features, including some that you probably thought were already in the code, and other pleasant surprises.
Power Up Your Large-Scale JavaScript Development with TypeScript InformIT.
I explore the TypeScript language, walking through a detailed example that shows how TypeScript complements JavaScript. Learn how to build modern code that's more productive and easier to maintain.

Videos

I've also produced videos that help developers learn important topics in C# development. As with books, this is an important way to learn more about the tools you use to build software.

Building Roslyn-Based Analyzers and Diagnostics

Join MVP and best-selling author Bill Wagner and Microsoft Principal Developer Evangelist Jennifer Marsman (named the "Techie whose innovation will have the biggest impact") for a demo-filled exploration of analyzers and code fixes. Examine nodes for poor practices, register fixes to correct mistakes, and learn to report errors and warnings with different levels of severity. Look at ways to express your designs in C#, and explore unit testing. Finally, hear about the different approaches to releasing your analyzer, including adding it to open source libraries.

Channel 9: What's new in C# 6

I sat down with Seth Juarez to go over the new and exciting features in C# 6. We had a great discussion while at ThatConference about the features you can use now.


ALM for Startups

This video discusses many of the tools and processes that can help young companies develop professional quality software, with the necessary process, but avoiding too much extra ceremony that isn't yet necessary for a young company.


Developer Productivity: What's new in C# 6

March 5th, Live Event. Microsoft Virtual Academy I'll be discussing new features in C# 6, along with Anthony Green. We'll go over what's new, and how using these features will help you become a more produtive developer. This event is live, but was recorded for later viewing.


The Async Fundamentals video highlights common misconceptions on async programming in C#. More importantly, it explains what you should do instead.

The C# Puzzlers video discusses many common misconceptions of how the language works. Try this 19 different puzzles and test your knowledge of C#. You will learn more about how your favorite language works by examining these different features.

You can download the examples from this video here.

Over the past few years, some of my conference talks have been recoreded and are available online:

Introduction to typescript
This was recorded at Self.Conference in May of 2014. Dedtroit, Michigan.
Async from the Inside and Outside
This was recorded at CodeMash in January of 2012. There are two hours of content featuring me and Jon Skeet.

Speaking

Here are links to my upcoming talks, and recent talks that I've given:

Upcoming Talks:

NDC London January 16 - 20, 2017

What were they thinking?
Language design choices that seem wrong, until they don't
Let's spend an hour exploring some of the most controversial language design choices in the C# language. We're going to explain why each of these decisions were made. We'll have some fun looking at where developers have concerns. We'll explain why the language teams made the decisions they made. You can attend and spend the rest of the time explaining why they were still wrong.

Exploring Pattern Matching in C#
Pattern Matching is one of the new features coming in C# 7. The ability to manage control flow using any property of an object will change how you write code. The new syntax enables new paradigms. In this session, we'll spend an hour looking at the syntax enabled by pattern matching. We'll start with the basics of the new syntax, and then dive deep into how it can be used and mis-used. When we've finished, you'll have great power at your fingertips. More importantly, you'll know how to use it responsibly.

Recent Talks:

Casco Bay .NET User Group October 13, 2016
NET All the things!
I presented on cross-platform .NET development using the tools and libraries available in .NET Core. You saw how to build applications using C# and .NET using MacOS or Linux distributions.
Vermont Code Camp September 17, 2016

NET All the things!
I presented on cross-platform .NET development using the tools and libraries available in .NET Core. You saw how to build applications using C# and .NET using MacOS or Linux distributions.

An introduction to C# 7
I provided an introduction to the new features coming in the next release of C# 7. Demos included Pattern Matching, Tuples, Local Functions, ref returns and more.

Tech-O-Rama May 3 - 4, 2016

Something C# 7 this way comes....
In Mechelen, I talked about the proposed features in the next release of C#. These include Improved Data Programming, Async Streams, Reliability, and MetaProgramming. It's based on early research, and it's a fun way to look at where the language will be going.

Into the Matrix: Using the Roslyn APIs to analyze and fix code... By writing more code.
I spoke on the topic of using the Roslyn APIs to analyze and fix common code practices.

Lansing Javascript April 19, 2016
I talked on creating Angular Applications using TypeScript focused on building Angular components and applications using the TypeScript Language.
MS Dev Montreal March 21, 2016
I talked about building Angular 2 applications with TypeScript. I used the latest public bits for both the language (v1.92) and the framework (Beta 11). It's a fun look at how we'll build web applications in the near future.
Casco Bay .NET User Group March 9, 2016
I discucces practices that promote the best and most effective use of the C# Language. These will be recommendations from the updates to my Effective C# books.
NDC London, 2016 January 11 - 15, 2016

Something C# 7 this way comes....
In London, I talked about the proposed features in the next release of C#. These include Improved Data Programming, Async Stream, Reliability, and MetaProgramming. It's based on early research, and it's a fun way to look at where the language will be going.

Into the Matrix: Using the Roslyn APIs to analyze and fix code... By writing more code.
I also spoke on the topic of using the Roslyn APIs to analyze and fix common code practices.

CodeMash 2016 January 5 - 8, 2016
My CodeMash talk on creating Angular Applications using TypeScript focused on building Angular components and applications using the TypeScript Language.
SEMJS December 14, 2015
I talked about building Angular aplications with TypeScript. We'll explore both Angular 1.x, TypeScript 1.x, and the road to the 2.0 releases of both TypeScript and Angular.
Boston Code Camp November 21, 2015 Microsoft New England (NERD)
My talk is "Into the Matrix: Fixing code.....By Writing more Code." I explained how you can use the Roslyn APIs to provide tools that enfoce the practices that are specific to your team. I built Analyzers as a NuGet package, that you can install as part of a project, to ensure that all new developers follow the best practices. I also participated in a panel discussion on the current and future directions for SPA development. I enjoy going to Boston, and I had a wonderful Boston Code Camp.