paint-brush
Atributos importantes de um programador experiente: trabalho e comportamentopor@ivandovhal
1,689 leituras
1,689 leituras

Atributos importantes de um programador experiente: trabalho e comportamento

por Ivan Dovhal12m2022/07/13
Read on Terminal Reader
Read this story w/o Javascript

Muito longo; Para ler

Existem diferentes abordagens para definir o conjunto necessário de habilidades de um programador. Os requisitos variam dependendo da empresa, do projeto e da equipe com a qual você trabalha. Um programador experiente é aquele que não apenas conhece a teoria, mas trabalha com problemas práticos reais; sabe como encontrar soluções para problemas fora do padrão. Existem algumas outras qualidades importantes, como o amor pela programação e o desejo de trabalhar. As demais características que descreverei podem ser divididas em duas categorias: conhecimento técnico e características pessoais. Para desenvolvedores Frontend, é React, Angular e Vue.

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - Atributos importantes de um programador experiente: trabalho e comportamento
Ivan Dovhal HackerNoon profile picture


Este artigo será especialmente útil para engenheiros iniciantes, bem como para aqueles que desejam cultivar liderança em engenharia, buscar crescimento e alcançar novos patamares. Os candidatos também saberão o que se espera deles nas entrevistas técnicas e os critérios de seleção empregados nessas entrevistas.


O "cérebro vivo" do programador ou o conjunto básico de habilidades de um desenvolvedor experiente


Existem diferentes abordagens para definir o conjunto necessário de habilidades para um programador. Os requisitos variam dependendo da empresa, do projeto e da equipe com a qual você trabalha. O mais comum define um programador "experiente" como aquele que não apenas conhece a teoria, mas trabalha com sucesso com problemas práticos reais; sabe como encontrar soluções para problemas fora do padrão.


Aparentemente, todos os programadores experientes têm uma característica importante em comum: a capacidade de pesquisar informações relevantes. Existem algumas outras qualidades importantes, como o amor pela programação e o desejo de trabalhar. Se alguém não deseja trabalhar, mesmo uma experiência e talento impressionantes serão inúteis. No trabalho, cruzei com aqueles que eram bem versados ​​em tecnologia, mas relutantes em trabalhar.


As habilidades básicas do programador envolvem boa memória, capacidade de se concentrar e aprender novas tecnologias e pensamento lógico. Resumindo, um programador experiente deve ter um "cérebro vivo" que funcione bem. Você não pode continuar sem ele. Essas características importantes determinam sua propensão para a programação como profissão desde a infância.


As demais características que descreverei podem ser divididas em duas categorias: conhecimento técnico e características pessoais. Se o conhecimento técnico pode ser adquirido em vários treinamentos, cursos e aprimorados na prática, as qualidades pessoais (ou soft skills) não são tão fáceis de adquirir se forem contra a natureza de uma pessoa. De qualquer forma, programadores experientes fazem seu próprio caminho e aprendem muito nessas duas áreas.


É claro que um programador experiente é bem versado em uma ou mais tecnologias e alguns frameworks. Mas, antes de dominar uma determinada tecnologia, o programador adquire conhecimentos sobre a arquitetura básica de sistemas e redes, estruturas de dados e algoritmos; administração de sistemas e Ciência da Computação em geral. Tanto os administradores de sistema quanto os DevOps seguem esse caminho. Em termos de programação como tal, é importante entender estruturas de dados e algoritmos, abstrações de tecnologia e os princípios OOP.


Depois de aprender uma determinada linguagem, um programador passa a estudar frameworks e bibliotecas. São abstrações superiores que unem as menores. Para desenvolvedores Frontend, é React, Angular e Vue.


Os pontos a seguir descrevem o funcionamento interno do 'cérebro vivo' de um programador ideal


🔴 Compreensão profunda da tecnologia e encontrar a melhor abordagem


Um programador experiente deve conhecer várias tecnologias e aplicar as melhores abordagens. Esse conhecimento não é superficial, mas dominado na prática. Uma abordagem sistemática permite que você veja o quadro geral do projeto; percebê-lo como um todo e não parcialmente, e então escolher a melhor abordagem para o seu desenvolvimento. Os conceitos de produtividade e eficiência às vezes são confundidos. Você pode terminar o projeto rapidamente, mas cometer muitos erros, e a depuração levará mais tempo do que um cuidadoso processo de desenvolvimento passo a passo.


Velocidade nem sempre é sinal de qualificação de Engenheiro Sênior. Em vez disso, a orientação para o resultado é uma característica integral. A eficiência das ações e movimentos pesa mais do que inúmeras linhas de código e velocidade. Encontrar uma abordagem para o desenvolvimento do projeto em que a qualidade e a velocidade sejam equilibradas está ao alcance de um engenheiro experiente.


