fundamentals of effective programming