Bill Blogs in C# -- upcoming attractions

Bill Blogs in C# -- upcoming attractions

Created: 11/3/2016 6:59:06 PM

I’m quite thrilled to announce that I’ll be speaking at NDC London this coming January. I’ve got two talks, one very practical, and one a fun technical exploration.


First, there’s a Deep Dive into C# Pattern Matching. Pattern Matching in C# 7 will change the way you code in C#. Your gaining powerful new tools for many different idioms. In this session, I’ll explain why this feature was added. You’ll see lots of examples of different types of patterns you can work with, and we’ll discuss some of the initial guidance for using these features.

Second, there’s a discussion and critique on different language features. I’ll discuss the thinking behind some of the features that initially appear counter-intuitive. I’ll explain the thinking behind the decisions, and why these decisions were made. You’ll have plenty of time to provide counter arguments and why these features still provide you with fits.

Overall, the NDC events are some of my favorites. The attendees are some of the most knowledgeable people at any conference. They have deep knowledge of their chosen platform, and strong knowledge of software development in general. Every speaker I know considers deeper talks for NDC than many other conferences. It’s a fantastic learning opportunity, and I highly recommend it.

Visit the NDC site (link above) and explore the entire program. You’ll see why I’m very honored to be included in the program. I hope to see you there.

Created: 2/2/2015 4:59:35 PM

I’m teaming up with Grand Circus to deliver another .NET developer bootcamp this Spring. This bootcamp will teach the core skills necessary to build modern web applications using ASP.NET and the core .NET framework.

For most of my regular readers, this bootcamp is probably too introductory for you. It does not assume that your have any prior knowledge of C#, or ASP.NET. We start at the beginning, and move as fast as possible to learn the core skills needed.

However, if any of you have friends or associates that are interested in making a career change and learning to be a developer, this is a great way to start. During the 8 weeks, students learn the core skills needed to make that transition. In addition, Grand Circus will be providing placement assistance to help students land that first developer position.

If anyone you know wants to become a developer, and be part of Detroit’s Renaissance, tell them to sign up here. We had great success with the first bootcamp (over 80% of those students have landed developer jobs), and I’m anticipating the same outcome this time.

Created: 4/10/2014 12:54:59 PM

I’m glad that I was selected to speak at self.conference, coming to Detroit this May. 

The speakers and sessions are a strong mix of the technical community in this area. In addition to quite a few local speakers, other super smart folks from the midwest are apeaking.

I’ll be speaking about TypeScript, introducing web developers to this new language. I really enjoy working with TypeScript. It’s very much like working with JavaScript, except that I feel much more productive. I get more done in much less time.

I also want to point out Tony Surma’s talk on “Apps that work when nothing else does.” Tony is a fellow board member for Humanitarian Toolbox, a charitable organization that creates Open Source applications for disaster relief. I’m the president and a board member as well. We’d love to have your help developing these applications. And, as you’ll learn from Tony’s talk, there’s a lot of software product skills you’ll learn developing apps that have to run in a disaster zone.

Self.Conference promises to be a great, great event. Go to and register today.  See you in May.

Created: 3/3/2014 3:21:46 PM

I’m excited to be speaking at DevIntersection in Orlando next month. I’ve got three different talks at this conference.

One for the current wave of tools you already have:

Navigating large codebases using Visual Studio 2013

Visual Studio 2013 adds many new features that can help you learn and explore large codebases. That's important now because more of our time is spent integrating open source libraries and working on long-lived and large codebases. In this session, we'll explore a popular Open Source library using these new features. You'll learn techniques that will take you from confused n00b to experienced ninja in less time than ever before.

There’s one for the wave of technology that’s being released:

Getting Started with Visual Studio Online

The Visual Studio Online services provides a single point for managing source, project data, team collaboration, and deployment information about your project. This session provides an overview of how you can use these tools to manage personal projects with the same tools and processes you use for your professional work. Best of all, it's at a much lower price than many competitive tools.

And, there’s one that’s more forward looking:

An Introduction to the Roslyn APIs

The next version of C# and VB will be built on Roslyn, a new set of APIs that you can use to explore and modify the code in your applications. In this session, you'll learn about the Roslyn architecture and what you can do with Roslyn extensions. You'll learn the basics of a new world where you can explore and modify your code programmatically.

Overall, there are more than 200 great sessions from the industry leaders and experts you’ve come to rely on.

In addition to the regular sessions, there are pre-conference and post-conference workshops you can attend.  And, if you include at least one workshop in your registration, you get your choice of a free Surface 2, or XBOX ONE.


