asimov

Como se tornar um bom programador?

Neste relato, compartilho minhas opiniões sobre o que é (e o que não é) um bom programador, e no que você deve focar para se tornar um programador de sucesso.

Como se tornar um bom programador? Esta é uma pergunta que muitos de nós – desenvolvedores, analistas e estudantes – fazemos rotineiramente.

Percebo esta ânsia em muitos programadores, dos estagiários aos sêniores. O desejo de nos aperfeiçoarmos, de procurarmos por mais conhecimento ou de aumentarmos nossa produtividade é, de certa forma, inerente à programação. Esse sentimento é potencializado pelo surgimento contínuo de novas tecnologias, linguagens de programação e frameworks no mercado, em um fluxo de novidades impossível de ser acompanhado por uma única pessoa.

Já tive esses mesmos questionamentos ao longo da minha trajetória dentro da área de programação. Mas o que eu considerava ser um bom programador mudou muito desde que escrevi a primeira linha de código, há mais de 5 anos.

Neste artigo, quero compartilhar minha visão sobre o que entendo ser um bom programador de fato, e o que você pode fazer para atingir esse nível.

Precisa decorar todos os códigos?

Para começar, quero discutir o que considero que um bom programador não é.

Comecei a programar dentro da área acadêmica, durante meu TCC em Biomedicina, uma área do conhecimento distante da computação. Naquele momento, o foco do meu aprendizado estava voltado para a resolução de um problema prático: analisar um enorme volume de dados que havia gerado em experimentos em laboratório.

No começo, ter um objetivo claro – a escrita do meu TCC – ajudou muito a motivar meu aprendizado em Python. Contudo, quando decidi seguir para a pós-graduação e voltar meu projeto para a análise de dados e programação, surgiram muitas incertezas.

Será que conseguirei ser um programador tão bom quanto quem cursou uma faculdade de Ciências da Computação? Quantos conceitos e conhecimentos me faltariam, em função da minha trajetória pouco ortodoxa no mundo da programação? Afinal de contas, quem faz Ciências da Computação deve saber de tudo, não é mesmo?

Quando começamos a aprender a programar, é muito comum termos o sentimento de que não somos bons o suficiente porque não “sabemos tudo” o que há para saber. Entretanto, ao longo dos anos, fui percebendo que “saber de tudo” não é essencial para nenhum programador. Programadores com décadas de experiência também procuram por respostas no Google, mesmo para dúvidas relativamente simples: “como faço para ler um arquivo de texto em Python?”.

Da mesma forma em que um engenheiro não tem a solução de todas as integrais em sua cabeça, e um escritor não conhece todos os parágrafos de todos os livros, programadores também não vão decorar a forma de fazer cada operação possível em uma linguagem. Saber algo de cor é consequência de experiência e repetição, não um indicativo de capacidade técnica.

Então, o que é um bom programador?

Se saber todos os códigos e conceitos não fará de você um bom programador, o que é preciso fazer? De forma bastante sucinta, a minha resposta é: foque em resolver problemas.

Quero enfatizar: bons programadores resolvem problemas. Seja na empresa onde trabalha, no seu negócio ou na sua vida pessoal: o valor do seu código vem de encontrar um problema a ser solucionado, entendê-lo profundamente e resolvê-lo de forma eficaz.

No livro Coders at Work, o autor Peter Seibel entrevista diversos programadores para entender o processo criativo de cada um. Na conversa com Jamie Zawinski, um dos criadores do Netscape (navegador de internet dos anos 90), há o seguinte trecho (em tradução livre):

Seibel: Qual é a coisa com que você trabalhou [no navegador Netscape] de que você mais se orgulha?

Zawinski: Na verdade, é o simples fato de que nós publicamos [o Netscape]. O negócio todo. […] Não é que eu tenha orgulho do código; apenas de que foi feito. De muitas formas, o código não era muito bom, porque ele foi feito muito rapidamente. Mas ele fez o seu trabalho. Nós publicamos – isso é o que importa. […] Um mês depois, dois milhões de pessoas estavam rodando um programa que eu havia escrito. Foi inacreditável. 

Como Zawinski deixa claro, o que importa no final das contas é atingir o seu objetivo: publicar o código, rodar o programa, gerar os resultados. Um programa de computador é uma sequência de passos e instruções que, quando concluídos, chegarão em alguma tarefa realizada. Se a tarefa for concluída com sucesso, então o fato de alguns loops serem pouco otimizados, variáveis terem nomes ruins e algumas porções do código terem sido copiadas e coladas a partir de outras, é algo secundário.

