В принципе первый ответ верен. Но моё мнение, нужно уметь абстрагироваться. К примеру, в уме построить какую-нибудь конструкцию, хоть дом, хоть психические процессы. Программирование это не создание переменных, написание циклов, условий и т. д. Для программирования нужно именно понимать задачу в целом, уметь разделить её на части, части на подчасти и т. д. Книга МакКоннел - Совершенный код. Самая лучшая книга о разработке ПО, там как раз говорится о подобном. Её по любому нужно прочитать, рано или поздно.