Qual é a característica mais importante que um programador deve ter?

Escrevo este post motivado por algo que venho falando faz muito tempo e também em resposta a um debate que tive entre colegas num grupo privado de uma comunidade.

O assunto a seguir pode ser incômodo, pode gerar um desconforto e até mesmo pode ser que você não concorde comigo, porém acredito que é necessário voltar a falar do assunto.

Uns dias atrás em uma das diversas comunidades que participo, um rapaz iniciante na área perguntou:

Qual é a característica mais importante que um programador deve ter?

Eu parei para refletir e estruturar uma resposta para o rapaz, então eu refleti… refleti… refleti… quando me dei conta eu passei mais de 10 minutos pensando no assunto e não tinha uma resposta pronta para dar.

Foi nesse momento que eu parei e pensei:
– Vamos mudar um pouco, vamos pensar de uma outra maneira.
Então e eu me fiz a seguinte pergunta:

Qual é a pior característica que um programador pode ter?

Incrível! Ficou mais fácil, eu realmente consegui chegar numa opinião e gostaria de dividir com você!

A resposta rápida é:

A pior característica que um programador pode ter é a falta de humildade em reconhecer que ele não sabe de tudo e nem é perfeito naquilo que faz. Sempre tem como melhorar!
A melhor característica que um programador pode ter é o comprometimento em sempre buscar o aperfeiçoamento técnico!

Acho que este pensamento é bem claro (até simples demais) e fala somente a verdade sem ofender ninguém. Pode ser que você discorde, talvez exista algo mais importante? Talvez! Mas para mim esta é a base fundamental:

Buscar conhecimento > aprender > aplicar > analisar > criticar > aperfeiçoar

Repetir este processo sempre, não importa em qual patamar da carreira você chegou!

Humildade e uma visão do “mundo real”

A seguir transcrevo o diálogo original em que participei com um grupo de colegas do qual eu defendo uma questão de humildade e visão de realidade, fiz o papel de “advogado do diabo” na conversa, pois precisava entender melhor as afirmações do colega.

[colega]Se você não sabe arquitetura de computadores. Análise de complexidade e Estrutura de dados. Não é programador. É um amador remunerado. Se aprendeu na faculdade ou fora, tanto faz. Mas TEM QUE SABER.

[eu]Então se a pessoa entrega software que funciona e atende o cliente, mas não sabe disto, então não é um programador?

[colega]EXATAMENTE. Você não entrega software que funciona sem saber estrutura de dados.

[eu]Tem certeza?

[colega]Tenho! Você não escreve software que escala. Nem que não escala. Você entrega uma colcha de retalhos baseada em um framework que você não entende. Isso não é ser profissional!

[eu]E como você pode garantir que uma pessoa que não sabe fazer uma análise de complexidade não entrega software que escala?

[colega]Simples. Por que não escala. Se você não sabe nem me dizer como seu algoritmo vai se comportar quando aumentar o número de elementos que ele tem que tratar. Certeza que na maior parte das vezes vai se comportar mal.

[eu]Ele pode usar uma ferramenta de analise de performance, testes de carga e depois pesquisar como fazer melhor, enfim… Eu que não vou ter a “audácia” em falar que 70% dos programadores são amadores remunerados, só isso…

[colega]Não falei em percentual. Mas, sendo realista, esse número é bem maior.


O assunto foi além deste ponto, mas divagou um pouco, o que realmente me importa está nesta troca de mensagens que transcrevi.

Mais uma vez deixo claro que as afirmações (ou taxações) não eram para a minha pessoa, eu entrei no meio de uma conversa já iniciada apenas para fazer o “advogado do diabo” e entender melhor as sérias colocações feitas pelo colega, no final sugeri tratarmos disso em público para cada um expor sua opinião.

Realmente não existe maneira de discordar que estes conhecimentos são fundamentais e muito importantes, porém eu acho extremamente errado rotular praticamente todos os programadores de “amadores remunerados” uma vez que entregam software, fazem escalar, fazem otimizações e por final atendem o cliente (mesmo usando ferramentas ao invés de puro conhecimento de ciência da computação).

Humildade em reconhecer nossas limitações / deficiências é fundamental, assim como é importante ter humildade em reconhecer que existem diversos tipos/níveis de profissionais com focos diferentes no mercado.

Hoje em dia podemos dizer que a maioria dos programadores são programadores em frameworks:
(.NET, Java, Angular, React, MVC, ASP.NET etc, etc…)

