effectively debugging python programs