Programming a computer is still one of the most difficult tasks ever undertaken by humankind; becoming proficient in programming requires talent, creativity, intelligence, logic, the ability to build and use abstractions, and experience - even when the best tools are available. - Timothy Budd (
Introduction to Object-Oriented Programming, 1991, pp.2)