Que habilidades devo cultivar para me tornar um líder técnico / de desenvolvimento? [fechadas]

82

Atualmente sou programador profissional. Quero expandir meu conjunto de habilidades, mas também quero fazer com que a carreira salte para ser um líder de desenvolvimento como parte de uma equipe. Sei que ainda há muito a aprender (e isso não será instantâneo), mas acho que sou inteligente o suficiente para fazer isso e estou pronto para o desafio.

Tenho certeza de que muitos dos membros aqui provavelmente já passaram por isso e agora são bem-sucedidos. Infelizmente, apesar de conhecer algumas áreas pessoais que gostaria de melhorar (profundidade de conhecimento, amplitude de conhecimento, habilidades, etc.), não tenho muita certeza de como iniciar algo assim.

Como programador agora, que medidas devo tomar para chegar a esse objetivo? O que devo priorizar?

lunchmeat317
fonte
Existem oportunidades na sua empresa atual para serem promovidas a um líder de equipe? Sem a experiência de líder de equipe, pergunto-me se muitas empresas contratam apenas de dentro.
19413 JeffO
@ Jeffff Na verdade, acabei de trocar de emprego. Não sei se terei a oportunidade aqui - acho que há uma possibilidade, mas é uma pequena startup e acho que haverá apenas um líder de desenvolvimento por vez.
precisa
2
Apenas uma habilidade: capacidade de persuadir uma pessoa que pode dar essa posição a dar essa posição para você.
vortexwolf
1
Como se vê, há uma possibilidade muito distinta de que eu não esteja realmente preparado para isso. Por mais que eu gostaria de avançar na minha carreira nessa direção, acho que me apaixono mais pelo lado do desenvolvedor - só quero colocar minha cabeça para baixo e codificar, às vezes. Ainda considerando as possibilidades, mas agora com cautela.
lunchmeat317

Respostas:

90

Para se tornar um líder técnico, é essencial o seguinte

  • A capacidade de orientar membros da equipe em todos os níveis de antiguidade, de alguém que está fora da universidade há 3 meses a uma pessoa que programa há 30 anos

  • Um bom conhecimento do seu domínio de desenvolvimento. Isso inclui: idiomas, estruturas, utilitários, ambientes de desenvolvimento

  • Um sólido entendimento dos sistemas de gerenciamento de problemas, habilidades de gerenciamento de projetos e controle de versão

  • Seja o assassino de insetos

  • Saiba como conduzir revisões oportunas de código, o que procurar e como minimizar a quantidade de tempo que eles demoram para manter e as alterações a serem feitas

  • Mantenha-se atualizado com os desenvolvimentos em seu domínio de desenvolvimento. Por exemplo, se você não aprendeu novas estruturas ou tecnologias do .NET 2, estaria fazendo as coisas hoje de maneira bastante retroativa.

  • Como escrever testes de unidade e zombarias e fazer com que seus desenvolvedores também os escrevam

  • Conhecimento sobre o que são padrões de design e quando usá-los

  • Conhecimento sobre o que são odores de código e como mitigá-los

  • Integração contínua

  • A capacidade de planejar projetos e lançamentos

Dependendo da sua organização e se você possui arquitetos na equipe, provavelmente precisará saber o seguinte:

  • A capacidade de compor seus projetos e dividi-los em partes funcionais

  • Um entendimento completo da segurança, incluindo a maneira correta de lidar com senhas, separar sistemas, proteger dados etc.

  • Conceitos empresariais, como barramentos de serviço, filas de mensagens, BizTalk

  • Padrões de design corporativo

  • Arquiteturas de serviço / RPC, como SOAP e REST

  • Estruturas ORM, como Hibernate, Entity Framework, Doctrine

  • Implantação contínua

  • A nuvem

  • A capacidade de recomendar as tecnologias corretas para usar em um projeto. Isso pode ser difícil se sua equipe / loja executar apenas .NET, PHP ou Java.

  • Projete o aplicativo de maneira que as melhorias futuras sejam acomodadas com facilidade

Se você for um gerente de desenvolvimento, também precisará de:

  • Entrevistando habilidades e como encontrar a equipe certa
  • Como lidar com problemas de pessoas com os membros da sua equipe
  • Gerenciando diretrizes / objetivos de negócios e convertendo os relevantes em informações para seus desenvolvedores
  • A capacidade de estimar o tempo para programadores de habilidades variadas
  • A capacidade de alocar tarefas para os desenvolvedores corretos com base em suas habilidades e habilidades

