Способность читать и понимать описание поставленной задачи, улавливать пожелания того, кто ее ставит (что не всегда легко, так как и задачи, и те, кто их ставит, часто отличаются именно неуловимостью).
Способность четко видеть действительные трудности и отбрасывать все, не относящееся к делу.
Способность выявлять все случаи, где можно применить теорию, самостоятельно решиться на ее применение или обратиться за советом к специалисту.
Способность разбить задачу на ряд обозримых независимых частей и понять взаимосвязи этих частей.
Способность оценивать эффективность предлагаемых решений с точки зрения затрат на программирование, машинных ресурсов и удовлетворения потребностей пользователя и находить приемлемый компромисс между этими видами эффективности.
Способность объединять множество частных решений воедино, получая при этом четкое и изящное решение всей задачи.
Способность выражать решения на простом и понятном языке. Естественный это язык или искусственный — роли не играет, важно лишь, чтобы правильность решения была ясна и людям, и машине.
И наконец, способность при неудаче подавить самолюбие и поискать другой подход (или даже другую задачу).