Created: 1/22/2014 7:20:35 PM

Today, I’m formally launching my new venture to help companies grow and retain software talent. I’ve spent the last 15 years growing the talent pool at SRT Solutions, the firm I sold last August. I know first hand the challenge of hiring and retaining software developers. I also know the investment needed to grow talent, and ensure that developers always have the skills that are needed for modern application development.

The classes I’ve developed are on the same topics where I mentored the great developers at SRT Solutions: C#, LINQ, ASP.NET web development, and Lean Development Practices. The material leverages successful talks and seminars I’ve given at national and international conferences. And, of course, some of the material comes from my Effective C# books. You can see the full list, and the current course catalog here.

I’m limiting the class size to 20 people so that I can spend enough time with each attendee throughout the course. I’m also teaching all the courses myself. I’m not licensing the material to others, or hiring other instructors. Every class will be taught by me personally.

If your organization could benefit, please let me know.

Created: 10/22/2013 6:20:15 PM

I'll be at DevIntersection / AngleBrackets next week. If you're going, I hope to see you there.

I'll be giving three different sessions:

Monday at 3:45: Modern C#

Too often, we teach C# by explaining features version-by-version. That practice leads developers to believe that they should prefer the C# practices we used at the turn of the millennium. It's time to teach C# 5 without taking students on a journey of the idioms we used in all previous versions. Instead, this would teach the language from the perspective of C# 5, and leveraging the idioms we use today throughout the material. Encourage developers to follow the practices we use now, for the reasons we use them now. Encourage your peers to leverage the best of modern C# instead of reaching for the classic answers.

Tuesday at noon: If TypeScript is the answer, what was the question?

Typescript promises to bring C# developers to the world of client JavaScript. But what about existing JavaScript developers? What about existing JavaScript libraries? In this session, we'll look at what Typescript adds to JavaScript, and how to integrate Typescript into the right places in your development, without forcing it into areas where plain vanilla JavaScript is the correct answer.

Tuesday at 2:15: LINQ in Practice

LINQ idioms can be used to write more readable code for many everyday problems. Yet many developers reach for the familiar imperative idioms instead. This session shows developers how to recognize common practices where LINQ would create more readable, maintainable, and extendable code. You'll learn to recognize imperative code smells and replace those with LINQ queries.  You'll learn to write those queries in ways that help other developers understand and leverage the LINQ queries you've created.

I'm excited about all three of them. It's a good mix of super new unreleased technology, new technology, and everyday practices that could be improved.

But wait, there's more. When I'm not speaking, I'll be writing code at the Humanitarian Toolbox Hackathon. We've made quite a bit of progress on a few different apps since last Spring when we held our first hackathon at DevIntersection. In fact, our first app is almost ready for trials with relief organizations. If you're at DevIntersection, take some time between sessions and stop by. Write some code for an open source project that will have a positive impact on the lives of people affected by natural disasters. Contribute, and learn something.

Oh, and we may have some surprise guests stop by during the hackathon.

If you haven't registered yet, there's still time. The conferences are co-located, so you can register for either Angle Brackets , or DevIntersection. You can attend sessions listed under either conference, and attend the hackathon as well.

I hope to see you there.

Created: 10/14/2013 1:15:33 PM

This coming Saturday, October 19th, I’ll be at Boston Code Camp 20. I’ve got two talks:  Practical LINQ in the morning, and The Task Asynchronous Programming Model in the late afternoon.

This will be the first time I’ve spoken at the Boston Code Camp, and I’m looking forward to meeting developers in the New England community. I’m spending more time on the East Coast now and I’d like to become more involved with that community.

Between my sessions, I’ll be splitting time between web sessions and Windows 8 sessions.  There’s a great set of content on both topics, and it will be a good chance for me to pick up some knowledge on both of these areas.

I hope to see you there.

Created: 1/7/2013 7:48:28 PM
We’ve partnered with Microsoft to host “Windows 8 Unleashed” in Ann Arbor on Thursday January 24th. This is a free event, sponsored by Microsoft, and hosted by SRT Solutions. Windows 8 Unleashed is a developer event focused on people that want to develop apps for the Windows store. (Surely you’ve seen the commercials for Windows 8 by now). The format contains 3 sessions where Jennifer Marsman and I will be explaining the principles of Modern UI Application development (what we formerly referred to as “Metro style apps”).  The afternoon is open lab time for you to create your Windows Store Application.  Jennifer and I (along with a few possible unannounced guests) will be available to help you over the rough spots. The first link above provide information about the event (including prize opportunities, and who doesn’t like free stuff). The second link is the registration page. Registration is free, but it will help us ensure we have enough room, and food for everyone that attends.
Created: 1/3/2012 1:34:07 PM