Com isso, não quero dizer que acho bom ter códigos bagunçados, complexos, sem documentação e não testados. Na realidade, sou uma das pessoas que mais presta atenção na estruturação de código e boas práticas em programação que conheço (possivelmente até demais). Mas existem milhares de projetos no GitHub que, apesar do design perfeitamente estruturado e dos scripts lindamente organizados, jamais resolveram um problema na vida real.

Se eu tiver que escolher entre um código com bugs que resolve meu problema hoje ou a promessa de um código perfeito daqui um ano, adivinhem qual vou escolher?

O que faço para ser um bom programador?

Dito tudo isso, que passos você deve tomar para se tornar um bom programador?

Na minha opinião, não há outro caminho senão praticar, praticar e praticar. E para fazer isso, nada melhor do que ter um objetivo prático em vista – da mesma forma como eu tive no meu TCC. Não há nada de errado em “aprender por aprender”, mas a nossa motivação é potencializada quando temos um objetivo claro à nossa frente.

Não é coincidência que, aqui na Asimov, insistimos tanto em ter projetos práticos dentro de cada uma de nossas trilhas. Todos na empresa passaram por uma evolução semelhante à minha e entendem o potencial que existe em desenvolver projetos práticos. E a melhor parte é que você aprende algo novo enquanto desenvolve uma solução. Atingir o seu objetivo é duplamente gratificante!

Olhe ao seu redor: existe algum problema que você poderia resolver com programação? Talvez a sua empresa tenha processos repetitivos que consomem dias de trabalho no Excel. Ou talvez, sempre no início de cada mês, você precise mandar os mesmos e-mails para as mesmas pessoas, fazer as mesmas transferências bancárias, baixar os mesmos documentos, organizar as finanças na mesma planilha…

Uma vez identificado o seu objetivo, não se preocupe se não souber como fazer algo. Os momentos em que mais evoluí como programador foi quando não fazia ideia de como resolver um problema.

Como compartilho meu código com colegas que não sabem programar? Talvez eu tenha de desenvolver uma interface ou dashboard para isso.

Como faço para customizar um modelo de Machine Learning além dos parâmetros disponíveis? Bom, acho que vou precisar aprender a criar um do zero

Meu código funciona, mas levo horas para executá-lo? Vou ter que estudar sobre otimização e refazer meu código.

Em resumo: para ser um bom programador, resolva problemas. E para se tornar bom em resolver problemas, pratique o máximo possível, com os mais variados problemas

Espero que o meu relato tenha feito sentido para você. Se você está começando sua carreira como programador ou se já programa há anos, deixe seu comentário com seu ponto de vista para que possamos enriquecer a discussão.

