Verb-Noun vs Noun-Verb

PowerShell Team

Kurt asked the question “why not Noun-Verb vs Verb-Noun” in his post:

There are lots of answers to this some better than others.  Let me rattle off a couple of them:

  1. VMS DCL/AS400.  Issac Newton once said that if he could see farther, it was because he was standing on the shoulders of giants.  So it is with Monad.  People like to point out the similarities between Monad and various UNIX shells/utilities and scripting languages.  Absolutely true – many of us have deep UNIX backgrounds and  have a lot of respect for that body of work.  That said, Monad is influenced as much by VMS/DCL and AS400/CL as it is UNIX.  These are wonderful environments built with the clear vision that they would be used by people running production shops where operations and management really mattered.  These environments are strict about naming guidelines, common syntax, environmental setup, operational characteristics, etc etc. 

    Both of these environments are hard core about naming and leverage a Verb-Noun pattern.  Apollo’s Domain/OS and AIX also used Verb-Noun models as well.  BTW – you can see the influences of the VMS & AS400 focus on production qualities in:  having a single common command line parser,  -VERBOSE, -CONFIRM, -ERRORACTION (actually our entire near-manical focus on error handling comes from a focus on production readiness), and others.

  2. Programmer vs Admin focus.  Kurt points out that a Noun-Verb schema would mirror the OO programming world.  That is another reason we are Verb-Noun.  There are 2 aspects to this:
    1. Admins are admins with needs similar but distinctly different from those of programmers.  We already have world-class languages and tools for programmers, what we need improvement on is Admin languages and tools.  I did not want teams thinking that they could just expose their .NET objects and think that they were meeting the needs of admins.  These teams need to think about the needs of admins and provide consistent, high level, task-oriented, set-oriented operations with a strong focus on error handling and operational control.  You can easily do that with a thin layer on top of .NET objects but you can’t get that by just exposing .NET objects.  So being Verb-Noun helps drive home this point.
    2. Take a look at the inconsistency of Method names on .net objects.  It is Kill() for a process object but Stop() on a serviceController object.  Putting the noun first puts people in the mindset that their domain is the high order bit and they pick methodnames optimized for their domain.  Putting the Verb first makes it clear that the User Experience is the high order bit and the domain specifics are the low order bit.  We want an very high level of verb reuse to provide a consistent, predictable user-experience. 

Jeffrey P. Snover
Monad Architect

[Edit: Monad has now been renamed to Windows PowerShell. This script or discussion may require slight adjustments before it applies directly to newer builds.]





Discussion is closed.

Feedback usabilla icon