Inside F#

Brian's thoughts on F# and .NET

Archive for July, 2010

Self-assessment – what have YOU learned lately?

Posted by Brian on July 7, 2010

I recently reading this blog (about a person who will use a different programming language each day of the week), and thought: wow, I have pretty much only used two languages (F# and C#) in the last couple years.  Does that mean I’ve been getting complacent/stagnant for technical skills, and I need to spend more time sharpening the saw?  But then I did a quick review of the past six months, and I discovered that I have in fact learned a bit – there’s more to technical skills than just programming languages, of course.  Today I shall commemorate some of the new stuff I have learned in 2010, “Achievement”-style (a la XBox achievements or StackOverflow badges).

Achievement unlocked: Inline MSBuild tasks


I wrote my first inline MSBuild task.  MSBuild 4.0 enables you to write “inline tasks” directly in the project file, using a subset of C# and .NET.  At work I needed to do some custom validation that would cause a build error (with a useful diagnostic) if certain constraints were not met.  So I read up on inline MSBuild tasks and created one to do my custom validation, and it works great!  MSBuild is a “programming language” when viewed through the right lens, but it’s one that I (like most who use it) have been learning opportunistically on an (infrequent) as-needed basis.  But MSBuild is pretty powerful, and inline tasks are a useful tool to have in one’s tool cabinet.

Achievement unlocked: DGML graphs


I have used the new DGML support in VS2010 for a few different things already this year.  You saw one already in this blog.  At work, I made a graph to visualize our build system for F# (all the assemblies we have, and their dependencies) to help me visualize how to speed up and parallelize the build.  I “hand authored” some graphs as pictures/figures in a short report I did on a prototyping project at work.  And I also did a link graph of my blog entries (mostly for fun to play around with DGML).  If I need to draw a directed graph, either by hand or programmatically, I know a useful little tool to do it!

Achievement unlocked: VSIX


The new VS2010 Extension Manager makes it easy to install and uninstall VSIX extensions.  I mentioned extensions in a previous blog; if you haven’t already visited the Visual Studio Gallery, you should check it out now!  As I mentioned in another blog post, I authored by own VSIX extension to add Solution Explorer support for creating signature files.  It was lame and buggy, so I didn’t publish it, but I learned all the details of creating and publishing Visual Studio extensions, so I am prepared for when I have a good idea with a good implementation.  :)

Achievement unlocked: Screencasts


I had been thinking about creating screencasts for forever, but only this year did I finally “just do it”.  Hopefully you’ve already seen some of my screencasts: there are currently 4 of them available in the “F# and the VS2010 IDE” section here.  I discovered that the free Microsoft Expression Encoder 3 product makes it straightforward to record screencasts.  (From the technology standpoint, anyway – I still spend many hours on each screencasts, designing the content & examples and then ‘shooting’ many ‘takes’ for each segment until I get it right.)  I work on the Visual Studio tooling for F#, so I enjoy making these screencasts as a way to show off the various productivity features in the product.

Achievement unlocked: Silverlight


I had never done Silverlight stuff until this year, when I started small but eventually learned enough Silverlight and WPF to write a fun online game.  I’m amazed how easy Silverlight is, I can carry over all my general desktop programming skills to web apps.

Future Achievements?

There are a few achievements I would like to get later this year, if I can find the right combination of time/motivation/use-case:

  • Pex: check out Pex for Fun to get a sense of what the Pex code analysis tools can do.  I’d like to leverage this more for static analysis and testing
  • Code Contracts: even though I haven’t used them yet, I can’t help but wonder if, looking back, these will turn out to be the most important tool of 2010.  Check out this video to get a sense – the vision here is awesome, and I hope that in practice they are just as cool.
  • WebSharper.  All the benefits of F# static checking applied to AJAX client web apps?  I’m in!  I just need an excuse of an app to write.

I’m sure as time goes by, I’ll find more technologies I want to learn, too.


So there you go, I have learned a number of useful new technologies this year, and aspire to more.  What does your list look like?

(And yes, the section titles are an homage to Achievement Unlocked, a great silly game.)

Posted in Uncategorized | Leave a Comment »