São frameworks / bibliotecas desenvolvidas por pessoas que sabem muito mais do que a grande maioria dos programadores do mercado. Estes programadores do mercado utilizam IDE’s inteligentes, ferramentas de análise de código, testes de penetração (segurança), testes de carga e enfim.

Programadores utilizam tecnologia para entregar tecnologia, é uma realidade e nem por isto você deve aceitar que alguém lhe chame de amador por que existe uma forma de executar algumas tarefas sem a necessidade de uma ferramenta específica.
Eu apenas lhe recomendaria que um dia se dedicasse a aprender como fazer isto.

Antigamente era necessário ter muito mais cuidado em não esquecer de desalocar um ponteiro por exemplo, mas ai vieram os frameworks que gerenciam as pilhas Stack / Heap, que fazem uso de garbage collector, que otimizam o código naturalmente durante a compilação e executam de forma inteligente e etc.

Isto não significa que você não deve cuidar do código para evitar uma StackOverFlow Exception por exemplo, nem deixar de analisar se o seu algoritmo está performando bem (assim como as consultas em banco). Tudo isso AINDA É OBRIGATÓRIO. Porém cabe no que eu citei acima:

Buscar conhecimento > aprender > aplicar > analisar > criticar > aperfeiçoar

Você deve SEMPRE se preocupar com que está entregando, pois isto vai evitar custos desnecessários de infra, manutenções emergenciais após problemas de escala e etc, pode custar até mesmo o seu emprego. Portanto faça como você puder, use as ferramentas! Mas também estude mais para poder não depender 100% delas, porém NUNCA deixe de fazer o seu melhor!

Sobre ter humildade em rotular pessoas e medir todo profissional com a mesma régua, eu me recuso a fazer, eu deixo isso por conta do mercado e o mercado cuida disso de uma forma simples:

  • Aplica exames técnicos de contratação
  • Divide o profissional em níveis (ex Junior, Pleno, Sênior)
  • Sabe quando procurar um especialista ou um programador que entregue aquilo que se espera.
  • Realiza avaliações de 360º e fornece feedback.

O mesmo colega da conversa acima já me criticou pelo meu projeto de referência o Equinox Project, pois na visão dele o projeto influenciava os desenvolvedores a utilizar técnicas complexas para fazer um simples CRUD.

Eu acredito que o programador (prefiro o termo desenvolvedor) deve ser maduro e autônomo o suficiente para tomar suas próprias decisões, não podemos ser paternalistas ao ponto de evitar de entregar conhecimento por que ele pode ser entendido de forma errada, é absurdo!

Obviamente eu não recomendo utilizar toda complexidade do Equinox Project para entregar um CRUD, inclusive esclareço isto na própria documentação do projeto, até por que não é necessário entregar um projeto completo (que justifique a complexidade aplicada) só para conseguir compartilhar um pouco de conhecimento com nossos amigos programadores correto?

Observe esta imagem.

Observe no canto esquerdo inferior a frase:

Entenda tudo isto, mas aplique apenas o que precisar.

Eu achei impressionante a capacidade e simplicidade do autor ao recomendar o uso da complexidade apresentada. Tem a minha admiração.

E aqui entre nós: É o suficiente né?

Não somos meninos com computadores, devemos ser soberanos sobre nossas próprias decisões e eternamente conscientes da busca do constante aperfeiçoamento.

Eu aceito todo tipo de crítica (e adoro receber) mas esta me fez pensar:

“Este meu colega é um excelente profissional, a crítica dele com certeza me faz refletir em fazer mais e melhor, mas acabei de entrar no GitHub dele e encontrei apenas projetos não terminados / com um alto nível de complexidade assim como o meu / pouco documentados. Poxa!
Entrar na fila para criticar é com certeza mais interessante do que estar na fila do fazer/ajudar/compartilhar”.

Este é um post onde exponho as minhas opiniões pessoais, não entenda isto de outra forma. Eu o faço por que em todos os meus longos anos de consultorias e treinamentos eu tratei a todos de forma inclusiva e respeitosa, de outro lado se eu fosse um gestor realizando a contratação de um profissional para esta finalidade eu não aceitaria que as pessoas do meu time fossem expostas a este tipo de rotulação.

Para finalizar…

Acabei escrevendo além do que planejei, mas julgo tudo isto muito importante!

