Module (and its dynamical scoping cousin Block) can be clunky to use because you have to declare the local variables you wish to use up-front. Other than that it&#x27;s not &#x27;weird&#x27;.<p>I write a lot of Mathematica code for my job. To make life easier I&#x27;ve built in a macro system that makes day-to-day programming a whole lot more pleasant. It will be available in Mathematica 10.4 in the GeneralUtilities package that ships with Mathematica.<p>One of the built-in macros is a construct that automatically localizes any variables that occur as the L-value of an assignment:<p><pre><code>  Needs[&quot;GeneralUtilities`&quot;]
  foo[x_, y_] := Scope[
    z = x * y;
    PrimeQ[z + 1]
  ]
</code></pre>
This gets rewritten at definition time to be:<p><pre><code>  foo[x_, y_] := Block[{z},
    z = x * y;
    PrimeQ[z + 1]
  ]
</code></pre>
It&#x27;s a small thing, but it adds up, especially for large functions, and indeed its silly this isn&#x27;t a core feature of the language.<p>There are a couple other nice features of Scope, too, like the ability to use a single quote &#x27; anywhere in the body of your function to Echo the value there to the current notebook without actually changing the behavior of the code -- essentially a very lightweight form of &#x27;debugging print&#x27;. That also makes a huge difference.<p>And it has some more powerful variants, like &quot;z &#x27;= 2 * 3&quot; will echo a line that explicitly says &quot;z = 6&quot;, rather than just &quot;6&quot;.<p>Likewise &#x27;&#x27; means EchoHold, which prints the expression before being evaluated AND afterwards, so you&#x27;ll see &quot;z = 2 * 3 = 6&quot; in the above case.<p>Lastly &#x27;&#x27;&#x27; means Tap, which is a higher-order form of EchoHold which instruments a function to echo its input and output (again without changing behavior). So Fold[Plus&#x27;&#x27;&#x27;, Range[10]] prints out all the intermediate steps in the fold.<p>There&#x27;s a variety of features that add a very lightweight syntax for monadic and exception-based error handling, but that&#x27;s not quite stable enough to advertise yet.<p>Same goes for debugging: there&#x27;s some really powerful stack browsing, history capture and replay features, but again not quite stable enough to advertise for this version.