Script Center: Interview with a Scripter
Jeffrey Snover - Monad Software Architect
(Posted in 2005)
Many of you have heard about Monad and can’t wait to learn more. The rest of you are probably guessing that Monad is a code name for a piece of Microsoft software and wondering what the heck a Monad is and what kind of character is responsible for a code name like Monad. As usual, the Scripting Guys are at your service. We’ve hunted down the funky-code-name maker in our midst and subjected him to intensive interrogation. We’ve edited out the particularly disturbing parts of the transcript and we’d like to share with you the little that remains. Scripters, meet Jeffrey Snover, the software architect responsible for Monad – Microsoft’s next gen command-line and scripting environment.
Personal
Well first off Jeffrey, we'd like to thank you for taking the time to chat with us. Now, let's dive right in and learn more about the architect of Monad.
SG: Where are you from originally?
JS: I was born in Seattle but we moved before I was a year old. I spent most of my life in Massachusetts and New Hampshire but I also lived in Mississippi, Texas, and Colorado.
SG: Where did you go to school and what did you study?
JS: I’m a drop-out just like Bill Gates. It turns out that the only real difference between us is a couple layers in the org chart and a couple of billion dollars. Seriously, though, I studied Physics at the University of New Hampshire where I also became seduced by Epistemology, Ontology and Philosophy in general. It was there that I encountered the idea of Monads. [Gottfried Wilhelm] Leibniz believed that the fundamental building block of the universe was a Monad. Monads would compose with one another to effect a purpose. Thus to Leibniz, the fundamental principle of existence was composition, which matches perfectly with what we are doing with the Monad language.
SG: How long have you been at Microsoft? What did you work on before Monad? Before Microsoft?
JS: 5.5 years. Prior to Monad I was the divisional architect for the Management group. Prior to Microsoft I worked at Tivoli, was a consulting engineer in DEC’s management group, did protocols/management at Apollo, worked a couple of start ups, and started out doing process management software at Storage Tech.
SG: How many lines of code do you figure you've written during your career?
JS: Edsger Dijkstra once said that you should pay your people inversely proportional to the number of lines of code. Let’s just say that if people listened to Dijkstra, I couldn’t afford a ham sandwich. I just love writing code, it can be pure joy.
SG: There are probably one or two of our readers who wouldn't mind a gig as a software architect for Microsoft. Any advice for them?
JS: There isn’t an easy answer because there are lots of different types of architects at Microsoft. In my mind, the best architects are people who have lots of scar tissue, have both technical and business strengths and can get stuff done. Smarts are required but they aren’t enough, you need to be wise. Wisdom is digested experience. Every now and again, just stop and think about what you just did and ask yourself: How could it have been better? What would you do differently? Did it have the impact you expected? Never underestimate the value of thinking and comprehending.
General Technology
SG: What do you consider the most exciting recent development in computing technology?
JS: In all honesty – Monad. We are doing things that will make your head spin. The quantity and quality of the technical innovations is staggering. When we show people what we are doing, you have to pass out drool buckets. I’ve talked to hard core UNIX guys that start out absolutely hostile to what we are saying and then when they see what we are doing, they want to standardize their entire company on it.
SG: What's your favorite piece of non-Microsoft software?
JS: The Opening Explorer of www.chessgames.com. I was studying an opening the other day and then viewed an example game. The clarity of thought was so evident that I felt a real connection to the player. I was blown away when I found out that it was a game played by Greco in 1620.
General Scripting
SG: What was your favorite scripting environment/language before you decided to create Monad? Why?
JS: Like most people, I have a love/hate relationship with the existing tools. I love the interactivity and composability of KSH/utilities but I hate their inconsistency and the need to do text parsing. I love the power and programmability of PERL and TCL but I hate their idiosyncrasies and their lack of a good interactive experience. I love the consistency and production-orientation of VMS DCL and AS400’s CL but I hate their composability model. I love the UNIX model of surfacing everything through the filesystem but I hate the anemic semantics of the filesystem.
SG: What's your preferred scripting editor? Why? Are there any other tools you find really useful when scripting?
JS: I use the Universal Admin Development Model. I figure out script fragments in real-time in the interactive shell. When they work, I put them into a file (can you believe that I actually use notepad?!) and then parameterize and generalize the script until it is production quality.
Monad
SG: What exactly is Monad?
JS: Monad is an automation technology which is surfaced as a scripting language, an interactive shell and in GUIs. Our focus is in presenting the system in a way that makes it easy for Admins to understand and automate. Admins want to explore the entirety of the system using high level, task-oriented abstractions presented both in a GUI and in a CLI [common language infrastructure]. They need to be able to see the machine behind the eye-candy and truly understand what is going on so that when things go pear-shaped, they have the knowledge and tools necessary to make things right. So that means that they want to have their GUI layered on top of the CLI so that the GUI can teach them what is really going on. They then use the CLI to explore the system to truly understand how it works and how the pieces are connected. Then they render that understanding into a series of scripts to automate the system to meet their specific needs.
SG: What aspect or feature of Monad are you most proud of?
JS: Simple – leveraging .NET to provide simplicity for Admins, awesome economics to developers, and having an incredible dynamic range of capabilities. In general I try to avoid the term “object-oriented” because it conveys a programmer orientation when in fact what we do is leverage objects to dramatically simplify the lives of Admins. Instead of commands burping out randomly formatted text and requiring Admins to become parsing experts, we emit .NET objects and avoid the parsing altogether. Admins think about what they want, they type it, they get it. The resulting simplicity is compelling. Monad is also architected around requiring the absolute minimal amount of code from developers. Once they write their .NET objects, a Cmdlet is a tiny amount of code to add command line semantics to those objects. Lastly, Monad makes it simple to do simple things and possible to do complex things. You’ll avoid that phenomena where your tool runs out of gas and you have to run down to Borders to pick up a new set of books to get your problem solved.
SG: What do you now wish had been done differently?
JS: Right now I have no regrets. Ask me again in a year.
SG: Why does Windows need a completely new scripting environment? Why not an iterative improvement to WSH?
JS: Monad is trying to solve a much larger problem and is based upon an entirely different technology base than WSH. Whereas WSH is COM-oriented Scripting, MONAD is command-oriented and addresses the needs of interactivity as well as .NET scripting. That said, we’ve done quite a bit to provide a nice glide path from WSH/VBSCRIPT to MONAD to leverage existing skill.
SG: Will current WSH and batch scripters be able to continue using their existing scripts? Will those existing scripts benefit from running within the Monad environment?
JS: Yes. Those technologies continue to be supported and those scripts will continue to run. You’ll be able to run them from within MSH just fine and you’ll be able to leverage the great text parsing capabilities of Monad to extract the results of those scripts. We talk a lot about leveraging objects within Monad and sometimes don’t do justice to our excellent text manipulation capabilities.
SG: What can admins do to prepare for the release of Monad? Should they anticipate a steep learning curve?
JS: We have just released Beta 2 of Monad (Sept. 2005) and it is available from Microsoft Download Center. They can download a beta version of MSH and start exploring right away. (You can find a list of available Windows PowerShell downloads here.)
As far as the learning curve goes, I expect it will be similar to what happened when I learned VMS’s DCL. I didn’t like it for the first 20 minutes because it was different than what I already knew. I then invested another 20 minutes in learning how to use it and then I was hooked. I was extremely productive because it was so consistent. I could guess about what to type and it would be right. Monad will be the same.
SG: Monad sounds really cool. When will it be released?
JS: Monad technology will be available in the next release of Exchange, MOM and the WINFX SDK.