7 hábitos de programadores de alto desempenho

Programadores iniciantes gastam muito tempo adquirindo o conhecimento necessário para concluir a entrevista. Eles resolvem problemas e melhoram seus currículos. Mas a parte mais interessante começa depois que o programador recebe a posição desejada - em alguma startup, no Google, na Amazon ou em outro lugar. Muitas vezes acontece que o conhecimento e as habilidades que ajudaram uma pessoa a encontrar um emprego não correspondem ao que você precisa saber e ser capaz de desempenhar suas tarefas diárias.



O autor do artigo, cuja tradução publicamos hoje, diz que a equipe em que trabalha foi inspirada na história da TechLead sobre 7 hábitos de programadores altamente eficazes. Os membros da equipe decidiram expressar seus próprios pensamentos sobre esse assunto. Aqui, na forma de dicas, fornece uma análise de 7 habilidades de programadores eficazes.

1. Aprenda a ler o código de outra pessoa



Todos, exceto você, escrevem códigos terríveis. É por isso que a capacidade de um programador de trabalhar com o código de outra pessoa é uma habilidade valiosa. Essa habilidade dá a quem a possui muito bem.

O programador precisa ser capaz de entender o código de outra pessoa. Afinal, este é o trabalho dele. Não importa quão confuso é esse código ou mal escrito. A propósito, "código de outra pessoa" pode ser o que foi escrito pelo próprio programador, digamos, um ano atrás.

Essa habilidade afeta positivamente o programador de duas maneiras. Primeiro, a capacidade de ler o código de outra pessoa torna possível entender como o código de baixa qualidade funciona. Examinando o trabalho de outras pessoas, você pode descobrir quais técnicas são trabalhadores e quais não são. Em segundo lugar, e mais importante, ajuda a revelar as peculiaridades da percepção do código de outra pessoa por outras pessoas, para descobrir qual código é percebido facilmente e qual é difícil.

Se você ler o código de outra pessoa e encontrar algo que não gosta, tente não ficar calado. Isso aumentará sua credibilidade aos olhos dos colegas.

Preste atenção às pessoas com quem você trabalha, sobre a importância de escrever um código fácil de manter, sobre a importância dos bons comentários. Isso fortalecerá ainda mais seu status na equipe.

Seu próprio código deve ser projetado com uma qualidade tão alta que fique claro e sem documentação. De fato, bons programadores não precisam documentar o código. Isso é uma perda de tempo, o tempo que seria melhor gasto em programação e reuniões.

A capacidade de entender código de baixa qualidade, entre outras coisas, ajuda a fazer alterações nesse código. Às vezes, isso significa editar código no qual alguém não é muito bom nisso. Por exemplo, um dia encontramos um script que envolvia tecnologias como PowerShell, Python e Perl. Em Perl, não entendemos muito bem. No entanto, conseguimos entender o projeto profundamente, conseguimos entender a essência do que estava acontecendo e fazer as alterações necessárias no código. Isso se tornou possível devido ao fato de termos entendido o código que precisávamos alterar, incluindo o código dos scripts Perl.

A capacidade de entender o código de outra pessoa aumenta o valor do programador, porque ele pode entender como até sistemas sofisticados são organizados, de modo que, quando você os olha, alguém simplesmente desiste.

2. Desenvolver um talento para projetos mal sucedidos


Existem muitas habilidades que levam tempo para dominar. Um deles, que temos certeza de que vale a pena dominar, é desenvolver um entendimento de quais projetos você não deve lidar e quais projetos com alto grau de probabilidade podem resultar em uma "corrida pela sobrevivência".

Nas grandes empresas, sempre há muitos projetos nos quais os programadores estão trabalhando. Mas nem todos esses projetos serão concluídos. Nem todos eles serão benéficos. Entre eles, podem estar aqueles que não têm significado comercial (pelo menos para o programador). Alguns projetos, geralmente promissores, podem sofrer deficiências gerenciais. Isso não significa que você deve desistir de algumas idéias imediatamente depois de perceber que não concorda com quem as oferece. No entanto, se o autor da ideia não puder explicar claramente quais os benefícios que a empresa pode trazer ao projeto após sua conclusão, talvez não valha a pena começar um projeto desse tipo.

Além disso, alguns projetos podem ser excessivamente orientados para a tecnologia, em vez de resolver um problema específico. Isso às vezes, mesmo no início do trabalho, nos permite entender que a conclusão de um projeto desse tipo não trará muitos benefícios.

