a programmer's perspective CS