Tuesday, July 2, 2013

New Pluralsight Course: C# Interfaces

As mentioned about six weeks ago, I've been working on a course for Pluralsight.  I'm happy to announce that the course is now available.

C# Interfaces
Do you want code that's maintainable, extensible, and easily testable?  If so, then C# interfaces are here to help. In this course, we’ll take a look at how we can use interfaces effectively in our code. We'll start at the beginning ("What are interfaces?") and then explore why we want to use them. Along the way we'll create and implement own interfaces, see how to explicitly implement interfaces, and take a look at dynamic loading, unit testing, and dependency injection. All of which is made possible with interfaces.
Check out the course for yourself at Pluralsight: C# Interfaces.

Happy Coding!

Monday, June 3, 2013

June & July 2013 Speaking Engagements

I have a few speaking engagements scheduled for June and July.  As always, if you'd like me to visit your user group, feel free to drop me a line or request me through INETA.

Tuesday, June 11, 2013
Inland Empire .NET Users Group
San Bernardino, CA
http://www.iedotnetug.org/
Topic: Dependency Injection: A Practical Introduction

I continue to get positive feedback from my Dependency Injection talk.  As I've mentioned before, it's one of my favorite topics.  And I really enjoy making a seemingly complex topic easy to understand.  Most of the technologies that we deal with aren't that complicated.  Once we understand the underlying principles, then all of the "magic" goes away, and we're left with useful tools in our collection.

Monday, July 1, 2013
Los Angeles .NET Developers Group
Los Angeles, CA
http://www.meetup.com/LADOTNET/
Topic: Clean Code: Homicidal Maniacs Read Code, Too!

I've become a huge Clean Code advocate recently.  There are some very simple things that we can do to make sure that our code is readable and understandable by the next developers who have to take care of it.  We'll look at some bad examples (horrible examples, actually) and see what needs to be fixed.  We'll spend most of our time refactoring actual code -- and this code isn't horrible.  It's good code that we can make even better.  The code becomes more approachable and easier to maintain.  And it doesn't take that much effort, just some consideration.

Saturday/Sunday, July 27-28, 2013
So Cal Code Camp
San Diego, CA
http://www.socalcodecamp.com/
Topics:
o Clean Code: Homicidal Maniacs Read Code, Too!
o Dependency Injection: A Practical Introduction
o Learn the Lingo: Design Patterns
o T, Earl Grey, Hot: Generics in .NET

I'm a big fan of Code Camps.  The So Cal Code Camps hold a special place for me since that's where I got started as a speaker.  It's my opinion that all developers have something good to share -- we all have unique experiences and should share them with others.  So, think about becoming a speaker.  It's awesome to be able to help other developers.  If you need some tips, be sure to check out this article: Meet the Next Code Camp Speaker: You!

Hope to see you at an event soon.

Happy Coding!

Friday, May 17, 2013

Coming Soon: Jeremy on Pluralsight

I am happy to announce that I've been commissioned to produce a course for Pluralsight (http://www.pluralsight.com).

If you're not familiar with Pluralsight, be sure to check it out.  They offer high-quality video training by experts in the field.  There's a 10-day free trial so you can get a taste for what it's like.  And they have a number of free courses, including "Teaching Kids Programming with C#" by Lynn Langit and Llewellyn Falco.

My first experience with Pluralsight was when I needed to get up to speed on ASP.NET MVC (way back in the version 1 days).  Their course gave me exactly what I was looking for: I came away with a good understanding of the technology and its capabilities.  It turned out that my particular scenario fit the technology perfectly, and I went on to create a mobile-friendly web application with ASP.NET MVC.

That was several years ago.  Since then, the catalog has been constantly expanding.  There's lots of good stuff to check out.

And don't worry, I'll be sure to announce when my first course is available.

Happy Coding!

Wednesday, May 8, 2013

Screencast: C# Properties

A couple of weeks ago, I talked a bit about properties: Explained: Properties in .NET.  Since this sample has a lot of clicking and navigating, it's a good candidate for a screencast.

So, if you'd like to see how to navigate around in ILDASM (and also see Visual Studio code snippets in action), you can check out the video posted on YouTube: http://www.youtube.com/watch?v=v_BXErPuksA.

Happy Coding!

Monday, May 6, 2013

Prism for Windows Runtime (formerly Kona)

Kona, the guidance package from Microsoft Patterns & Practices for writing Windows App Store LOB apps (previously mentioned here: Application Guidance Update: Kona and Prism), has a new name: Prism for Windows Runtime.

Here are some relevant links.

Download from CodePlex:
http://prismwindowsruntime.codeplex.com/

A "Getting Started" article from Brian Noyes:
http://www.silverlightshow.net/items/Windows-Store-LOB-Apps-with-Kona-Getting-Started.aspx

As a reminder, Prism for Windows Runtime and Prism 4 (for WPF and Silverlight) are different packages with different capabilities. As mentioned in previous article, this is primarily due to the differences in the underlying platforms and what makes sense in each environment.

If you build Line of Business applications, and you're moving into the Windows App Store world, it's worth checking out.