Para aprender rapidamente a reconhecer projetos pouco promissores, você precisa participar de muitos desses projetos. Portanto, se você está no estágio inicial da carreira de um programador, não gaste muito tempo tentando avaliar as perspectivas de todos os projetos que chegam até você. Com o tempo, você desenvolverá um instinto interno, guiado pelo qual poderá reconhecer rapidamente projetos que estão fadados ao fracasso.

3. Evite reuniões



Tudo o que você trabalha, você não pode prescindir de reuniões. Isso se aplica a absolutamente todos. O fato é que você precisa encontrar uma linguagem comum com gerentes de projeto, usuários, clientes. No entanto, as reuniões têm uma característica desagradável: às vezes, elas ocupam quase todo o dia útil. É por isso que é muito importante aprender a evitar reuniões desnecessárias. Talvez seja melhor não "evitar reuniões", mas se esforçar para "controlar o tempo gasto nas reuniões". O objetivo disso é dedicar tempo apenas às reuniões realmente necessárias, às que contribuem para o desenvolvimento de projetos.

O método de gerenciamento de tempo mais comum usado nas reuniões é alocar um bloco de duas horas por dia, que se transforma em uma reunião contínua. Muitos organizam reuniões recorrentes para o tempo que consideram mais apropriado. Essas reuniões são usadas para discutir questões de trabalho.

Outra maneira de gerenciar o tempo é começar a trabalhar mais cedo do que outros, a fim de gerenciar seus negócios. Por exemplo, preferimos fazer exatamente isso. E, a propósito, se você chegar ao escritório mais cedo, será muito mais calmo trabalhar lá do que o normal. A maioria das pessoas que chega cedo é semelhante. Eles fazem isso para ter tempo para lidar com seu trabalho. Portanto, eles não interferem no trabalho dos outros.

No nosso caso, isso é importante para membros individuais da equipe. O fato é que nosso trabalho leva tempo para se concentrar totalmente em uma determinada tarefa. No momento, não nos comunicamos com ninguém. Obviamente, existem situações em que, para resolver um problema, você precisa discuti-lo com alguém e trabalhar em conjunto. Mas depois que todas as perguntas forem resolvidas, o desenvolvedor precisará apenas escrever código. Em geral, estamos falando de entrar em uma certa zona de conforto na qual o programador pode constantemente ter em mente tudo o que está relacionado à tarefa que ele está resolvendo. Se ele é constantemente interrompido, ele pode ter dificuldade em retornar rapidamente ao que estava distraído.

4. Master GitHub



Quando você olha para alguns programadores de alta classe, você sente que eles começaram a usar o GitHub no primeiro dia de suas vidas. Eles entendem o significado de cada comando e parâmetro, lidam facilmente com seus assuntos.

Mas outros encontram o GitHub em seu primeiro trabalho. Para eles, o GitHub é um verdadeiro inferno, construído a partir de equipes obscuras e processos misteriosos. Eles nunca têm certeza absoluta do que estão fazendo. É por isso que todos os tipos de "dicas" no GitHub são muito populares.

O acima é verdadeiro para qualquer sistema de controle de versão. Se for usado corretamente, é muito útil. Se você usá-lo incorretamente, interfere terrivelmente no trabalho. Um simples PR ou commit pode facilmente se transformar em um pesadelo que leva um programador várias horas. Este tempo será gasto em desvendar os meandros dos galhos e garfos. Além disso, se você esquecer regularmente o download da versão mais recente do repositório para sua máquina, poderá lidar constantemente com conflitos de mesclagem. Não há nada de bom nisso.

Se você precisar de uma “folha de dicas” no GitHub - faça-o.

Aprenda a trabalhar produtivamente com o GitHub. Nesse caso, não importa exatamente como você consegue isso.

5. Escreva um código simples e fácil de manter



Alguns programadores iniciantes têm a seguinte característica: tentam, em um projeto, realizar tudo o que sabem. O ponto aqui é que eles se esforçam para usar seu conhecimento sobre programação orientada a objetos, estruturas de dados, padrões de design e novas tecnologias em cada pedaço de código que eles criam. Isso complica desnecessariamente o código devido ao fato de que, com essa abordagem, a tarefa do programador pode ser facilmente afetada, por exemplo, pelos padrões de design que ele já implementou na prática.

Há um equilíbrio entre estruturas de projeto excessivamente complexas e código simples. Os padrões de design e a programação orientada a objetos são projetados para simplificar o código em projetos de grande escala. No entanto, quanto mais recorremos a abstrações e encapsulamentos, mais caixas pretas existem em nossas soluções, mais difícil é depurar o código dessas soluções.

