
Reflexão é uma coisa curiosa. Ainda mais interessante se for baseado em muitos anos de experiência. Sob o corte, a história sobre o destino de um programador pela boca do diretor de desenvolvimento do Parallels RAS Igor Marnat na primeira pessoa. Aproveite!
“Se você não seguir em frente, não ficará parado. O mundo está avançando, mas você não. Então, você está voltando! © (Alguém é muito inteligente)
EpígrafePara mim, a programação ainda não se tornou uma rotina, embora eu esteja desenvolvendo há mais de vinte anos. Eu acho que isso se deve ao fato de que eu tomei certas ações antes que meu fusível finalmente secasse.
Se a programação se tornou uma tarefa árdua para você, talvez minha experiência seja útil para você. Quer algo para mudar? Pelo menos algo precisa ser mudado (pensamento profundo, não é?). Nós devemos nos mudar para algum lugar. E agora, em momentos diferentes, tentei me mover para dentro, para os lados e para a largura.
Movimento profundo
A peculiaridade do nosso trabalho é que cada desenvolvedor deve ser um especialista em duas áreas - programação, como tal, e na área de assunto para a qual ele cria software. Quanto melhor e mais profundo o desenvolvedor entender essas duas áreas, mais tarefas interessantes ele poderá resolver. Quanto mais interessante e maior a tarefa, mais perceptível é o resultado.
A maioria dos programadores deriva sua motivação dos níveis superiores da pirâmide de Maslow - cognição, auto-realização e necessidade de respeito. Para isso, é necessário que, em primeiro lugar, o resultado de seu trabalho seja perceptível. Em segundo lugar, esse resultado deve ver a luz, as pessoas devem usá-la. A visibilidade do resultado, obviamente, está intimamente relacionada ao tamanho desse resultado, com seu valor, peso.
Durante o desenvolvimento do software para telecomunicações, investi muito tempo e esforço no estudo de uma nova área: o dispositivo de processadores de uso geral e DSP, memória, sistemas de armazenamento, protocolos de rede, tipos de sinalização, algoritmos de processamento de sinal, em geral, um monte de informações interessantes. coisas de telefonia, circuitos, redes.
Levou vários anos (durante os quais trabalhei visivelmente mais de oito horas por dia). Cinco anos depois, trabalhei no nível de arquiteto, participando da criação da estrutura de software de novas centrais telefônicas, a arquitetura de seus componentes. Escrevi menos código, desenvolvendo especificações para a equipe, revisando códigos complexos, trabalhando em alguns componentes, protocolos e drivers críticos. Um bom entendimento do dispositivo de cada componente, dos princípios de operação, da comunicação com o restante permite desenvolver uma arquitetura de produto, protocolos de comunicação, interfaces externas.
Obviamente, qualquer produto de software é o resultado do trabalho de toda a equipe, mas com o meu nível de participação no projeto, me senti envolvido na criação não dos componentes individuais, mas de todo o produto. Ao mesmo tempo, você obtém uma unidade incrível, também há mais responsabilidade.
Em geral, quanto mais profundo o programador estiver imerso na área de assunto com a qual ele trabalha, melhor ele conhece o contexto, mais amplos são seus horizontes, mais interessante ele pode fazer seu trabalho.
Isso se aplica não apenas ao arranjo interno dos componentes do produto. Quanto melhor você conhecer seus usuários, como eles usam o produto, por que, e não de outra forma, quais problemas eles têm, como os produtos dos concorrentes são organizados, mais interessante será para você trabalhar.
É fácil aprender tudo isso - você precisa se comunicar mais com o suporte, testes, equipes de implementação e com os usuários finais do produto. Se é possível estabelecer uma interação de trabalho, resolver alguns problemas para eles, participar de um trabalho conjunto, geralmente é super.
A propósito, há mais uma observação sobre a organização do próprio fluxo de trabalho, que é respeitada, em particular, pela filosofia do DevOps e pela abordagem de desenvolvimento e operações conhecida como SRE, originalmente originária do Google. É necessário se esforçar para eliminar a separação entre as equipes de desenvolvimento, implementação e suporte, o movimento em direção à colaboração.
Apenas no caso, observo que os RFCs, cobrem livros com animais, documentação dos fabricantes e correspondência na maioria das comunidades de código aberto usam o inglês como um meio de comunicação padrão. Há menos informações nas traduções, muitas vezes é distorcida e quase sempre atrasada. Muitos fabricantes nem se importam em traduzir a documentação. Portanto, no mínimo, a capacidade de ler livros em inglês é um requisito higiênico-sanitário bastante básico, por assim dizer, para um desenvolvedor que deseja desenvolver.
Movimento lateral
De várias maneiras, o interesse do programador em seu trabalho é determinado pelo interesse na área em que ele trabalha. Por exemplo, você pode estar entediado com aplicativos financeiros, mas será interessante trabalhar na infraestrutura desses aplicativos.
Paralelamente ao desenvolvimento de software embarcado para telefonia, trabalhei em um sistema distribuído para coletar informações e faturar usuários - e este é um mundo completamente diferente, outras línguas e outras plataformas. Em seguida - a automação da implantação, configuração e teste, este é o terceiro mundo, tudo está diferente novamente.
Talvez para revitalizar seu interesse, você deve conversar com um colega ou chefe, ver o que as equipes estão fazendo nas proximidades. Mesmo um pequeno passo longe das atividades habituais pode fazer uma grande diferença no seu trabalho, oferecendo uma visão diferente das coisas. Como diz o ditado, o ponto de localização determina o ângulo de visão
Movimento em largura
Quando entrei na telefonia, descobri que não tinha tempo para dedicar tempo e atenção suficientes a outros projetos nos quais trabalhei. A solução era óbvia - comecei a trabalhar ainda mais. Mas isso não escala muito. Com um longo trabalho à noite e nos fins de semana depois de algum tempo, não sinto mais vontade de trabalhar e não tenho tempo para morar. Meu chefe e eu decidimos contratar outro programador em nossa equipe. Presumivelmente, conduzi algumas entrevistas com uma investida (a primeira da minha vida do outro lado da mesa) e percebi que levar uma pessoa inteligente para a minha equipe não era tão fácil quanto parece.
Como entender um estranho em pouco tempo? Como avaliar seu profissionalismo e qualidades pessoais? Eles geralmente são importantes, essas qualidades pessoais? Ou o profissionalismo é importante? No que você precisa prestar atenção ao contratar? E como exatamente você liga? Agora tudo isso parece bastante óbvio, mas quando eu contratei o primeiro engenheiro para mim, era uma floresta escura para mim.
Como sempre, comecei com o Google. Encontrei vários artigos de Joel Spolsky, os engoli, li os livros a que ele se referia, depois os links desses livros, estudou de forma mais sistemática e, gradualmente, começou a mergulhar em uma nova área - gerenciamento de projetos, equipe, gerenciamento do próprio processo de desenvolvimento.
O processo de desenvolvimento de software, como qualquer outro processo de produção, tem seus próprios pesquisadores, histórico de desenvolvimento, melhores práticas, abordagens de organização. Muitos de seus aspectos relacionados diretamente ao desenvolvimento, as melhores práticas de engenharia, são bastante jovens.
Por exemplo, o ágil apareceu há relativamente pouco tempo, há menos de vinte anos, CI - cerca de trinta anos, o livro clássico de Frederick Brooks por cerca de cinquenta anos. Outros aspectos relacionados ao gerenciamento de equipes, psicologia, motivação, gerenciamento de processos na organização como um todo, organização das comunicações são universais, vieram de outras áreas há muitos anos e são perfeitamente aplicáveis no campo do desenvolvimento.
Eu li bastante literatura sobre o tópico gerenciamento de equipes. Parece-me que esse tópico foi estudado mais profundamente e profundamente na América e no Japão. Além dos livros clássicos sobre desenvolvimento, engenharia, gerenciamento, eu recomendaria livros de designers de aeronaves soviéticos e russos e designers de foguetes. Além disso, NASA, NAVY, Toyota - essas organizações e empresas investem pesadamente na otimização de seus processos, realizam conferências internas para seus gerentes, materiais sobre eles estão disponíveis na rede, existem muitos livros de arte interessantes sobre eles e sobre eles. Além disso, além de excelentes informações sobre os processos de gestão construídos nessas empresas, ler sobre carros, aviões, mísseis, navios e seu desenvolvimento é simplesmente muito interessante.
Em geral, o escopo para aumentar sua competência no campo da administração é enorme, as tarefas também são muito diferentes. Você pode começar organizando seu próprio trabalho, introduzindo as melhores práticas de engenharia, como testes de unidade, revisões de código, integração contínua e entrega contínua, e pode parar muito longe. E é melhor não parar :)
Conclusão
A prática mostra que, se você começar a se mover ativamente em pelo menos uma das direções acima, depois de algum tempo outro movimento inevitavelmente ocorrerá - subindo a escada hierárquica. Se existe esse desejo, essa também é uma opção muito interessante. O principal aqui é não esquecer o equilíbrio necessário entre o trabalho organizacional e técnico que você gostaria de manter.
O desenvolvimento de software é uma maratona que dura a vida inteira. Sempre há prazos, prazos, o tempo todo que você precisa para pressionar um pouco mais. Para economizar energia e motivação, para se proteger do esgotamento, você deve necessariamente mudar, elevar a cabeça acima da rotina, olhar em volta e olhar para si mesmo e para o seu trabalho de lado. Teatros, músicas, shows, bons livros e filmes são obrigatórios para uso periódico. Ou uma residência de verão. Ou caminhadas. Em geral, algo diferente de trabalho. Caso contrário, depois de dois ou três anos, o trabalho deixará de ser uma alegria.
Quanto ao trabalho, ninguém cuidará da sua motivação e carreira melhor do que você. Honestamente, não é que ninguém se importe melhor - apenas ninguém se importa. Livros sobre especialidades, áreas afins, conferências, comunicação com colegas, mitaps - um movimento que, como você sabe, é vida.
Se você acha que é hora de mudar alguma coisa - você pode começar com pequenos passos. Para fazer isso, você não precisa de permissão acima, um orçamento ou trabalho em uma grande organização. Todos os passos sobre os quais escrevi, subi em uma pequena empresa, em equipes de duas a dez pessoas.
Alguns bons livros, muito desejo e um pouco de movimento podem fazer uma grande diferença. Boa sorte
Z.Y. Compartilhe suas experiências e hacks de vida nos comentários. Infelizmente, Igor ainda não está em Habré, estou baixando carma para poder convidá-lo. Enquanto isso, redirecionarei suas perguntas para ele, se houver. Obrigado pelo seu interesse.