Como incluir desenvolvedores novatos em seu projeto?

9

Estamos pensando em ensinar alguns funcionários com experiência em programação de nível zero ou geral para hobby a tirar a carga de trabalho de mim.

Usamos Python / Django, que possui algumas das documentações mais amigáveis ​​e muito fáceis de aprender.

Atualmente, sou um departamento de TI da minha empresa e não tenho horas suficientes para desenvolver tudo o que a empresa precisa. Não somos uma empresa de software, mas ajuda ter TI interno para automatizar tarefas, desenvolver recursos de atendimento ao cliente, analisar dados etc.

Como você lentamente integra novatos trabalhando em sua base de código? Digamos que você tenha um estagiário - o que eles fazem? Estou completamente relutante em permitir que eles projetem ou desenvolvam o código principal, pois lidaremos com seus erros / padrões de design estranhos por anos. Como desenvolvedor primário, eu serei o único que precisa contornar o código deles.

Meu pensamento era ter novatos apenas modificando o código existente, nunca construindo recursos principais. Posso descarregar o trabalho para eles com tarefas simples depois de criar o próprio recurso.

Gostaríamos que nossos funcionários aprendessem / encontrassem valor na empresa e geralmente temos pessoas 'subindo na hierarquia'.

É prática padrão ensinar pessoas com programação geral / amadora? Como o "subir na hierarquia" em uma empresa de software funciona para programadores de nível júnior? Quando eles começam a trabalhar no código principal?

Estou tentando decidir se isso causará mais danos do que ajuda e se existe uma maneira de usar a ajuda deles sem potencialmente arriscar o código do site principal (ambientes isolados?).

Yuji Tomita
fonte
3
"programação de nível geral / hobby" é muito diferente de "programadores de nível júnior" em minha mente. O primeiro soa como alguém que brinca com scripts de shell / lote no fim de semana para ajustar seu sistema. O último soa como alguém que acabou de terminar um diploma em CS. A manipulação desses dois tipos seria muito diferente. Apenas dizendo ...
FrustratedWithFormsDesigner
@FrustratedWithFormsDesigner Obrigado! Não estou familiarizado com a terminologia. Hobbyist que eu entendi significava que aprendeu sozinho algumas linguagens de programação, construiu um ou dois programas, um site. No nível júnior, eu pensava ser alguém que tinha conhecimento de programação suficiente para ser contratado em uma empresa de software, mas agora me ocorre que esses dois podem ser bem parecidos (nas minhas definições)?
Yuji Tomita
3
Rapazes com educação formal em CS e sem experiência - são ingênuos, mas geralmente talentosos, aprendem coisas novas rapidamente e se adaptam às suas práticas de trabalho. Os "veterinários de passatempo" são muito mais perigosos, pois geralmente são escravos de seus hábitos; portanto, podem relutar em mudar e ter problemas que se ajustam ao seu ecossistema. Mas, no entanto - apenas dando-lhes liberdade, você pode ver a estupidez ou a esperteza deles. Se você lhes der tarefas mundanas primitivas, nem elas aprenderão nada sobre trabalho, nem aprenderá nada sobre elas.
C69
@ c69 Obrigado! Minha pergunta é como facilitar o novato em nossa base de código? O objetivo não é separá-los e realizar apenas tarefas mundanas. É apenas perigoso dar a alguém acesso à nossa base de código e fazer com que ele construa seu primeiro projeto de django / programação como parte de nosso sistema (ou é isso que você quer dizer? Vamos tentar ver?). PS: Devidamente anotado sobre os veterinários de hobby
Yuji Tomita

Respostas:

5

Se você delegar o novato em um papel ineficaz, ele nunca aprenderá nada de substancial e eles certamente não serão muito úteis para você.

Deixe-me dar um conselho: meu primeiro trabalho de TI fora da escola foi em uma empresa de manufatura relativamente pequena, onde eu iria trabalhar em software para ajudar os engenheiros de vendas a escrever citações para vários projetos. Eu também deveria ajudar o pessoal de TI que gerenciava sozinho a TI para toda a empresa.

O cara era uma bagunça estressada e sobrecarregada, e o pior perfeccionista de microgerenciamento em que já trabalhei. Eu deveria aliviar sua carga de trabalho, mas ele passou quase tanto tempo checando comigo e meu trabalho como eu gastava trabalhando (ele quase nunca saiu do escritório, acho que desprezava sua família). Se eu cometesse um único erro, ele perderia completamente a cabeça e começaria a fazer uma birra: "Eu sabia que não deveria ter confiado em você com isso, era muito importante!" e outras reclamações.

O ponto que estou tentando enfatizar é NÃO ser assim. Além de tornar os novatos infelizes e destruir o moral deles, você queimará a vela nos dois extremos, preocupando-se com o trabalho deles.

Dê a eles a chance de provar a si mesmos, mas possuem especificações técnicas formais, revisões de design e revisões de código. Além disso, você pode testar o que eles produzem para garantir que atenda aos requisitos.

Acho que você ficará surpreso com a capacidade de alguns deles.

maple_shaft
fonte
11
Também deve-se dizer que, se você delegar o novato para uma função em que eles não se sintam úteis, eles terão a pouca experiência adquirida para encontrar um emprego melhor. Mesmo um novato deve ser capaz de seguir as instruções, as tarefas de manutenção são boas, mas, a menos que você esteja disposto a ajudá-lo a crescer, espere sempre ter um novato.
Ramhound 25/10
Obrigado pela sua contribuição - é muito apreciado. Temos que começar em algum lugar, pois estamos considerando pessoas que literalmente não têm experiência. Introdução ao python 101, tutorial do django, scripts bash, como usar o controle de versão, etc., atenderei seu aviso sobre o não gerenciamento de micro. E sim! Eu acredito que nosso pessoal é bastante capaz.
Yuji Tomita
5

