Como treinar programadores juniores para o ambiente web atual (complicado)?

39

Atualmente, nossa empresa desenvolve aplicativos consistindo, na maior parte do tempo, em servidores web Ruby on Rails e vários clientes REST diferentes, desde sistemas quiosque em Java até dispositivos embarcados em C / C ++ (além das interfaces para navegadores padrão). . Precisamos expandir nossa equipe e, tendo fracassado em encontrar bons programadores seniores, decidimos nos esforçar para formar programadores juniores que crescessem juntos com a empresa.

Já demos a eles alguns livros de Ruby e Rails e pedimos a eles que construíssem alguns programas de brinquedos, mas agora estou percebendo quão íngreme é a curva de aprendizado para o estado atual da programação da Web.

Quando comecei a programar há 15 anos, usei apenas Delphi e Source Safe e consegui produzir software utilizável desde o começo. Ambos eram ferramentas simples e era fácil mergulhar no funcionamento interno do ambiente. Lentamente eu comecei a usar frameworks de terceiros, mudei para CVS, SVN e finalmente Git, aprendi as peças que fazem a web de hoje, como HTTP, JavaScript, CSS, REST etc. Hoje, mesmo depois de anos de experiência, eu não sei tanto sobre como o Ruby on Rails trabalha dentro como eu fiz no passado sobre o Delphi, e para mim isso era importante para que eu pudesse conectar os blocos básicos de aprendizado às ferramentas que eu estava usando.

Parece-me que os programadores que estou contratando levarão muito tempo para integrar com a equipe e produzir algo utilizável, porque há muitas coisas para aprender a usar uma única estrutura (Rails): Ruby, HTML, CSS , JavaScript, REST, casos de teste, acesso a banco de dados (com SQL magicamente construído dentro da estrutura!), MVC, três gerenciadores de pacotes diferentes (apt para Ubuntu, gem e bundler para Ruby), ssh, git, Apache e Phusion Passenger para implantação , etc.

Estou me sentindo perdido, pois é a primeira vez que preciso lidar diretamente com programadores juniores. Qual é a melhor maneira de treinar programadores juniores nas práticas recomendadas de hoje para o desenvolvimento da Web quando há tantas opções?

    
por Rômulo Ceccon 22.03.2013 / 18:38
fonte

3 respostas

39

Muitas pessoas não vão gostar dessa idéia, mas estou defendendo isso sempre que posso: independentemente da linguagem de programação e do ambiente, se eles não têm experiência e se há tarefas de manutenção que surgem do bug do mundo real relatórios de clientes, tente garantir que eles sejam designados para esse tipo de tarefa por pelo menos 30-40% (+) de seu tempo. "Aqui está o relatório do bug, dê uma olhada, resolva. Se você não sabe o que é isso, comunique-se com colegas experientes, google it, whatever". Real trabalho em problemas reais, não brinquedos, pelo menos: não apenas brinquedos. Certifique-se, também, de que alguém com muita experiência dê uma olhada no que estava fazendo antes de ser lançado e enviado ao cliente, é claro. Certifique-se de que o novo colega receba um feedback honesto sobre o que ele fez de colegas e clientes. Escolha estas tarefas cuidadosamente para não sobrecarregá-las, mas lembre-se de que algum dia você quer que elas façam seu trabalho independentemente.

Fazer correção de bugs é aprender no trabalho, o que permite que eles trabalhem em código que é realmente executado e tem alguma relevância (caso contrário, não haveria relatórios de bugs) e mostrará em muitos exemplos como não fazê-lo.

O foco é colocado automaticamente em pontos problemáticos. Eles vão começar a aprender os detalhes que estão causando problemas. Ele também coloca a responsabilidade real sobre seus ombros desde o começo, o que (embora a manutenção como tal não seja realmente atraente) pode ser bastante motivador se eles forem feitos para a satisfação do cliente / usuário final. Passar pelo que eles fizeram será levado mais a sério pelos seus idosos, pois eles sabem o impacto se as coisas derem errado, e assim também simplificará a integração na equipe, pois isso fará com que eles conversem entre si automaticamente também.

