Um solucionador de problemas que entende de computação e consegue entregar resultados usando bem as tecnologias adequadas.
Nunca tire da mente que programar é mais resolver problemas, igual você faz na matemática (por isso é ridículo quando alguém fala que não precisa de matemática para programar), muito mais que saber os comandos que deve escrever em uma linguagem de programação.
Programar bem é escrever esses comandos de forma que crie uma boa solução, da melhor forma, atendendo a necessidade de quem vai usar, de forma correta, segura, fácil de usar, e de preferência por um custo baixo e que seja fácil de dar manutenção depois.
Conforme o programador vai tendo mais responsabilidades ele tem que demonstrar que pode tomar decisões mais amplas e adotar técnicas e ferramentas mais adequadas com maior índice de acerto.
Em alguns cenários é a pessoa que entrega no prazo, mas isso costuma ser secundário, e só vale depois de cumprir os objetivos primários.
O bom programador é uma pessoa que entende de computação e não dá muito valor para crenças e marketagens encontradas principalmente na internet. Ele é seguro do que faz, mas humilde para sempre ouvir o que está sendo mostrado por todos, fazendo boas escolhas de que caminho seguir e quem tem as melhores referências, ou seja, se atém aos fatos e usa lógica para tomar decisões.
Claro que o bom programador também domina as ferramentas que usa, então ele entende os meandros da linguagem que usa por exemplo. Ele sabe usar bem o IDE. Ele consegue se comunicar bem com a equipe e usar plataformas que ajudam programadores com seus problemas.
O bom programador não se limita a poucas ferramentas e consegue transferir seus conhecimentos de uma para outra. E escolhe a melhor.
O bom programador é aquele que consegue aprender sempre, que melhora todo dia. Ele pode não ser tão bom ainda, mas está no caminho certo para ser.
O bom programador não é o que sabe tudo e responde qualquer coisa na ponta da língua. È o que se vira, vai atrás, resolve e, claro, bem.
Nem todos os problemas precisam de bons programadores.
O programador bom é principalmente aquele que domina os fundamentos da computação, assim ele deixa de ser o que eu chamado de terraplanista (pessoa que acredita em alguns detalhes do que vê, ignora todos os outros fatos que contestam aquilo, se apega e diz que inventa teorias que não podem ser comprovadas, não necessariamente sobre o formato do planeta).
Ele dá valor para uma formação completa e aprende um passo de cada vez. Ele aprende algo que dá a dica do que é o próximo a aprender. Se a dica não fica óbvia a pessoa não está aprendendo. Então tem que saber "tudo". Dependendo de cada objetivo as prioridades vão sendo diferentes.
É um trabalho diário, um processo que não tem fim.
Poderia colocar coisas secundárias como por exemplo gostar do que faz, se dedicar, etc.
Farei algo que muitos pedem para aprender programar corretamente, gratuitamente. Para saber quando, me segue nas suas plataformas preferidas. Quase não as uso, não terá infindas notificações (links aqui).