🔴 Permanecer atento ao UX


Um bom hábito de um programador é estar constantemente atento à experiência do usuário — pensando em como o programa ficará do ponto de vista do usuário e se será conveniente e claro.


Você não precisa ser um designer para prever como um recurso funcionará. Também será útil dominar o teste de código para evitar erros no processo de desenvolvimento.


🔴 Compromisso com o processo técnico


Seguir o processo técnico pode ser considerado um bom hábito de qualquer programador, especialmente um experiente. Esta é uma nuance crucial. Antes de alterar uma variável ou função, você precisa verificar onde ela está sendo usada.

Você precisa se aprofundar na documentação técnica; isso ajudará a evitar erros tolos e economizar tempo e os nervos do líder técnico. Bem, pessoas experientes sabem disso e ensinam outras pessoas 🙂


🔴 Escrever código legível que seja fácil para outras pessoas trabalharem


Esta habilidade deriva da anterior. Será fácil para todos trabalhar no projeto desde que o processo técnico seja seguido minuciosamente. Lembre-se de que outras pessoas também podem trabalhar com seu código, portanto, escreva como se você tivesse feito isso sozinho. Sua “muleta” pode voltar como um bumerangue. É melhor testar e refatorar regularmente seu código, ser cuidadoso sobre o que você chama de variáveis ​​e funções e pensar sobre os outros.


Escolher a tecnologia certa para o projeto é uma habilidade crucial. Programadores experientes às vezes insistem em usar tecnologias com as quais estão acostumados, mesmo quando o restante da equipe terá dificuldades com isso. Em vez disso, você deve tomar decisões que considerem toda a equipe; consultar, discutir e coordenar suas ações com os outros.


🔴 Análise qualitativa e desenvolvimento da arquitetura


Para analisar e entender qualitativamente a arquitetura, você precisa conhecer a teoria e ter bastante experiência prática. Um Engenheiro Sênior é capaz de realizar uma análise abrangente de requisitos e desenvolver uma arquitetura de software com implementação efetiva em vários níveis.


Ao mesmo tempo, é essencial encontrar um equilíbrio entre a legibilidade do programa e a eficiência do desenvolvimento. Para evitar problemas na fase de planejamento, um programador experiente conhece diferentes tecnologias e pode escolher a certa.


🔴 Capacidade de explicar esquematicamente


Para programadores experientes, e especialmente para Tech Leads, a capacidade de explicar informações sobre os princípios da tecnologia graficamente e usando diagramas simples é uma habilidade muito útil.

Tabelas, gráficos e diagramas fornecem uma visão holística da tecnologia e do projeto. A abordagem do sistema de visualização simplifica o trabalho de toda a equipe. Dessa forma, os Tech Leads podem transmitir a imagem completa para outras pessoas.


🔴 Criando um fluxo de trabalho eficaz


Engenheiros experientes distinguem entre o desempenho da equipe e o seu próprio. Para aumentar a eficiência da equipe, eles criam um fluxo de trabalho ou escolhem novas tecnologias, como implantação automática.

Além disso, eles tentam encorajar outros programadores da equipe a aprender mais e analisar seus erros durante a revisão do código.


Perfeccionismo saudável, ou como escrever código de qualidade e não morrer no trabalho


Um programador experiente está bem ciente da importância de atingir os objetivos de negócios e é capaz de equilibrar a implementação e a qualidade do código. Afinal, se você se aprofundar na qualidade do código, uma tarefa pode levar um mês e você poderá refazer as coisas até os últimos dias, levando todo o projeto à perfeição. Mas para que o negócio cresça, você precisa encontrar um equilíbrio entre qualidade e requisitos do cliente.


Existem programadores que se concentram apenas em tarefas de negócios e enchem seu código de 'muletas'. Eu costumava trabalhar em um projeto, que teve que ser totalmente encerrado após 2 anos de desenvolvimento porque cada novo recurso levava um mês para ser implementado. Aquele 'cozido' de abordagens e tecnologias era simplesmente impossível de se trabalhar. É assim que o desejo de fazer mais rápido leva a resultados tristes.


Eu conhecia programadores que se aprofundaram na qualidade do código e ficaram presos em uma tarefa por 2 meses. Honestamente, fiquei surpreso por eles terem mantido seus empregos. No final das contas, a tarefa acabou sendo intransponível. Isso significa que encontrar um equilíbrio é vital.


O perfeccionismo está perto do meu coração. No entanto, tem que haver uma abordagem saudável sem exagerar. Normalmente, as pessoas não mudam. Mesmo em entrevistas, noto essas pessoas e entendo que trabalhar com elas será um desafio.


Os pontos a seguir destacam as vantagens do perfeccionismo saudável


🔴 Capacidade de trabalhar em equipa