For most people, the holiday season is over, but here, where Michigan and Ohio meet, there is one more major event:  CodeMash.

I have not yet figured out my entire schedule, but there’s a few things I plan to concentrate on.  I need to learn more about WinRT. I’ve had too little time to build samples and learn about it yet. I want to learn more about Scala, an exciting functional style language that runs on the JVM. Beyond those specific goals, I want to learn about techniques I can apply across any platform. I don’t believe I’ve learned as much as I can about modern software engineering techniques: testing, continuous improvement, advances in languages, frameworks, and libraries. I want to spend as much time as possible in sessions that are not platform specific, or language specific.

I am giving two different talks this year.  Early Friday afternoon, I have “C# Stunt Coding: I Dare You to Try This at Home” This is a really fun talk to give. I get to start by saying that all the techniques I’m explaining are for edge cases, and specific problems, so chances are you will rarely want to use them in your everyday coding activities. Of course, that means everyone will pay careful attention, and immediately try everything I show the very next day. There’s no avoiding it. Developers just think that way. That makes it more fun.

Spoiler Alert

Ok, not really.

The other talk I have is “Async From the Outside”, where I discuss how the new async programming model in C# 5 introduces new ways to to make async programming easier.  You may have noticed that the abstract for Async From the Outside references the talk “Async From the Inside”, given by Jon Skeet, author of the very popular and respected “C# In Depth”. If you look at the abstract for Async from the Inside, you’ll see it references Async From the Outside.

There’s a few more items you should notice about these two talks:

  • They are in the same room
  • The second (inside) immediately follows the first (outside)

You may be thinking that it would be better to mash these two talks together, giving attendees two hours of async inside and out.

Well, Jon and I thought the same thing. We’re working together on a single stream of content, with both of us working together for the duration of the two talks. We’ll discuss how to use a feature, how it’s implemented, and how to use it in your regular development activities.

Well CodeMash fans, this will be the first time Jon and I have met in person. We’ve emailed, chatted, skyped, google talked, and been on .NET Rocks together, but we’ve never yet met in person. I’m looking forward to it. Jon and I are working quite diligently to make sure we deliver quality content. 

Jon also has his own individual talk to give: C#’s Greatest Mistakes. I’m really looking forward to that one as well.  Jon has shared some of the content with me. He’s one of a very small set of people that can give a talk like this, and make it a great talk for people to learn, not a screed. It’s one of Jon’s best qualities: the skill to be critical, yet positive.

Jon has written a similar post on CodeMash.

Created: 10/20/2011 6:31:39 PM

First, let me preface this by saying I’m truly amazed at the quality and quantity of of submissions.  I’m not on the speaker selection committee, so I don’t see all the abstracts. Several colleagues whom I greatly respect have shared their talk ideas.  There were simply more great talks than they were slots.  I can’t imagine a harder task than being part of the CodeMash speaker selection committee It’s especially hard because there are so many different technologies represented.

That said, I’m super thrilled to have made the list for 2012.  I’ve actually got two talks, and I’m excited to deliver both of them.

The first is C# Stunt Coding: I dare you to try this at home. In this talk, I get to stretch the C# language in ways you don’t expect.  I’ll show techniques to do things you don’t think C# can do. Every technique will come with the warning that it’s one of those techniques that you should only apply in rare situations.  Knowing most C# developers and CodeMash attendees, that will only make you want to use them more.

The second is Async from the Outside. This talk will discuss how the async and await keywords will change the way you code in C#. I’ll discuss the async features, and go over coding practices you should adopt to make sure that you’re making the most use of these new tools.  You may have heard that async APIs are much more prominent in the WinRT library. That’s true, and that’s why many of the demos here will be designed for the Windows 8 Metro platform. People interested in the inner workings of the async details should attend Async from the Inside given by Jon Skeet.

Created: 9/13/2011 8:22:10 PM

Steven Sinofsky discusses the changing world of computing. Form factors and user interaction models change how programs should work. I’m gad that’s at the core of Windows 8 design. In addition, Mobility now means devices that you use while carrying, not just devices you carry and then use. They have clearly been spending a lot of time determining what’s important to users now.