Happy Coding!

Sunday, May 5, 2013

Book Review: Don't Make Me Think

I'm still powering through my Reading List for this year.  I recently finished Don't Make Me Think: A Common Sense Approach to Web Usability by Steve Krug (Amazon Link).  The second edition of this book (the one I read) was published in 2006 and is in its 13th printing, so it's been around a while.  But it has stood up to the test of time.

Krug is a usability consultant -- his job is to set up user testing of web sites and report the findings.  This book helps you do the bulk of this work yourself.  As Krug would say, it isn't a replacement for a usability professional, but most of us won't spend the money on one.  This book shows that you don't need to be a professional to get useful results out of user testing.

This is a purposefully short book (under 200 pages with lots of diagrams and pictures).  So, I won't go into too many details.  But I'll point out one or two things that I found particularly useful.

Usable Web Sites
Don't Make Me Think focuses on how to create usable web sites (note: web sites, not web applications).  With that said, you can get a lot just from the chapter titles.  Here are the first 7 chapters:
  • Don't make me think! - Krug's First Law of Usability
  • How we really use the Web - Scanning, satisficing, and mudding through
  • Billboard Design 101 - Designing pages for scanning, not reading
  • Animal, vegetable, or mineral? - Why users like mindless choices
  • Omit needless words - The art of not writing for the Web
  • Street signs and Breadcrumbs
  • The first step in recovery is admitting that the Home Page is beyond your control
This book is purposefully short and has plenty of real-world examples of web pages, how the companies have improved the pages over time, and how Krug would continue that improvement.  This is not a "let's laugh at bad web pages" book; which is good.  A lot of us know what not to do.  Where we need help is in doing it right.

Krug's Laws of Usability
In addition to the chapter titles, we get Krug's Laws:
  • Don't make me think!
  • It doesn't matter how many times I have to click, as long as each click is a mindless, unambiguous choice.
  • Get rid of half of the words on each page, then get rid of half of what's left.
These seem pretty basic.  But I have to admit that this is not the way that I've approached web design (which I'll be the first to admit isn't the greatest).

Krug bases these laws on how people actually use the web.  People don't stop to read every word on a page.  They usually go to a site for a specific purpose (such as to find the address of a store location).  They don't care about the "fluff".  They don't really care about the welcome message.  They are scanning the home page looking for a link that looks like it's "close enough."

If we keep this in mind, the laws make perfect sense.  We want information on our web site to be clearly available and for links to be as obvious as possible.

Usability as Common Courtesy
Chapter 10 talks about the Reservoir of Good Will.  This reservoir can be diminished when the user has trouble finding information, or it can be refilled by easily giving him just what he is looking for.  If the reservoir is depleted, then the user simply abandons the site.

I never thought about usability in this fashion before.  But I've noticed in the last week or so that this is exactly how I use web sites.  For example, I was looking for the hours of the local e-waste drop off location (I knew where the location was, just not when they were open).

I did a couple of web searches but didn't find what I was looking for.  Then I went to my municipality's web site and still had a bit of difficulty finding what I was looking for.  I finally stumbled across the listing of the drop-off locations, but I didn't see any hours listed.  I ended up loading up the car and heading over there only to see a "Closed Mondays" sign on the gate (and guess what day it was?).  I went back to the site later and found the hours buried in a block of text (9 am - 3 pm Tuesday through Saturday).

Krug gives a list of things that can diminish the reservoir, including hiding information that I really want or asking for information that you don't really need (do you really need my phone number to sign me up for an email newsletter?).

Conversely, there are a number of things that help to refill the reservoir such as tell me what I want to know and save me steps wherever you can.

Wrap Up
I would recommend Don't Make Me Think to anyone with a web site.  It will make you stop and think about how people actually use your site.  The examples focus on e-commerce sites (simply for consistency), but the principles apply to whatever web site you may have.  Keep the user in mind, and don't make him think.

Happy Coding!

Thursday, May 2, 2013

May 2013 Speaking Engagements

I've got two speaking engagements currently scheduled for May.  If you're in the area, be sure to stop by.

Wednesday, May 8, 2013
vNext OC
http://www.meetup.com/vNext-OrangeCounty/
Newport Beach, CA
Topic: IEnumerable, ISaveable, IDontGetIt: Understanding .NET Interfaces

When we use abstraction judiciously, we end up with extensible, maintainable, and testable code.  And interfaces are an important way that we can add abstraction to our code.  As with most of my presentations, we focus on applying these concepts in our code, both by using existing interfaces from the .NET framework and by creating our own interfaces.  Along the way, we find that interfaces aren't that complicated and give us some tangible benefits.

Tuesday, May 28, 2013
San Diego .NET User Group
http://www.sandiegodotnet.com/
San Diego, CA
Topic: Dependency Injection: A Practical Introduction

I have a great time presenting on Dependency Injection -- mostly because I can see the light bulbs go on as we go through the samples.  DI seems like an advanced topic, but the concepts are pretty straight forward.    There are tons of techniques, patterns, and tools.  This session covers the basics and will give you a desire to learn more.

Happy Coding!