Por padrão, fica claro que os jogadores da equipe são valorizados em qualquer projeto. Isso fala de sua natureza não conflituosa e da capacidade de assumir responsabilidades, comunicar-se e ser confiável.

Você pode ter sua própria opinião e ainda ouvir os outros.


🔴 Confiança em tarefas complexas


Programadores experientes são confiantes, mas não teimosos. Eles não têm medo de tarefas difíceis, pois já atingiram um certo nível de especialização e possuem conhecimento técnico suficiente, permitindo-lhes lidar com complexidades.


Engenheiros experientes podem planejar um projeto de diferentes perspectivas, fornecer bons conselhos e permanecer orientados para os resultados desde o desenvolvimento da estrutura até a codificação. Essas pessoas são muito valorizadas na equipe; é um prazer me juntar a eles em batalhas profissionais. Você sempre pode aprender alguma coisa.


🔴 Desejo constante de desenvolver e encontrar as informações necessárias


Mais uma vez, engenheiros experientes são bem versados ​​em várias estruturas e são capazes de trabalhar com várias tecnologias. E para isso, você precisa evoluir constantemente, e buscar oportunidades de aprender coisas novas fora do trabalho. Pessoas experientes aprendem rapidamente e captam as novas tendências que são necessárias para o seu trabalho. Alguns engenheiros pensam que basta aprender apenas com seus próprios erros. De fato, na prática, você ganha muito conhecimento, mas precisa aprofundá-lo com base nas experiências de outras pessoas. Hoje há bastante informação online, você pode realmente aprender muito.


Provavelmente, dominar o domínio de um projeto seria uma vantagem adicional. Por exemplo, se você estiver em um projeto Fintech, espera-se que você entenda o valor do software de uma perspectiva de negócios e conheça certos processos funcionais nessa área.


🔴 Capacidade de manter o equilíbrio


Quando um projeto está em desenvolvimento, várias situações imprevistas podem ocorrer e bugs podem surgir. Eles pegam programadores inexperientes de surpresa e os encurralam. Engenheiros experientes sabem que tudo deve ser resolvido com a cabeça fria, porque entrar em pânico e gritar não vai ajudar. Embora, talvez, os bugs tenham sido causados ​​puramente por fatores humanos.

Um programador experiente encontrará uma solução alternativa, mantendo o equilíbrio. É mais fácil encontrar uma solução fora do padrão para um problema com calma do que emocionalmente.


🔴 Capacidade de compartilhar conhecimento e dar feedback


Idealmente, programadores experientes compartilham conhecimento com outros; participe de webinars, conferências e hackathons. Compartilhar o conhecimento de um livro ou da teoria de outra pessoa é uma coisa, e contribuir com sua própria experiência - suas "dores" do passado - é outra. O networking é realmente útil, mesmo que alguns não gostem.


Um programador experiente sabe como é importante dar feedback sobre o trabalho dos outros. Isso dá aos profissionais juniores a oportunidade de entender suas áreas de crescimento potencial, o que corrigir e quais erros evitar.


Feedback oportuno é sobre gestão transparente e comunicação eficaz. É bom que os programadores na posição de Líder de Equipe entendam e pratiquem isso.


🔴 Capacidade de admitir seus erros


Outra boa característica de um programador experiente é admitir erros. Essa habilidade significa que a pessoa sabe como assumir responsabilidades. Os erros são uma oportunidade de aprender uma lição e ganhar uma experiência valiosa para o futuro. Em vez de assumir a culpa pelos bugs de outra pessoa, o Tech Lead pode fornecer insights úteis durante a revisão do código e dizer como resolver um problema específico.


Programadores experientes definitivamente não jogarão um júnior 'sob o ônibus' e apontarão o dedo para a falha do novato. Toda a equipe trabalha, e cada um tem sua área de responsabilidade. A brincadeira de alguém afeta toda a equipe. Ter isso em mente facilita a construção de relações de confiança e transparência.


Falhas que os idosos não podem permitir


As falhas podem ser técnicas e humanas. Por exemplo, se um funcionário não vai trabalhar regularmente, é um fator humano.

Quanto a falhas técnicas importantes, não as encontrei, porque não costumava trabalhar com programadores abaixo do nível Sênior. Obviamente, as possíveis falhas dos engenheiros sênior e júnior estão em diferentes dimensões.


Eu chamaria isso de falha ao enviar código para um repositório sem executar um teste. O melhor é automatizar este processo, tal como é feito na nossa empresa. Outra falha é o código 'crutching'. Às vezes, há um desejo de fazer código rapidamente, mas se esse processo acelerado degradar a qualidade, isso se tornará aparente no futuro.


