I am using Mathematica 8, and I find the fact that variables in notebooks are global by default to be quite inconvenient and awkward. It would be better for me if every new notebook that I open operates in its own sandbox, and does not affect the other notebooks I may have open. In one notebook, I might set some variables to some constants, and then evaluate some function based on those variables. I might even change some of the function definitions and re-evaluate those.
If I do any of these things, I will alter or destroy the work in a different open notebook, since all variable names are global. I have to completely exit Mathemetica, closing all notebooks, to get back to the results I had in Notebook #1 which I destroyed in a previous session by changing a variable in Notebook #2.
Is there a way of declaring all variables in a notebook to be local instead of global? Do I have to put the entire contents of my notebook inside of a Module[ ] or Block[ ] declaration? Is this even syntactically acceptable? Do I have to place a unique Package declaration as the first statement within every new notebook that I open?