Resposta curta: quanto mais você sabe o que está acontecendo quando você chama uma função (qualquer uma), melhor programador você é.

Resposta longa: Quando eu tinha 15 anos, eu fui pescar (fui obrigado, odeio pescar) com um tio, e por um motivo qualquer, veio à tona o assunto "hacker". Naquele tempo, eu achava que hacker era uma pessoa que invadia sistemas. Até que ele me disse que "hacker é a pessoa que sabe realmente o que acontece quando você aperta um botão no teclado".

(Eu espero que você saiba o que é um hacker. Um garoto idiota que usa programinhas prontos para invadir o computador dos outros não passa de um garoto idiota. A definição de hacker, em tradução livre, é "uma pessoa que gosta de explorar os detalhes de sistemas programáveis e testar suas potencialidades, ao contrário da maioria dos usuários, que preferem aprender somente o mínimo necessário". Se você quer saber o que é um hacker, leia o Jargon)

Um hacker e um bom programador são quase a mesma coisa, e apertar um botão no teclado envolve vários chamados de função. Um usuário sabe que quando ele pressiona a tecla "A", aparece a letra "A" na tela. Um bom programador vai além, e sabe que resumidamente, ao pressionar a tecla "A", o teclado vai disparar um sinal elétrico que quando chegar no computador, vai disparar uma interrupção de processador, que será tratada por um driver que colocará isso em uma fila, que será lida pelos programas. Nem sempre você precisará saber todos os detalhes. O fato é que o bom programador teve curiosidade suficiente para descobrir como isso funciona.

Um programador mediano sabe que quando você chama a função MessageBox (ou MsgBox ou MessageBox.Show) aparece uma janela com uma mensagem na tela. Um bom programador sabe que isso faz uma chamada para GDI, que depois vai para kernel mode (muda para Ring0), que chama o driver de vídeo que chama o monitor. Quanto mais detalhes você sabe sobre todos esses passos, melhor para você. Você pode ser um bom programador sem saber os detalhes de tudo, mesmo porque, isso é impossível. O que importa é ir além de um usuário ou programador mediano, é ter a curiosidade de saber como as coisas funcionam. Mesmo que você ache desnecessário saber como funciona o gerenciamento de filas do driver de teclado, isso pode ajudar um dia. Informação nunca é demais.

Conhecer bem um computador e seu funcionamento é uma das coisas que define um bom programador. Poder de abstração, capacidade para resolução de problemas e raciocínio lógico são outras qualidades que leva alguém a ser um bom programador. Mas a qualidade essencial é a curiosidade. Um bom programador quer saber tudo que acontece, mesmo que aparentemente ele não precise. Um programador mediano se satisfaz somente com um resultado esperado.

Qualidades ou esforços necessários

Vou enumerar aqui algumas qualidades em um programador que podem ser a chave para o sucesso. Como sucesso, eu defino a satisfação em fazer o que gosta e fazer bem. Se você trabalha com Cobol e é o mestre nisso, mas gostaria mesmo é de estar fazendo um sistema operacional para Nintendo 8 bits, talvez você não tenha sucesso (apesar do que a sua conta bancária diz).

Vamos à elas:

Gostar de problemas lógicos
Saber inglês
Gostar de aprender e estudar constantemente
Gostar de ler (e estudar constantemente)
Saber buscar as informações (para estudar constantemente)
Existem diversas outras qualidades que ajudam, como um bom relacionamento inter-pessoal e facilidade de negociação, mas aqui eu falarei especificamente sobre o que tange a área técnica. Eu não entendo nada de RH, psicologia, inteligência emocional, inteligência extraespacial ou qualquer dessa coisas. Esse artigo é para quem pretende ser um bom escovador de bits, não para quem pretende passar em todas as entrevistas de emprego ou conseguir uma namorada pelo MSN Messenger. :-)

Gostar de resolver problemas

Acho que essa é meio óbvia, já que computação é uma ciência exata. Mas não é tão simples assim. Existem algumas características dos profissionais da área de humanas que caem como uma luva para um programador.

Eu costumo dizer que programação é mais uma arte do que uma ciência. E quando eu explico isso para profissionais da área de humanas, eles entendem e começam a ter a mesma opinião. Quando você projeta um sistema, você quer resolver um problema específico. Mas esse problema pode ser resolvido de milhares de maneiras. Como você chega a solução desse problema também é outro problema, às vezes bem maior.

Digamos que você vai fazer um programa para uma fábrica de roupas. Enquanto você não entender muito bem o processo produtivo da fábrica, você não consegue fazer o sistema. Agora além de saber programar, você sabe como funciona uma fábrica de roupas. Isso é uma das coisas que me fascina na área de sistemas. Além de controlar a máquina, você tem a oportunidade de aprender muitas coisas fora da área de informática (como o funcionamento de uma fábrica).

Atualmente estou trabalhando com softwares para o mercado financeiro e bolsas de valores. Além de refinar minha habilidade em C++, Win32 API, multithread, sockets e coisas técnicas, também estou aprendendo diversas coisas sobre o mercado de ações e de mercadorias e futuros. E esses conhecimentos "paralelos" me ajudam bastante quando me sobra algum dinheiro para investir. :-)



Por: Rodrigo Strauss