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.
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.)