Eu já toquei no assunto neste post: “Quer ser um dos melhores ou vai ficar ai parado?“. Todo mundo tem o seu modelo, a pessoa que você admira e te inspira / influencia. Eu também tenho! E te prometo o seguinte:

  • Nunca irei me colocar como um guru conhecedor da verdade, se você aprendeu algo comigo, ótimo, espero que você faça melhor do que eu fiz inclusive.
  • Nunca irei te julgar como um amador. Se você escreve e entrega software você é desenvolvedor, foque em ser melhor a cada dia, busque identificar suas deficiências e estude para atender melhor os desafios da carreira. Estou aqui para te ajudar inclusive.

Amigo programador:
Desenvolva a melhor característica que um programador pode ter:

Busque sempre o aperfeiçoamento técnico, nunca acredite que algum conhecimento fundamental é dispensável apenas por que você entrega software que funciona.

Ao mesmo tempo busque se policiar para que seus méritos não se tornem motivos de ego e arrogância, pois somos todos eternos aprendizes, cada um ao seu tempo, cada um a sua maneira.

Em tempo, gostaria de deixar mais uma opinião minha sobre o que é ser Programador / Desenvolvedor / Engenheiro / Arquiteto:

Se você tiver algo a compartilhar utilize os comentários abaixo.
Um abraço!

