a method for programming a plurality of memory cells of a nonvolatile semiconductor memory device comprises the steps of : dividing the plurality of memory cells into m number of groups ; successively selecting each of the m number of groups ; generating m number of successive overlapping pulse signals ; and programming the memory cells of the m number of groups in response to the respective m number of successive overlapping pulse signals .