6. Aprenda a dizer não e priorize


Essa recomendação, de fato, pode ser dada a qualquer pessoa - pelo menos um analista financeiro, pelo menos um programador. Mas pode-se notar que há um sentimento de que todo mundo quer algo especial dos técnicos. Por exemplo, se você é um engenheiro de análise de dados, poderá oferecer tarefas muito mais amplas do que o que você deve fazer. Algumas equipes precisam de algum tipo de amostra de dados, outras precisam de dados resumidos e outras precisam de novos pipelines.

Deve-se notar que a capacidade de priorizar e a capacidade de dizer não podem realmente ser duas habilidades separadas. No entanto, essas habilidades estão intimamente relacionadas entre si. Onde houver necessidade de um deles, o segundo geralmente é necessário. A priorização é quando o tempo é gasto apenas no que tem um sério impacto na empresa. E a capacidade de dizer não é uma recusa em fazer o trabalho que outra pessoa deveria fazer.

Aprender sobre o que estamos falando pode ser difícil, pois as pessoas geralmente se esforçam para resolver todos os problemas que estão enfrentando. Isto é especialmente verdade para aqueles que acabaram de desaprender e conseguiram seu primeiro emprego. Anteriormente, em seus estudos, eles recebiam tarefas com as quais lidavam bem. Agora, no trabalho, eles esperam o mesmo e se esforçam para não decepcionar ninguém.

Aqui você precisa entender que em grandes empresas há um número infinito de tarefas. O mais importante é assumir apenas as tarefas que podem ser resolvidas.

Existem muitas habilidades que não são testadas em uma entrevista. Eles raramente estão disponíveis na escola. Freqüentemente, essa situação surge apenas por causa das características do ambiente de aprendizagem, e não porque alguém não queira mostrar aos alunos as tarefas reais que eles podem enfrentar na realidade.

7. Aprenda a pensar em como seu desenvolvimento será usado.



Há uma habilidade para a qual é difícil organizar um teste durante uma entrevista. Situações em que é necessário são difíceis de reproduzir durante o estudo. É sobre a capacidade de ver os erros que o usuário final de um sistema de software pode cometer. Geralmente chamamos isso de "pensar nos casos de uso do programa".

Na verdade, esse "pensamento de cenário" é apenas um nome bastante suave para o que é chamado de "proteção do tolo".

Por exemplo, como a maior parte do trabalho do programador é oferecer suporte ao código, ele geralmente precisa alterar o código, que está intimamente relacionado a outra coisa. Mesmo uma simples mudança de algo requer uma pesquisa por todos os locais onde é usada. Por exemplo, um objeto, método, API de um determinado sistema pode mudar. Se você fizer uma alteração irracional no sistema, ele poderá "interromper" o trabalho de partes completamente inesperadas do programa. Além disso, estamos falando de alterações de qualquer escala - mesmo algo como uma alteração de tipo no banco de dados.

Essa habilidade também inclui a capacidade de encontrar e analisar situações limítrofes que podem surgir ao trabalhar com o sistema. Isso também inclui a capacidade de compreender um esquema de decisão de alto nível no estágio de design.

Isso também se aplica ao desenvolvimento de partes maiores de sistemas, como módulos ou microsserviços. Ao começar a resolver esses problemas, você precisa pensar sobre como exatamente as entidades que planeja criar serão usadas. Você precisa pensar nos cenários de uso indevido, nas várias opções de uso e no que você criar pode ser usado de maneira completamente óbvia à primeira vista.

O processo de escrever código é apenas parte do trabalho de resolver um determinado problema. É fácil criar um programa que funcione bem no seu computador. Mas o código com o qual alguém está trabalhando pode facilmente se comportar de maneira bastante diferente do que o esperado inicialmente. Como o código que você escreve será usado na produção? Com quais sistemas ele terá que interagir? De quais processos ele pode se tornar parte? Ele não pareceria muito primitivo e limitado a um programador que teria que apoiá-lo depois de alguns anos? Essas são perguntas muito difíceis.

Sumário


Neste artigo, apresentamos uma visão geral de 7 habilidades comuns aos programadores de alto desempenho. Esperamos que você tenha encontrado entre eles aqueles que você deseja desenvolver.

Caros leitores! O que você aconselharia a dominar para alguém que se esforça por profissionalismo em programação?

Source: https://habr.com/ru/post/pt457382/


All Articles