19 ideias sobre “Qual é a característica mais importante que um programador deve ter?

    • Olá Elemar, muito legal ver você participando pela primeira vez aqui, pena que num momento menos nobre comparado aos conteúdos que costumamos a compartilhar.

      Para que fique claro a todos a transcrição é o dialogo original, eu não mudei nada.
      Sendo assim, acredito que tenha lido o post todo, sobre o que você discorda frontalmente? Seja mais claro, por favor!

      Sobre os seus projetos fique tranquilo, acredito que ninguém duvida de sua capacidade. Pelo contrário. Eu também tenho inúmeros cases pelo Brasil entre outros países, mas eu não vejo necessidade de expor isto neste momento.

      Somos profissionais premiados por dividir nosso conhecimento com a comunidade, lembro que me disse que o seu GitHub não é para ter projetos de referência, que seus códigos são privados e quando experimentou ter projetos de referência não ficou satisfeito com o resultado. Acontece!

      Eu também vendo soluções, serviços e treinamentos mas além disto estou focado em compartilhar com a comunidade um pouco do que sei, se alguém aplicou errado o que de forma gratuita eu dissemino eu não me julgo culpado por isto, eu sigo compartilhando e inspirando pessoas até por que uma de nossas premiações é justamente sobre isto, correto?

      Abraços!

  1. Eu estou chegando perto dos 44 anos. Nossa! Já desenvolvi muita coisa, em diversas plataformas e linguagens. E quando olho para traz, sempre tenho críticas à fazer. Sempre me pergunto; Como poderia ter feito diferente se tivesse o conhecimento que tenho hoje.
    O melhor disso tudo, é que tenho a certeza e a sorte de que amanhã estarei me fazendo essa mesma pergunta, em um “loop” infinito.

    Em especial, muito do conhecimento que tenho hoje, aprendi e aprendo com você meu ir.’., em seus cursos, vídeos e artigos, e em particular nesse artigo, que pra mim é uma lição de humildade.

    E é isso, sempre seremos eternos AApr.’.

  2. Eduardo é por estas e outras que te admiro demais cara. O seu colega é um excelente profissional sem dúvidas.

    Mas acho que nessa ele foi muito mal! Quando li o posto dele assim tive a mesma impressão de ele estar rótulando do pessoas e achei até meio prepotente da parte dele. Mas também entendi o recado dele, porque me fez também refletir para melhorar sempre

    Mas você foi como sempre (e como falou no texto) muito humilde em se colocar como desenvolvedor.
    Concordo com você em gênero, número e grau.

    Há vários profissionais que sabem muito mais que outros e estes se preocupam com estes aspectos mais de baixo nível e os desenvolvedores “comuns” que trabalhamos para atender ao negócio das empresas, precisamos sim, saber aplicar de forma correta o que nos é oferecido e estar sempre atento aos pontos de melhorias.

    Enfim, falei demais também e gostaria novamente de te parabenizar pelo posicionamento, assim como vc já havia feito de forma exemplar com um outro “colega” que criticou seus métodos de ensino.

    É isso, valeu!

  3. Meu pensamento também vai de encontro ao seu e tb vejo coisas boas a extrair do “amador remunerado”.
    Hj minha filosofia é de fazer entregas com valor de negócio em cada “Sprint”, porém a sustentabilidade do sistema também pode (e deve) sobresair ao negócio em algum momento.

    Eu penso que temos que acreditar no trabalho de outras pessoas para evoluir, assim como vc, eu sei que tem gente muito mais capacitada do que eu cuidando do EF e Dapper (assim como nos outros frameworks), então concordo com vc em deixar está preocupação de lado, vou focar minha equipe em aprender a usar corretamente as libs prontas, não em como elas são feitas e menos ainda em fazer um novo ORM. Então vamos adiante entregando features nos produtos.

    Porém há uma linha tênue separando as duas ideias, no momento que a aplicação toma corpo e passa a ser usada em massa, a falta dos conceitos fundamentais técnicos voltam pra puxar seu pé a noite. E não quero falar de exemplos de “desenvolvedor revolucionário da moda” fingindo saber como suportar milhares de requisições por segundo pq leu um artigo de nodejs na web, vamos reduzir o escopo para apenas 25 requests por segundo. Quem cuida de um sistema, que consegue entregar esse volume num tempo satisfatório (<=200ms), sem ter mais de um recicle diário ou subir nova instância para balancear a carga, já está de parabéns! Agora quem precisa escalar N servidores pra suportar esse volume, sinto lhe dizer, mas sua aplicação está com prazo de validade prestes a vencer e neste ponto o assunto abordado no outro post passa a ser diferencial. Porém geralmente ao chegar neste ponto, já existe dinheiro envolvido, e subir um servidor novo se torna "barato" perante a melhoria da aplicação legada, até que vc já subiu 6 servidores de App e acha que está tudo certo. Então vai subir 7, 8, 9 e percebe que já não apresenta mais o resultado imaginado, então chega um ponto que se levam as mãos a cabeça e vem o pensamento "ferrou, temos que refazer a aplicacao do zero, esta tudo errado". Geralmente a pessoa que diz essa frase, faria pior ainda se lhe desse a chance de refazer tudo, mas isso já seria um assunto pra outra polêmica.

    Enfim, hj em dia já não reinvento mais rodas, mas já fiz isso várias vezes em meus estudos/carreira e o aprendizado dessas etapas fe baixo nível que passei, trazem resultados hj em dia. Por exemplo, fiz muito componente em Delphi quando comecei em meu primeiro trabalho profissional a 14 anos atrás, que me deram muita base pra fazer um ORM em C# posteriormente e o aprendizado sobre reflection e OO que precisei adquirir pra fazer isso a muito tempo atrás, ainda me são muito úteis pra resolver os problemas de negócio de hj em dia.

    Então, também vejo que é muito positivo pra carreira profissional de um desenvolvedor, que em algum momento da vida, passem pela etapa de entender como as coisas funcionam em baixo nível, pra mim isso é o ápice da programação, o momento onde vc está puramente trabalhando com a lógica técnica, fazendo algo somente pelo prazer de programar e tem como efeito colateral a sua evolução profissional.

  4. Parabéns pelo excelente artigo, devemos sempre nos manter humildes, não importa o nosso nível de conhecimento ele não é e nunca será passe livre para humilhar as pessoas.

  5. Eduardo, boa tarde.
    Concordo com você mais do que com “ELE”, que nessa altura todo mundo já sabe, mas ok. Penso o seguinte, algumas pessoas infelizmente não tiveram o processo “correto” de aprendizado, aprendi a programar fazendo programas, hoje tenho até vergonha de alguns cenários que sou esposto que não tenho o devido conhecimento, falando de estrutura de dados mesmo, acredito eu, que com o tempo nós desenvolvedores que aprendemos na “pastelaria” a programar vão criando vergonha na cara e estudando o fundamental. Sou dsenvoledor a 8 anos e admito que só recentemente fui buscar entender o comportamento real do garbage collector. Mas é um fato que sou desenvolvedor, uma alusão à isso pode ser até de um cara que sabe cozinhar, ele sabe cozinhar e as pessoas comem, não necessariamente ele precisa saber tudo para cozinhar, ele não é um chef ainda, mas fez pessoal comeu, ta valendo!

    Agora sobre a resposta é só inverter:
    “A melhor característica que um programador pode ter é a humildade em reconhecer que ele não sabe de tudo e nem é perfeito naquilo que faz. Sempre tem como melhorar!
    A melhor característica que um programador pode ter é o comprometimento em sempre buscar o aperfeiçoamento técnico!”

  6. Também concordo com o Eduardo!
    Não esperava isso do [colega], sempre acompanhei os post dele([colega]) e de outros também.

    Esse dialogo soa como uma ofensa:
    [eu] – […] 70% dos programadores são amadores remunerados, só isso.
    [colega] – […] esse número é bem maior.
    Foi como eu me senti ao ler esse post.
    É a SOMA (Ego + Arrogância) = QUEDA

    Respondendo a essa pergunta com base nas minhas Experiências de mercado.

    “Qual é a característica mais importante que um programador deve ter?”
    while(true)
    {
    Buscar conhecimento > aprender > aplicar > analisar > criticar
    > aperfeiçoar > saber ouvir
    }

    “Qual é a pior característica que um programador pode ter?”
    Ego + Arrogância

    Bem colocado

    “Busque sempre o aperfeiçoamento técnico, nunca acredite que algum conhecimento fundamental é dispensável apenas por que você entrega software que funciona.

    Ao mesmo tempo busque se policiar para que seus méritos não se tornem motivos de ego e arrogância, pois somos todos eternos aprendizes, cada um ao seu tempo, cada um a sua maneira.

    Parabéns pela postura Eduardo!

  7. É incrível ver um cara com um conhecimento absurdo e ter a humildade que tem. É por isso que é referência para nós programadores. Parabéns Eduardo

  8. Grande Eduardo! Sou um grande admirador do seu trabalho e você transcreveu tudo que eu sempre tento passar para minha equipe. E apenas complementando a sua frase
    “Buscar conhecimento > aprender > aplicar > analisar > criticar > aperfeiçoar” eu incluiria a palavra “Dividir” também. Porque uma coisa que aprendi esses anos de desenvolvimento, é que Humildade e Conhecimento são as únicas coisas que quando nós dividimos na verdade estamos multiplicando. É isso faz muita diferença!
    Abraço e continue sendo esse cara referência pra muitos!
    Abraço!

  9. Tudo bom Eduardo, parabéns pelo post, hoje eu me considero um Junior e acho que faço parte dos 70% que o [colega] disse, mas mesmo assim acredito que esse tipo de comentário já se auto refuta.

  10. Obrigado por compartilhar conhecimento conosco, Eduardo! Gostei da sua argumentação, é bom ver alguém humilde e que não tenta sustentar o argumento com apelo a autoridade.

  11. Public class E1 {}
    Private class E2 {}

    Mais vale uma classe pública do que uma privada que vive só no mundinho dele.
    Pires está focado e compartilhar informação e mão na massa, fora cursos que garanto que ajuda muito dev, hoje vivemos na era onde um quer ser maior que o outro.

    Eu já fui elogiado por compartilhar conhecimento profissionalmente e a pessoa falou Canedo os 5min que vc se dedicou em me ajudar me ajudou muito em outra empresa, mas eu sou assim por natureza gosto de fazer equipe crescer junto, e todos tem que ser humilde isso não quer dizer ser menor é respeitar as limitações do próximo e bola pra frente, dotnet esta em sua melhor fase vamos crescer para motivar outros devs.

  12. Concordo com o Eduardo e parcialmente com o Elemar.
    O Elemar basicamente diz que um atendente de mercado(caixa) deveria saber fazer calculos matematicos de nível “financeiro” já que ele trabalha com dinheiro, ou que ele mesmo deveria saber toda a gramatica e regras do português para escrever seus artigos.
    O Eduardo diz que o caixa de mercado, se ele usou a calculadora ou usou um software para fazer a conta da sua compra, ele ja bem o seu trabalho. Assim como escrever seus artigos com o corretor ortografico e de discernimento , já é o suficiente para escrever um bom artigo.

    Eu sou um cara que tem uma importancia relavante aonde eu trabalho e costumo ser o cara que luta muito para aplicar boas praticas de desenvolvimento e qualidade.
    E tem um cara muito bom aqui, segundo a opinião do elemar.

    E adivinha quem gerou mais bugs e mais problemas pra empresa?
    sim, não fui eu. E todos os códigos dessa pessoa, tem uma certa complexidade devido a justamente sua base tecnica. Porém não sabe entregar software.

    Hoje temos varios problemas sim, coisas basicas que não enfrentariamos assim como o Elemar citou. Porém, quem entrega software de qualidade, e procurou fazer da forma mais correta, mesmo não tendo essa capacidade tecnica, entra coisas muito melhores e com menos impactos aos clientes.

    Minha opinião é, ninguém precisa ser enfermeiro pra tomar um remedio, nem ser um matematico pra ajudar a sua filha na lição de casa. O importante é resolver o problema, saber que vc resolveu mas não foi da melhor maneira, e aperfeiçoar.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *