Algorithm formulation, analysis, problem solving techniques, logic design and flow charting, programming in the appropriate language, recursion, systematic program development, top-down design and program verification.