I’ve spent the last week learning more about Microsoft’s new scripting language and shell: Monad. My conclusion …

Start learning Monad now

Wow. This is impressive work. The bottom-line: you’ll be eventually more productive by incorporating Monad into your administrative scripting.

What I like

- Clean language

- Will make you very productive for its core scenarios

- Great interoperability with .NET Framework 2.0 and COM

- It will be supported and improved over time.

What about the others: VBScript, Python, IronPython, etc?

This isn’t a winner-takes-all game. We will live in a world with multiple languages for a long time. Monad isn’t the end of other languages. It’s just another great tool that’s going to have a very big role to play for Windows admins.

  • Monad. Monad isn’t going to help you on those environments that (for whatever reason) that don’t have .NET Framework 2.0 installed. It’s not going to help you if you want a native WIN32 exe with no other depedencies. In those situations, other languages will be your only choice. But once it is released, Monad will be a safe default choice for administrative scripting on Windows.
  • Python. Python is a great language (my favorite) and doesn’t optimize for the same set of scenarios, and certainly doesn’t come with as good .NET Framework or COM integration "out-of-the-box", but you’ll still be very productive with it combined with its win32 extensions for many years to come.
  • IronPython. This is a remarkable technical effort. Long term, my only question is whether this a language that will be actively developed for years to come. Will work continue past the first release? Will bug fixes be available regularly? Will the community adopt it so that there’s a lot of sample code and documentation? Will its dev team track changes in the core Python language?
  • VBscript. I hate the syntax. On the other hand, often it’s my only option because there is an extremely large amount of code and documentation available to show you how VBScript can solve your admin tasks. Frankly, I’m more concerned with solving my problem than using my favorite syntax so I’ll use VBScript if that’s what will get the job done. Currently, neither Python nor Monad has as many resources available as VBScript (in the case of Monad, I think that will rapidly change).

Moving to Monad: Things to keep in mind

  • Ramp-up time is required. It’s familiar if you’ve ever used some of the popular dynamic languages, but it is different enough that you’ll need time to absorb it fully.
  • Documentation & Sample code that you can find via Google is only now starting to appear.
  • Common idioms haven’t yet been established in the community. What are the right "Monadic" ways to do any given task?
  • Remember my earlier comment about support. Even if it isn’t perfect or as elegant as your favorite language, Monad is something about which Microsoft is very excited and in which Microsoft is heavily invested. Over time you can safely expect it will only get better.

My advice

  • Pick the simplest script in your toolbox and try it in Monad. Don’t replace the original script (I will generally avoid recommending rewriting just for it’s own sake… see this article for the reason http://www.joelonsoftware.com/articles/fog0000000069.html ), just start getting used to the new way. As you gain confidence increase the complexity of the task. Don’t start translating a critical & complex script. You may get frustrated quickly because you’ll have to re-discover many things that were "obvious" in the original language.
  • The next time you have a new script, take a quick shot at it in Monad. Even if you end up going back to your original scripting language, you’ll develop a better sense of where you can be productive in monad.

Links to get you started

General Resources

Writing a CmdLet

Blogs with Monad content

Other languages