Existem várias abordagens para a qualidade do código. Os princípios SOLID definitivamente devem ser considerados. Se você fizer uma função polimórfica, precisará garantir que ela não quebre as áreas onde já é usada. Ao fazer qualquer correção de código, você precisa considerar quais serão as consequências e como elas afetarão você em geral.


Não seguir o processo técnico é uma falha do programador. No contexto da minha equipe, é criar solicitações pull, executar um teste de qualidade de código, realizar testes funcionais e verificar tarefas que você mesmo executa. Se você seguir o processo técnico desenhado na empresa, as falhas serão minimizadas. No entanto, devo admitir que nem todas as empresas têm processos devidamente configurados, e isso também pode ser um pré-requisito para futuras falhas.


Em geral, acho que os fracassos dos Seniores derivam da preguiça, e os fracassos dos Juniores vêm da inexperiência e desatenção. Os erros dos juniores aparecem onde você menos espera. O trabalho do Júnior, como tal, é uma falha contínua no início, que deve ser constantemente corrigida. Mas é para isso que servem os juniores.

A preguiça do sênior parece estar acostumado com um processo, e confiar nele, pensando: “bom, depois eu resolvo”. Muitas vezes nem sempre termina bem, mas ainda termina melhor do que no caso de Junior🙂


"Fakers", ou Distinguir entre programador experiente e inexperiente


Programadores inexperientes podem ser identificados em duas etapas: primeiro, durante uma entrevista e, em segundo lugar, e o pior de tudo, durante o trabalho, se você perder o "falsificador".


Perguntas que me ajudam a avaliar a experiência de um programador:


  • Anos de experiência
  • Quantos deles se dedicaram a trabalhar com tecnologia específica;
  • Uma série de perguntas altamente especializadas destinadas a determinar a profundidade do conhecimento da tecnologia e estrutura;
  • Perguntas sobre os fundamentos das habilidades linguísticas.


Esta é a primeira parte das perguntas que ajudam a determinar o grau de conhecimento de uma pessoa e as perspectivas de trabalhar em conjunto. Se um candidato ficar confuso nesta fase, as coisas só vão piorar.

Acontece que um programador tem 5 anos de experiência e é bem versado em 10 tecnologias, mas quando você faz perguntas básicas desta lista, pode não haver respostas. O mesmo provavelmente acontecerá com um conjunto de perguntas do próximo bloco.


Durante as entrevistas tecnológicas, não dou tarefas algorítmicas complexas, porque a entrevista é sempre estressante e eu odiaria agravá-la. Mesmo que um desenvolvedor esteja acostumado a trabalhar com determinadas tecnologias, esquecer como realizar determinadas tarefas é normal; ninguém é perfeito. A profundidade do conhecimento e a rápida resolução de problemas são as coisas nas quais você deve se concentrar.

No geral, avaliamos tanto as soft skills quanto as hard skills durante as entrevistas. O bloco técnico de perguntas difere dependendo da tecnologia e do projeto.


Evolução de Júnior para Sênior: Dicas de Desenvolvimento


Alguns programadores têm mentores que fornecem conselhos e orientações. Eu não tinha tudo isso. Estudei por conta própria e encontrei as informações necessárias sozinho. Embora eu tenha me formado em cibernética econômica e já conhecesse o básico, enquanto lia a filosofia de Java, era difícil entender a nova abstração.


Certa vez, os cursos de Java Rush me ajudaram muito; tudo foi facilmente explicado e eu pude praticar imediatamente. Mas não é sobre o front-end.


Foi isso que me ajudou a me tornar um programador. Estudei o restante na documentação técnica oficial, bem como procurei informações em videoaulas gratuitas. Aquilo foi o suficiente para mim.

Ao mesmo tempo, é um erro pensar que a graduação em um curso abrirá as portas para uma empresa de TI. Sem conhecimento, este pedaço de papel é inútil. Assistir a cursos por causa de um diploma não faz sentido.


Até certo ponto, você pode obter informações estruturadas, mas deve se lembrar delas e deve ser a base e o início de seu crescimento futuro. Uma das características de um bom programador é a capacidade de encontrar informações de qualidade.


Se você conseguir, tudo ficará bem. Mas se você espera que alguém soletre para você, então você está muito errado. Eu recomendaria o autodesenvolvimento e a navegação nos cursos online disponíveis. E se você já trabalha como programador, pode fazer os cursos da Udemy, aqueles que você precisa para o seu trabalho.


Quanto mais experiência um desenvolvedor ganha, mais ele percebe a importância do desenvolvimento na área de Liderança em Engenharia. E não se trata apenas dos engenheiros que já gerenciam equipes; mas também de quem está sempre por dentro das tendências, aprendendo coisas novas e desenvolvendo de forma abrangente suas hard e soft skills para compartilhar seu conhecimento e competência com os outros.