Eu trabalhava em uma loja de software, onde estávamos codificando um projeto grande (tempo de aceleração significativo).

Os novatos foram tratados como veterinários. Eles receberam um líder técnico e começaram os recursos "por conta própria". O estilo da arquitetura foi ditado, mas eles eram livres para criar seu próprio design limpo. Os "padrões de design estranhos" foram eliminados durante as revisões diárias do código por pares.

Um erro que vi em outra loja: suponha que "core" seja difícil e "ui" seja fácil. Os novatos tiveram um tempo mais fácil no núcleo e alteraram o código de front-end da interface do usuário.

Boa sorte!

louisgab
fonte
11
Revisões frequentes de código eram exatamente o que eu ia sugerir. Demorará uma hora no seu dia e será recompensado quando você ensinar a eles o que está errado, eles terão que corrigi-lo e melhorar suas habilidades. Depois de algum tempo, você não precisará gastar tanto tempo em revisões de código como nas primeiras semanas. Verifique também se eles sabem como usar (e usar) o controle de origem. Qualquer erro pode ser revertido facilmente.
HLGEM 25/10/11
11
@isgab - Um design eficaz de interface do usuário é difícil de alcançar, mesmo com 30 anos de experiência. Quero dizer, olhe para Microsoft e Apple, os dois têm idéias diferentes sobre como uma interface de usuário deve funcionar.
Ramhound 25/10
Eu amo o que você está dizendo sobre core vs ui. Eu pensei que havia prós e contras para ambos (novato no backend, novato no frontend). Por um lado, o HTML geralmente trata da experiência - saber o que não funciona. Também é "seguro" que os projetos sejam isolados. O back-end funciona exatamente como deveria, mas o código criado agora deve ser mantido e trabalhado no futuro.
Yuji Tomita
2

Você deseja começar dando a eles pequenas peças discretas para implementar. Defina a entrada que você promete e a saída que você espera e deixe que eles conectem os pontos. E, em seguida, use a revisão de código do líder da equipe para garantir a qualidade e a revisão por pares para treiná-los a aprender uns com os outros e a se ensinar.

Isso pressupõe que você tenha uma arquitetura geral de aplicativos que permita que unidades atômicas da lógica sejam construídas de maneira dissociada. Caso contrário, você está caminhando para um mundo de luto, à medida que vários desenvolvedores trabalham nele - esse seria o caso mesmo com profissionais antigos.

Inevitavelmente, você terá certas pessoas que aprendem rápido e aprendem rápido. Continue alimentando tarefas que estão apenas um pequeno passo além da capacidade atual. Nada educa alguém como uma tarefa que começa impossível. Inevitavelmente, você terá algumas pessoas que tentam e nunca realmente a alcançam. Essas pessoas devem ser agradecidas por seus esforços e migradas graciosamente para outra coisa.

Dan Ray
fonte
11
"Certifique-se de continuar alimentando tarefas que estão apenas um pequeno passo além de sua capacidade atual". - Se isso não for feito, você poderá descobrir que essas pessoas levam seus conhecimentos para outra empresa. Se você não alimentar, treinar e passear com o novato, ele fugirá como seu cão.
Ramhound 25/10
Outras opções seriam: Dê a eles um recurso de implementação já (bom), para que eles possam comparar as saídas
Etsitpab Nioliv
1

Como sua empresa pode se dar ao luxo de se afastar de outros funcionários, mas não contratar alguém com experiência em programação? A quantidade de seu tempo de treinamento, solução de problemas e manutenção da mão é cara.

A única coisa que já fiz nesta área é ensinar às pessoas como usar um redator de relatórios ou talvez algum código VBA / Macro para Excel. Normalmente, dou os conjuntos de dados para reutilização. Tê-los aprendendo SQL é um exagero, mas já vi isso (Pago para que eles recebam treinamento externo). A maioria dessas pessoas eram analistas financeiros que têm a capacidade de aprender a codificar, mas podem não ter levado tempo. Tentar isso com algumas pessoas em operações é um tiro no escuro.

Certifique-se de pegar a pessoa certa e ela realmente deseja aprender a codificar. Você não terá tempo para ensinar tudo a eles. Eles terão que fazer muito por conta própria.

JeffO
fonte
Mencionei que estamos falando de pessoas com experiência anterior zero (ou uma quantia muito pequena), portanto não estamos falando das notas salariais necessárias para contratar um programador profissional.
Yuji Tomita
Ah, e nossa empresa é um pouco como uma família: gostamos de fazer tudo sozinhos e fazer com que as pessoas subam na hierarquia. Eu estava principalmente curioso sobre como estruturar o fluxo de trabalho de um novato no meu.
Yuji Tomita 25/10
0

@louisgab estava certo sobre a revisão de código. Esse seria o meu primeiro passo também. Uma coisa crítica que o ajudará é garantir que eles tenham que corrigir seus próprios erros, caso você os encontre na revisão de código ou posteriormente. Eles não vencem; nem percebem que estão cometendo erros, a menos que tenham que corrigi-los. Certifique-se também de explicar por que a solução que eles usaram é um erro e por que o que você está propondo é melhor. Nas primeiras semanas, será como se você tivesse mais trabalho por ter essas outras pessoas, mas se você revisar seu código, explicar as coisas e esperar que elas aprendam, em algumas semanas elas serão muito mais úteis do que se você apenas faça tudo sozinho. Mas existe um compromisso inicial de seu tempo para atualizá-los, dos quais sua gerência precisa estar ciente.

HLGEM
fonte