Slide 3
Another standard technique: the debugger. This also forces programmers to do a lot of reasoning about a program's execution as they can only see the program's state at one point in time at once. To see its evolution, they must carefully step through the program, remembering past states and figuring out what caused transitions between them. If they accidently step too far, the whole process must be restarted. How could this become a less awkward process, allowing for more exploration forward and backward in time?