Automata and Computability (A Programmer's Perspective)