I will make you a better C# programmer (2017 functional edition)

Get better at what you do by spending three days focusing on C#/.NET fundamentals and functional techniques. C# and .NET are powerful, flexible and changing. The power and flexibility comes with a cost in complexity, and occasionally surprises. Changes open doors to new techniques to learn about. If you’re an intermediate or advanced C# developer, you’re ready to for this combination of fundamentals and theory, along with its practical application as you watch a sample application transform across the three days.

This year’s workshop includes applying functional techniques in C#. You’ll learn some theory, so you can explain the changes to your team. And you’ll see specific, pragmatic ways functional techniques improve your code.

Purity, referential integrity and removing side effects refer to removing all state dependencies, so that results are entirely predictable. Teamed with immutability, code becomes easier to trust, understand and test. Because you use LINQ, you use first-class and higher order functions, along with generics. You’ll see this extended to solve broader application problems. You’ll learn about pattern matching as a new control flow structure in C# 7 and see how it reduces code and makes it easier to understand.

Combining these ideas with isolation of technology from domain, results in a simple application infrastructure with most code moved into pure methods and declarative flows.

Of course all your code is not simple and neat! A valuable consequence is that simple code fades into common patterns allowing the complex code that needs your attention to stand out. Declarative refactoring makes this code much easier to understand.

You’ll also see why some techniques, such as lambda calculus and heavy use of recursion don’t make sense in C#.

The workshop also includes .NET fundamentals. You’ll take a deep dive into common .NET features like LINQ, puzzles on types and overloads, and how to achieve immutability. You’ll see the different roles asynchronous programming plays on the server and in desktop apps, along with right and wrong things to use async and await in C#. And you’ll also look at design issues such as how generic designs increase code reuse at the cost of coupling, when interfaces make sense, and the role of dependency injection.

It’s easy to postpone production and quality considerations while you’re writing your application. You’ll see testing strategies applied to the sample application. You’ll also see logging/tracing added and how to use this alongside the logging information that’s already provided by .NET and Entity Framework. And you’ll learn how to do light profiling and performance evaluation.

Most of the workshop is in the full .NET framework, but you’ll also see the final version of the sample application changed over to .NET Standard.

Applying these techniques to your application and team takes knowledge, understanding and leadership. In bits and pieces, to cleanse your palate between the deep dive sessions, you’ll spend some time on skills designed to make it easier for you to change your team’s coding style after the workshop.

This workshop teaches intermediate and advanced developers to leverage that power by using new, misunderstood and underutilized techniques. This workshop goes deep right where you need it. If you’re an intermediate or advanced C# developer, you’ll leave this workshop creating better C# code faster.

Kathleen Dollard

Kathleen Dollard

Kathleen loves to code and loves to talk about code. Along the way she’s been an architect, a manager, a teacher, a writer, a speaker, and hopefully still a fun person! She’s written tons of articles, a book (Code Generation in Microsoft .NET), and spoken at many conferences around the world. She’s the Director of Engineering at ROI Code, and has videos in both the Pluralsight and Wintellect libraries, including Visual Studio 2015 Playbook, .NET Puzzles, Gotchas & Cautionary Tales, and New Features in C# 6 and Visual Studio 2015.

Workshop Information Sheet