1. A method of programming a non-volatile memory array, the method comprising: providing a plurality of memory cells in the non-volatile memory array, each of the memory cells comprising a reversibly switchable material formed in series with a dielectric material, a non-ohmic element and a resistive heater, supplying a first programming current to a first memory cell, wherein the first programming current is generated by a programmable control circuit and applied at an intermediate level for a long duration such that the first memory cell is programmed into a set state; and supplying a second programming current to a second memory cell, wherein the second programming current is generated by the programmable control circuit and applied at a high level for a short duration such that the second memory cell is programmed into a reset state, supplying of said second programming current simultaneous with supplying of said first programming current.