Just a note on the issue of hard/soft water (as this affects me, being in a soft water area, and being a big fan of porters and stouts) - is there a simple way of "hardening" the water if it is soft and you want to brew a porter for example.
A mash with a lot of dark grains in it might be too acidic for the mash enzymes to work well.
To make decent stout it might be you need hard but alkaline water, which means temporary hard water. To mimic this you could add Calcium Carbonate (precipitated chalk). Calcium Carbonate is very insoluble so needs to be added directly into the mash.
Alternatively, you could dissolve the Calcium Carbonate in fizzy water, which would give you Calcium Bicarbonate, which is the component that makes temporary hard water. Calcium Bicarbonate breaks down when boiled, Calcium Carbonate then precipitates out as "furring".
If you're making a stout, you might feel that a malty flavour is desirable. If that is the case you might want to add some Calcium Chloride, which will give a more rounded malt flavour. This will make your mash more acidic and counteract the effect of the Calcium Carbonate. Knowing this, you'll add more Calcium Carbonate. Be careful though - too much Calcium will make your beer horrible.
Temporary hard water tends to make less good beers with light malt mashes because light malt mashes are less acidic. Less acidic malts + alkaline water = mash that isn't acidic enough for the enzymes to work properly. Less acidic mashes also tend to leach more tannin from the grain husks, which leads to astringent flavours.
Permanently hard water has Calcium Sulphate and/or Magnesium Sulphate in it, which is acidic. This is very bad for dark beer since acidic malt plus acidic water = way to much acidity. Permanently hard water tends to work better with light malts, which make less acidic mashes. The Sulphates present also tend to enhance the hoppiness, which is usually desirable in lighter beers