programming perspectives