How to think like a Programmer