how to think like a developer