E, finalmente, alguns outros pontos recomendados:

  • Aprenda fora do seu domínio de desenvolvimento

  • Aprenda a dizer NÃO quando as coisas não forem possíveis ou estiverem fora do escopo ou entrem em conflito com restrições como orçamento ou tempo.

O gerenciamento de uma equipe é um papel desafiador. Você precisa ser a pessoa que pode responder a qualquer pergunta, precisa conhecer as tecnologias certas a serem usadas (a menos que tenha um arquiteto), precisa ter habilidades de gerenciamento de pessoas e ser acessível por sua equipe (assumindo um cargo de gerência). Além disso, você precisa ter habilidades precisas de estimativa para garantir a lucratividade do projeto e precisa sujar as mãos com o código de qualquer pessoa para identificar problemas e corrigi-los rapidamente. Você precisa evitar querer fazer tudo sozinho e promover um ambiente de equipe que não seja tóxico. Você precisa permanecer continuamente no topo de sua pilha de tecnologias e aprender os mais recentes desenvolvimentos e técnicas, bem como tendências mais amplas do setor.

Você também deve conhecer pelo menos uma plataforma de banco de dados e conhecê-lo bem. Saiba como fazer replicação, procedimentos armazenados, como o otimizador de consultas funciona e como projetar um esquema adequadamente e quais campos indexar.

Independentemente da posição exata, qualquer função sênior exige que você tenha a capacidade de se comunicar efetivamente. Se você não é um orador confiante, tente fazer algo como o Toast Masters (falar em público). Saiba como fazer e manter contato com os olhos. Seja confiante. Vista-se adequadamente para a posição. Lidere pelo exemplo.

Sam
fonte
2
Acabei de esboçar algumas idéias que consegui pensar rapidamente. Vou revisitar e adicionar mais tarde. Boa pergunta.
19413 Sam
Eu posso secundar os benefícios do Toastmasters. Isso me ajudou bastante na minha carreira. Ser capaz de comunicar claramente seus pensamentos (especialmente pensamentos técnicos a pessoas não técnicas) é uma habilidade inestimável de se possuir.
Jason Swett
27

Na minha experiência, o Lead tem um pouco menos a ver com o trabalho sujo da programação prática e mais com o gerenciamento. Para esse fim, recomendo o seguinte

  1. Invista mais tempo em projetos e projetos de arquitetura e desenvolvimento . Como líder, sua função estará centrada em fornecer orientação e orientação técnica para sua equipe. Você terá a tarefa de entender como partes de um todo se encaixam e menos como o encanamento funciona. Não me interpretem mal, você exige que as costeletas técnicas sólidas sejam uma liderança eficaz e experiente, mas uma visão de nível superior do que está acontecendo e de como vai funcionar será mais crucial aqui. Você deve conhecer mais padrões de design de práticas recomendadas e práticas eficazes de codificação

  2. Aprenda a realizar várias tarefas e gerenciar o tempo . Se você é bom nisso agora, isso é legal: desenvolva mais. Como desenvolvedor, você tem apenas sua tarefa / projeto atual com o que se preocupar. Como líder, você terá

    • Para participar de mais reuniões do que você gosta. Esta é talvez a parte mais entorpecente da liderança de equipe
    • Trabalhe na alocação de recursos. Se você tiver sorte, os recursos serão escassos e os projetos serão abundantes.
    • Assuma a liderança na arquitetura e design do projeto
    • Dependendo do tamanho e da estrutura da organização, forneça uma infinidade de relatórios, dentro do cronograma e no prazo. Pense no líder como um gerente de projeto de baixa renda.
  3. Prepare-se para delegar efetivamente . Essa IMO será a parte mais difícil de ajustar. Como desenvolvedor, você está acostumado a sujar as mãos, a fazer as coisas. Fazendo todo o encanamento e pesquisa. Isso terá que parar ou ser reduzido. Os shows chegam, você distribui para o time. Você terá uma parte da ação, não apenas o que está acostumado. E você morderá a língua para resistir à tentação de encurralar mais ações por si mesmo.

  4. Na linha mais profissional, considere algum treinamento que não apenas aumentará sua capacidade, mas também mudará sua perspectiva . Um curso intensivo em dizer que o gerenciamento de projetos de software não será prejudicial. O Lean Six Sigma também é um programa de treinamento muito bom (posso testemunhar sua eficácia) que o ajudará a analisar a resolução de problemas de um ângulo mais lógico. Sem mencionar que, na posição de líder, você está preparado para funções ainda mais seniores, que exigirão menos habilidades técnicas práticas e mais capacidade de gerenciamento.

  5. Aprimore suas habilidades de comunicação e interpessoais . Você será o principal ponto de entrada para sua equipe do mundo exterior. Seu gerente ou outro supervisor entrará em contato com você primeiro. Outras unidades / equipes da sua organização farão interface com você em qualquer coisa relacionada à equipe primeiro. Você gerenciará o recurso mais difícil e imprevisível de todos: as pessoas. Você precisa crescer uma pele grossa, aprender a engolir grandes quantidades de orgulho e assumir a responsabilidade pelo fracasso de sua equipe.