O ponto não é para deixá-los produtivos desde o primeiro momento (como pode parecer). O objetivo é garantir que eles saibam que devem fazer algo valioso desde o primeiro momento e focar no que é mais importante sem a necessidade de criar uma lista.

Eu tenho alguns anos de experiência trabalhando de vez em quando com pessoas que vêm diretamente da faculdade para o novo trabalho de desenvolvedor, e os piores resultados que eu consegui ver foram quando alguém sem pelo menos alguma experiência em manutenção foi solicitado a fazer novo desenvolvimento de aplicativos. Apenas certifique-se de que eles sempre tenham alguém em quem possam pedir apoio se se sentirem perdidos.

    
por 22.03.2013 / 22:33
fonte
8

Vamos supor, antes de tudo, que você contratou programadores juniores que são realmente competentes. Isso não é necessariamente uma suposição segura, especialmente porque os programadores seniores entrevistando "alguém menos experiente do que eu" provavelmente ignoram a incompetência básica.

Mas, supondo que sejam competentes, o primeiro passo é enviá-los para uma turma. Uma aula de uma semana custará entre US $ 2.000 e US $ 3.000 (US). No entanto, isso lhes dará experiência prática, com um instrutor que (esperançosamente) entende o material e um plano de aula planejado para atualizá-los. Enviar alguém com um livro e a diretiva para "aprender isso" não será nem de perto tão valioso, e provavelmente custará mais (o custo da aula é aproximadamente igual a uma semana de programador desperdiçada).

Depois que eles tiverem o conhecimento básico, trabalhe com eles. Sente-se em uma mesa adjacente e desista pelo menos metade do seu tempo para garantir que eles entendam sua empresa e sua maneira de fazer coisas. Sim, diminuirá sua produtividade, pelo menos inicialmente, mas a longo prazo fará com que sua equipe como um todo seja mais produtiva. E se você pensar, novamente, sobre os custos, se uma pessoa júnior perder um mês fazendo a coisa errada, isso provavelmente equivale a meio mês do seu salário.

    
por 22.03.2013 / 19:55
fonte
4

Os aplicativos de brinquedo que você está pedindo que eles façam devem implementar algumas funcionalidades CRUD básicas, e cada desenvolvedor deve escrever seu próprio código. Mas você pode discutir o aplicativo em revisões de código e oferecer dicas. Eles precisarão entender a arquitetura geral de um aplicativo MVC primeiro, se qualquer expectativa razoável de produtividade for possível.

A partir daí, cada desenvolvedor deve ser capaz de descobrir por conta própria os assuntos associados, como Javascript, CSS, DAL, geradores de modelos, roteamento e assim por diante. Você pode orientá-los sobre quais tópicos estudar (pode basear-se nas necessidades mais urgentes da sua empresa), orientá-los e monitorar seu progresso. Mova os desenvolvedores, um de cada vez, para projetos simples que produzam uma funcionalidade que avance seu esforço real de desenvolvimento, no momento em que demonstrarem uma compreensão das habilidades necessárias.

Você pode emparelhar alguns de seus desenvolvedores experientes com um aprendiz como uma espécie de programa de orientação. Deve haver diretrizes disponíveis para os desenvolvedores juniores para que eles saibam quando podem interromper seu mentor e por quanto tempo. O seu mentor pode supervisionar o seu trabalho quando começam a escrever código real.

Você terá um tempo melhor se puder encontrar jovens que sejam muito espertos, intelectualmente curiosos e iniciantes. Eu vi esse processo funcionar; era a abordagem de meu empregador anterior, já que ele não queria pagar muito dinheiro por especialistas, embora fosse mais um tipo de "afundar ou nadar" (não havia nenhum programa de treinamento formal como tal). Seu maior desafio era fazer com que ficassem o tempo suficiente para recuperar seu investimento; sempre havia a tentação de pagar melhor em outro lugar.

    
por 22.03.2013 / 18:45
fonte