principles of programming 3989