“Touch first, but still comfortable with a mouse and keyboard” is a great way to describe this important design considerations.  Historically, Windows had always been Mouse + Keyboard, and maybe touch. That message changes the design goals, and should provide better end user experience.

Observations on Julie Larson Green’s demo

That customized password design is great for new form factors. Good idea. It’s also going to be a great way to provide security.

The start page is a great idea, However, I’m concerned that what they’ve done is optimize for a very cluttered start screen. My opinion is that a better UX would be to optimize for a smaller number of tiles, and encourage users to have fewer tiles.

The IE demo shows some of the system level features to leverage for applications: the semantic clipboard sharing, the smart sharing. and the system-wide spell checking.  

The best design change for Windows 8 is that the focus is on the application, not on the system (or the system chrome). That really catches the changing face of computing. The second big change is that the system should be an ecosystem (web) of apps connected to each other, and the cloud.

And on to Building applications. The big picture seems to say this to me:

  • All the managed languages are in.
  • XAML based UIs are in.
  • So is HTML5 / Javascript.
  • The CLR/BCL seems to move into something now called ‘WinRT’.
  • The runtime is surfaced to all clients, including Java script in the browser (at least IE).

There are open questions:

  • Does WinRT contain the superset of the BCL APIs and the native C++ library? Or what?
  • How many APIs are moving forward? And in what timeframe?
  • What will the performance implications be for the managed languages with respect to C++?

The tools are moving forward in quite a few ways.  VS11 will have support for the HTML/JS development.  Expression Blend gains support for laying out HTML layout by introspection on the DOM.

Great discussion of the different hardware that Windows 8 runs on.  The key take away for the non-hardware nerd:  The OS is optimized for the hardware its running on. It will expose everything in place.

And of course, every Build attendee gets the developer preview tablet.

Sinofsky shows great demos of setup/refresh/and other system tools.  Once again, some really good design into making this a professional system that is somewhat accessible to the average use.

Next, he’s showing a lot of the multi-monitor support and power user synchronization.  There’s a lot for serious power users and developers.  Also, luckily, it doesn’t surface unless you want it.

Windows live synchronization. The big picture here is that it really does show the “Three screens and a cloud” message at its fruition.

There’s a lot of questions.  I am hoping to get some information on these areas over the rest of the week:

  • How much control does an app have over sharing? This could be a security risk.
  • How easy is it to create an app that runs well in both Metro style and desktop style?
  • How much of the existing APIs are going to be surfaced in the Windows Runtime (WinRT)?
  • F# wasn’t mentioned on the developer tools slide.  Is that an oversight? (I think so.  Don Syme is speaking at Build)
  • How do my apps participate in the Sync PC Settings?

For more of my immediate thoughts, check out my twitter stream from today.

Final Thoughts

Overall, I’m very impressed. Windows 8 clearly is an ambitious redesign of the Windows system. It’s as big a change as the change from Windows 3.1 to Windows 95. It clearly reflects a lot of thought on how people do use computers today, and how they want to use computers.

Created: 7/11/2011 2:47:06 PM

I interrupt my normal tech content for an event announcement.

I’m happy to announce that Paul Sheriff is coming to Ann Arbor to teach his one day “Zero to Silverlight” training. The event will be held on Tuesday, August 30th, at SPARK Central in Ann Arbor. Paul is a recognized leader in the Silverlight and Windows Phone communities.

You can learn more about the event here.  You can register here. (Early bird discounts are available until July 31).

I hope to see you there.

Created: 6/9/2011 3:56:26 PM

Last week, Microsoft took the wraps off the new Windows 8 shell. Predictably, the internet has been filled with opinions and predictions.  I may as well add mine.

What we saw

I am very impressed with the new UI, the immersive nature of Metro style apps, the consistency between the phone and desktop UIs, all of it. There are three arguments in favor of the new presentation model:

It’s time: While there have been several improvements and refinements over time, the current shell is fundamentally similar to Windows 95. Revolutionary in its day, that was 15 years ago. Desktops were more prevalent that laptops. Tablets were primarily a research toy, not a production device. The term “Smart Phone” didn’t exist. The idea of connecting a TV to the internet made no sense.

Consumers (whether for business or personal use) have very different expectations than they did back then.

Consistency: Consistent user experience is very important. It enables users to leverage what they’ve learned in one application (or device) and apply it to new experiences. That doesn’t necessarily mean having identical experiences everywhere, but it does mean having a consistent experience everywhere.

Consumers want to leverage the same skills whether they are using a phone, tablet, desktop/laptop, surface, or TV screen.

