1. A programming method for a non-volatile memory comprising: (a) performing a write process that changes threshold voltages of a plurality of selected memory cells by applying a first programming voltage simultaneously to the selected memory cells while applying a plurality of programming signals respectively to the plurality of selected memory cells; (b) repeating step (a) until for each of the selected memory cells, the threshold voltage of the selected memory cell reaches a target voltage that represent a data value being written to the selected memory cell or reaches a predetermined voltage, wherein before each of the repetitions of the step (a), the first programming voltage is increased by a first voltage increment; and (c) in response to the threshold voltages of the selected memory cells having reached the predetermined voltage or having reached the respective target voltages, increasing the predetermined voltage and adjusting the first programming voltage for programming to the increased predetermined voltage; and (d) repeating steps (a), (b), and (c) until the threshold voltages of the selected memory cells respectively reach the target voltages, wherein: each of the programming signals is such that: before the threshold voltage of the memory cell corresponding to the programming signal reaches the lesser of the predetermined voltage and the target voltage of the corresponding memory cell, the programming signal has a second programming voltage, and a combination of the first programming voltage and the second programming voltage changes the threshold voltage of the memory cell corresponding to the programming signal; and after the threshold voltage of the memory cell corresponding to the programming signal reaches the lesser of the predetermined voltage and the target voltage of the corresponding memory cell, the combination of the first programming voltage and the programming signal does not change the threshold voltage of the memory cell corresponding to the programming signal.