Indianapolis, Indiana, United States
Dave Fancher is a lead software engineer at Vibenomics in Fishers, Indiana; a former Microsoft MVP for Visual Studio and Development Technologies; author of The Book of F#; and author of Functional Programming with C# and Building F# Type Providers on Pluralsight. He has been building software for nearly two decades with an emphasis on Microsoft technologies. Over the past several years he's focused much of his attention on functional programming. Most recently his efforts have been focused on Node.js development.
Dave is active within the software development community and has spoken at numerous events throughout the United States and England and has co-organized the Indy.Code() conference in Indianapolis, Indiana.
When not writing code or writing about code he enjoys spending time with his family, watching movies, and gaming on his Xbox One.
Since 2008 Bob Martin's seminal work "Clean Code" has been teaching developers a series of guidelines for writing maintainable code and improving software quality. While several of the guidelines such as naming conventions and comment style are highly subjective, the astute reader will notice that the remaining guidelines are actually quite objective. All too often, following the Clean Code guidelines is mostly a matter of developer discipline. Let's discuss how those objective guidelines improve code quality, how they often naturally arise when programming in a functional style, and how many functional languages actively enforce them thus eliminating the need to rely on discipline and naturally eliminate the complexities they address.
Delegation is at the heart of many of .NET's most powerful features including LINQ and the Task Parallel Library (TPL) but have you stopped to consider what delegates are or why they play such a prominent role in modern .NET development? In this session we'll go beyond the lambda expression and look at delegates from the bottom up. We'll explore what delegates are from the perspective of the .NET Framework, how generics enhance delegates, the role delegates play in functional programming, and we'll even look at a few ways to abuse, err, enhance the multicast delegate experience.
From multithreading to async/await, asynchronous programming is an important aspect of writing software that takes advantage of the underlying system resources. This talk takes a walk through the history of parallel and asynchronous programming in .NET starting with a basic synchronous process and tweaking that process to demonstrate traditional threading, the Asynchronous Programming Model (APM) approach with IAwaitResult, a variety of Task Parallel Library (TPL) examples, before wrapping up with some async/await examples. Along the way we'll talk about the pros and cons of each approach and show some of the common pitfalls common to all of them.