Pensamento abstrato(difuso) X Pensamento concreto(lógico)

A programação é essencialmente uma atividade lógica, é a tentativa de resolver ou minimizar os problemas da sociedade, possibilitando a criação de soluções de alto valor social. 

O que muito pouco se fala e se incentiva, é a importância do pensamento abstrato/difuso/lúdico na programação. 

Bons programadores, aqueles que realmente conseguem inovar e criar soluções de alto valor social, conseguem abstrair problemas, correlacionar informações, detectar padrões, são bons observadores, utilizam muito da analogia e das metáforas para se chegar a soluções realmente inovadoras, portanto de alto valor social.

Programadores que são bons de lógica(pensamento concreto), implementam boas soluções. Programadores que são bons em pensar de forma abstrata, criam boas soluções. Para implementar boas soluções, basta que alguém já tenha pensado e especificado a mesma, enquanto que para criar boas soluções, exige muita pesquisa, organização, experimentação, dedicação e conhecimentos diversos.

Um bom código, são códigos simples, objetivos e limpos, que quebram um grande problema em pequenos problemas, criando pequenas soluções, resultando em uma boa solução.

Hoje, compreendo que programadores bons de lógica adoram trabalhar em fábricas de software. Programadores bons de pensamento abstrato, adoram trabalhar com artesanato de software.