8 respostas

  1. Juliano, gostei muito do seu artigo, meu nome é Hélio, tenho 43 anos, faço faculdade de Engenharia de computação, sou aluno da Asimov, trabalho em uma empresa de automação em estacionamentos, como analista de testes QA, mas minha verdadeira paixão é a programação. Já tenho uma graduação em análise e desenvolvimento de sistemas, mas nunca pratiquei programação, como hoje em dia. E meu sentimento é semelhante ao que vc mencionou, a coisa começa a fazer sentido, quando utilizamos a programação para resolver algum problema real. Tenho estudado e praticado muito, pois meu intuito (sonho) é fazer minha transição de carreira para a área de desenvolvimento.

    1. Oi, Hélio!

      Obrigado pelo comentário, que bom que o artigo fez sentido para você. Com toda a certeza, quando começamos a resolver problemas reais é que sentimos o verdadeiro poder da programação. E nunca é tarde para começar 🙂

      Muito sucesso para você, nos estudos e na carreira!

  2. Muito bom!

    Sempre tive bastante dificuldade em desenvolver um raciocínio quando era preciso programar. Lembro de, na faculdade, quando me matriculei em uma disciplina de programação e via a apresentação de soluções para um problema, eu ficava “como assim, rapaz, como é que não pensei nisso… mas o raciocínio é bem diferente da vida real…”… e assim eu ficava viajando, mas travava sempre que eu tentava.

    Estou agora buscando o caminho de volta na Asimov e com uma visão bem diferente de anos atrás.

    1. Oi Raymundo! É bem assim mesmo, precisa praticar. Não tem outro jeito!

      Com mais experiência, vamos entendendo melhor como programação funciona de fato. E aí deixamos de nos preocupar com questões pontuais de sintaxe do código, e foca mais em como resolver problemas.

      Te desejo bons estudos na Asimov!

  3. Primeiramente gratidão por compartilhar parte da sua trajetória de vida, muito legal seu artigo, nos trás várias reflexões.
    Atualmente com 45 anos, apesar de ser formado em Exatas, mais precisamente em Ciências da Computação, pela UAM – Universidade Anhembi Morumbi, sempre fugi de 2 “monstros” a matemática e a programação, devido a minha base deficitária das escolas públicas, em que estudei por toda minha vida.
    Sempre optei pela área de infraestrutura, com foco em suporte técnico aos colaboradores de todos nos níveis da empresa. Tirei diversas certificações da Microsoft, ITCerts entre outras e por último da AWS, mas desejo de uma vez por todas, ultrapassar esta barreira psicológica e começar a programar em Python, visando melhorar meus ganhos financeiros e porque não dizer até mesmo de qualidade de vida, pois poderia passar a trabalhar de modo hibrido ou exclusivamente home office, tanto para empresas nacionais quanto internacionais, algo que é praticamente inviável ou até mesmo impossível, para profissionais que prestam suporte técnico locais, principalmente para ambientes críticos, como estou atualmente, atuando na Tesouraria do maior Banco privado do Brasil.
    Sinto que infelizmente a área de infra, está bastante desvalorizada, quando comparada com a área de desenvolvimento, tanto em termos diretos quanto os indiretos.
    Enfim, minha maior dificuldade é realizar o raciocínio lógico e abstrato, creio que igualmente a mim, existam outras pessoas compartilhando deste dilema.
    Se puder realizar uma sugestão, criem um material, para auxiliar pessoas com está dificuldade, pois creio ser um dos principais motivos, de muitos desistirem desta área tão fascinante, que é a programação.

    Espero poder contar com a Asimov, nesta jornada!

    1. Olá, Marcos! Obrigado pelo comentário e elogios. Muito legal saber da sua trajetória também 🙂

      De fato, a área de desenvolvimento é uma das mais quentes do mercado atual. E Python tem sido um grande expoente dessa procura.

      Sua sugestão de raciocínio abstrato é ótima, vou repassar aos professores. Com certeza é uma das primeiras barreiras que temos que enfrentar quando começamos a estudar programação. É por isso que as primeiras aulas do nosso curso Python Starter (disponível em todas as trilhas) é fundamental, pois explicam o conceito de algoritmos e lógica de programação, sem nem entrar na linguagem Python em si.

      Te desejo bons estudos na Asimov!

  4. Além de legal, esse post foi assertivo com minha situação!

    Tem pouco tempo que comecei a me aventurar neste vasto universo da programação. É tanta informação que é difícil saber por onde começar.

    Ter um problema concreto para resolver é que está me dando o norte. Está apontando o caminho para qual método utilizar. Claro que explicando dessa forma parece simplista. Mas na prática é um verdadeiro garimpo de ideias.

    E o mais fascinante dessa jornada não é os problemas que você resolve. Pois logo, esses ficam para trás. Mas sim os novos problemas que você descobre. E assim, pouco a pouco vamos construindo o nosso conhecimento.

    Apesar de ser Biomédico como o autor desse post (me identifico kkk), meu início foi mais simplório. Só queria formatar o texto dos artigos do meu blog para “justificado”. Confesso que tenho um pouco de toque com isso. Talvez seja sequela da minha vida acadêmica.

    Esse pequeno desafio me fez conhecer HTML, depois CSS, agora estou envolvido com Java Script e flertando com Python. E de quebra, comecei a aprender mais afundo sobre sistemas operacionais Windows e Linux, com a intenção de otimizar minha máquina o máximo possível já pensando nas minhas futuras aplicações.

    Fiz minha primeira “formatação consciente” esses dias. Consciente, porque antes era tudo meio inconsciente. Só saia clicando nas coisas sem saber o porque e qual implicação daquilo. Resultado disso, tenho uma máquina tinindo. Nunca vi meu PC tão ágil. Até para ligar está mais rápido.

    Enfim, não vou dar mais detalhes, para que isso não vire um post aqui dentro dos comentários. Mas é fato que tenho aprendido muito. Um desafio resolvido tem puxado o desafio seguinte. Um desses desafios me trouxe aqui, para ASIMOV.

    1. Oi José! Muito legal o seu depoimento! E bacana também encontrar um colega de graduação 🙂

      Você pegou bem a ideia – em programação, cada dia é um novo desafio, e um novo aprendizado. Mesmo que já está na carreira há décadas costuma dizer que você sempre está aprendendo algo novo.

      Acredito que há muitos outros como nós, “não-programadores” de formação, mas que hoje trabalham na área. E no meio disso tudo, há muito espaço para crescer e aprender, seja em projetos pessoais ou na carreira profissional.

      Muito bom ter você na Asimov, espero que faça bom proveito das aulas e cursos!

      Abraços!

Deixe um comentário

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