But not identical: Having said that, I don’t see myself using a phone, a tablet, or my TV as my primary developer machine. The laptop is a much better choice. I want to type; I want a larger screen. I may even open a command shell. That means even though consistency is important, maybe even critical, respecting some differences that enables each device to utilize its own features best is also important.

The experience must enable applications (or apps) to leverage the particular capabilities of the device the user has right now.

Is this the right experience? Based on what I’ve seen so far, yes it is. It maximizes the screen real estate for an application, while minimizing the OS chrome of years gone by. It respects that fact that users will have several apps running, but will likely be giving one app the major focus.

Speculation for Developers

I’ve said nothing about the developer story. I really don’t know. You’ve undoubtedly heard discussions around C++ (or WinC++), and HTML5/JavaScript. Those technologies make sense, for different reasons.

C++ still has a larger developer community that any other programming language on the planet. With so much emphasis on .NET and managed code, the market seemed to forget that Microsoft has one of the major C++ compilers, and produces many familiar windows applications.

HTML5 and JavaScript are the hot new technologies, and are receiving tremendous buzz. Microsoft cannot ignore them, and it’s smart to announce support for them in the next version of Windows as early as possible.

It’s hard not to speculate and extrapolate on what those announcements mean. I want to defer that, because we really don’t know. But, I’ve been asked too many questions. What follows is pure opinion.

Personally, I don’t believe that .NET, C#, VB.NET, or managed code are going away, losing support, or even being pushed to the back seat. Those communities are too big, and they all have too many options to migrate if they do really feel that Microsoft abandoned them.

I didn’t mention Silverlight or WPF, because my opinion is that they will change. The new Metro-based shell is very different than the current Windows shell. It’s got different capabilities, different features, and will require different APIs. It’s reasonable to think that a new library for that new shell will look different. It’s a naming decision if it’s a new version of Silverlight, or WPF, or a new XAML based library. I do believe there will be a managed library that will enable developers to target the new shell on Windows 8.

I headed this section "Speculation” because these are my own opinions. I’ve heard nothing under NDA about the developer story around Windows 8. A search for “Microsoft” and the codename “Jupiter” gives you some of the resources for my thoughts.

Until there’s more announcements, that’s all we have. I expect to learn more at the Build Windows conference.

Created: 5/12/2011 3:47:01 PM

I’m thrilled to announce another event in the SRT Software Development Series.

Paul Sheriff, a fellow Regional Director, and author of an immense amount of developer content, is coming to Ann Arbor for a one day class on Silverlight. “From Zero to Silverlight” teaches developers the fundamentals of Silverlight, and gets them started on the road to being highly productive Silverlight developers.

This class will be held on June 7th, at SPARK Central, just a block from SRT Solutions.

If you’re interested in becoming a better Silverlight developer, or you’re interested in being a Silverlight developer, you need to attend this class. Learn more, and sign up here.

Created: 5/5/2011 2:44:51 PM

On Friday May 27th, we’re hosting Richard Hale Shaw for two new seminars: “Habits of Successful Software Developers”, and “On Time and Under Budget: How to Stop Missing – and Start Meeting – Software Project Deadlines.”

Richard has been a good friend, colleague, and mentor for a long time. I’ve learned a lot from him over the years. He was a driving force behind the growth in Ann Arbor’s software development community, founded the Ann Arbor Computer Society, and helped many of us advance and accept new challenges. (He helped me get my first two writing contracts, including my first recurring column.)

I have always respected his opinions and I’m thrilled to see him taking on software engineering and development process topics in this new seminars. These seminars will make you a better developers, regardless of the technology stack, programming language, or platform you choose.

From the conversations I’ve had with Richard, I’m convinced these seminars will help every developer do their job better. We’re happy to host Richard, and grateful that he’s coming back to Ann Arbor to do these seminars.

For more information, and to register, click here.

Current Projects

I create content for .NET Core. My work appears in the .NET Core documentation site. I'm primarily responsible for the section that will help you learn C#.

All of these projects are Open Source (using the Creative Commons license for content, and the MIT license for code). If you would like to contribute, visit our GitHub Repository. Or, if you have questions, comments, or ideas for improvement, please create an issue for us.

I'm also the president of Humanitarian Toolbox. We build Open Source software that supports Humanitarian Disaster Relief efforts. We'd appreciate any help you can give to our projects. Look at our GitHub home page to see a list of our current projects. See what interests you, and dive in.

Or, if you have a group of volunteers, talk to us about hosting a codeathon event.