We will start with a simple recipe to code the bare minimum with simuPOP. simuPOP is probably the most flexible and powerful forward-time simulator available, and it's Python-based. You will be able to simulate almost anything in terms of demography and genomics, save for complex genome structural variation (for example, inversions or translocations).
simuPOP programming may appear difficult, but it will make sense if you understand its event-oriented model. As you might expect, there is a meta-population composed of individuals with a predefined genomic structure. Starting with an initial population that you prepare, a set of initial operators is applied. Then, every time a generation ticks, a set of pre-operators are applied, followed by a mating step that generates the new population for the next cycle. This is followed by a final set of post-operators that are applied again. This cycle (pre-operations, mating, and post-operations) repeats...