Kolossus
fonte
2
Ótimas respostas, eu gosto de como você anotou todas as coisas que, como desenvolvedor, geralmente não tem idéia - em particular a delegação. No último emprego, delegava tudo o que podia e ainda tinha uma montanha de coisas para me manter ocupado. Então, durante os (raros) momentos livres, eu fazia o material "chato" - oferta para ajudar a corrigir pequenos erros, documentação. Tenho que liderar pela frente.
Rocklan # 1935
2
+1 para destacar que os papéis de 'chumbo', muitas vezes envolvem muito mais de gestão do que habilidades técnicas
Krease
Esta é uma resposta excelente e realmente captura a essência do papel. Bem feito.
Lloyd Moore
14

Coisas que Sam não disse que também são importantes:

  • Como especificar as coisas e dar trabalho a outros desenvolvedores. Parte do seu trabalho é manter os outros desenvolvedores 100% utilizados. Escrever especificações não ambíguas é muito importante.

  • Como criar um aplicativo de esqueleto / protótipo que todos os outros devem seguir

  • Como promover o bom moral da equipe

  • Como participar, dirigir e liderar reuniões, como documentar itens de ação

  • Como estimar, escrever um plano de projeto e atualizar o plano de projeto

  • Como olhar para o futuro - se um problema ocorrer em três meses, você deve tentar evitar o mais cedo possível. Se um desenvolvedor estiver de férias por 7 semanas, você precisa começar a planejar isso agora.

  • Como falar com a gerência. Eles falam um idioma diferente para nós. Dê a eles soluções, não problemas. Diga a eles o que o material técnico significa para eles.

E enquanto Sam já disse isso, uma das coisas mais importantes é aprender a dizer não . Você vai fazer isso um monte . A outra maneira de olhar para isso é dizer sim , mas "apenas se conseguirmos mais dinheiro / tempo / recursos" - ou "isso é para o segundo lançamento" :)

Rocklan
fonte
Acho que muitas de suas peças vão para o balde Architect ou PM. Mas sim, às vezes o líder de desenvolvimento precisa fazer isso.
SandRock
11

Todos estes são pelo livro e boas respostas. Permita-me bater em você pela realidade.
Acredite ou não, na maioria das vezes você estará gastando em explicar gerentes

  • como é difícil resolver um problema ou
  • por que não pode ser resolvido em determinada linha do tempo ou
  • até quanto menos importante é resolver.

Para isso, você precisa das habilidades de explicar coisas técnicas para pessoas não técnicas, em termos não técnicos. E é muito difícil. por exemplo, considere explicar P = NP para 6 anos de idade. Infelizmente, não há treinamento formal para isso, e você deve aprender sozinho.

Além disso, esta é a posição em que a merda política começa a atingir você. O gerente lhe dirá para favorecer uma pessoa porque ela segue o processo, mas você sabe que ela não é útil em sua equipe por vários motivos, desde falta de habilidades técnicas até não ser um bom membro da equipe. Portanto, você ainda precisa não apenas trabalhar com essa pessoa, mas também dar boas classificações a essa pessoa. O oposto é a pessoa que tem boas habilidades e um membro da equipe muito eficaz, mas que não sabe como agradar a gerência e, portanto, recebe menos classificações.
Depois, há reuniões inúteis com alguém em posição alta, mantendo-se em locais remotos, dando palestras sobre os processos efetivos e como sua última variação de processos aumentará a produtividade. Você deve saber como esconder seu rosto chato e parecer enérgico.

Manoj R
fonte
1
"deve saber como esconder seu rosto chato e parecer enérgico" hahaha
Adrien Seja
Eu sempre me sinto entediado quando essas reuniões começam, exceto que algo relacionado ao técnico é discutido
Akshay Mukadam