Programmers guide to solving computational problems