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


39

Atualmente, nossa empresa desenvolve aplicativos que consistem, na maioria das vezes, em servidores Web Ruby on Rails e em vários clientes REST, desde sistemas de quiosques em Java até dispositivos incorporados em C / C ++ (além das interfaces para navegadores da web padrão). Precisamos expandir nossa equipe e, tendo falhado em encontrar bons programadores seniores, decidimos nos esforçar para treinar programadores juniores que cresceriam junto com a empresa.

Nós já lhes demos alguns livros sobre Ruby e Rails e pedimos que construíssem alguns programas de brinquedos, mas agora estou percebendo o quão acentuada é a curva de aprendizado para o estado atual da programação na web.

Quando comecei a programar, há 15 anos, usei apenas o Delphi e o Source Safe e pude produzir software utilizável desde o início. Ambos eram ferramentas simples e era fácil se aprofundar no funcionamento interno do ambiente. Lentamente, comecei a usar estruturas 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, não sei tanto sobre como o Ruby on Rails funciona internamente quanto no Delphi no passado, e para mim isso foi importante para que eu pudesse conectar os blocos básicos de aprendizado às ferramentas que estava usando.

Parece-me que os programadores que estou contratando levarão muito tempo para integrar-se à equipe e produzir algo utilizável, porque há muito o que aprender a usar uma única estrutura (Rails): Ruby, HTML, CSS, JavaScript, REST, casos de teste, acesso ao banco de dados (com SQL magicamente construído dentro da estrutura!), MVC, três gerenciadores de pacotes diferentes (apto 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?


8
O segundo ao último parágrafo parece que você pode não ter notado uma mudança importante ocorrida nos últimos 15 anos: os programadores generalistas praticamente se foram . Para que alguém saiba todos os detalhes a que se refere, teria que estar na indústria há 15 anos. Você pode ter melhores resultados encontrando / treinando especialistas que conhecem uma ou duas dessas coisas listadas intimamente e criando uma equipe com os diversos especialistas de que você precisa ( depois o treinamento cruzado). Como alternativa, encontre engenheiros seniores com 15 anos de experiência como você, mas isso não é tarefa fácil.
Jimmy Hoffa

Apenas para sua informação, uma curva de aprendizado acentuada significa que você aprende algo realmente rápido. Confunde algumas pessoas quando usadas de forma incorreta :) #
Alternatex

Eu sempre usei a expressão como "difícil" (o inglês não é minha língua materna), mas a Wikipedia diz que é ambígua, por isso não conheço a melhor opção aqui: en.wikipedia.org/wiki/Learning_curve :)
Rômulo Ceccon

Respostas:


39

Muitas pessoas não gostam dessa idéia, mas eu estou defendendo isso sempre que possível: independentemente da linguagem de programação e do ambiente, se eles não têm experiência e se existem tarefas de manutenção que surgem dos relatórios de erros reais dos clientes seu, tente garantir que eles sejam atribuídos a esse tipo de tarefa pelo menos por 30-40% (+) do tempo deles. "Aqui está o relatório de erros, dê uma olhada, resolva-o. Se você não sabe do que se trata, comunique-se com colegas experientes, pesquise no Google, o que for". Trabalho real em problemas reais, nãobrinquedos, pelo menos: não apenas brinquedos. Certifique-se também de que alguém com muita experiência veja o que estava fazendo antes que ele seja liberado e enviado ao cliente, é claro. Verifique se o novo colega recebe um feedback honesto sobre o que ele fez de colegas e clientes. Escolha essas tarefas com cuidado para não sobrecarregá-las, mas lembre-se de que um dia você deseja que elas realizem seu trabalho de forma independente.

Fazer a correção de bugs é aprender o trabalho, que permite trabalhar com o código que é realmente executado e tem alguma relevância (caso contrário, não haveria relatórios de bugs) e mostrará a eles em muitos exemplos como não fazer isso.

O foco é colocado automaticamente nos pontos problemáticos. Eles começarão a aprender os detalhes que realmente estão causando problemas. Isso também coloca a responsabilidade real sobre seus ombros desde o início, o que (embora a manutenção, como tal, não seja realmente atraente) pode ser bastante motivador se eles o fizerem para a satisfação do cliente / usuário final. Analisar o que eles fizeram será levado mais a sério pelos seus idosos, porque eles sabem o impacto se as coisas derem errado e, dessa forma, também simplificará a integração na equipe, porque os fará conversar automaticamente também.

O objetivo não é torná-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 vindas diretamente da faculdade para o novo emprego de desenvolvedor, e os piores resultados que eu pude ver eram geralmente quando alguém sem pelo menos alguma experiência em manutenção era solicitado a desenvolver o novo aplicativo . Apenas certifique-se de que eles sempre tenham alguém com quem possam pedir apoio, se sentirem perdidos.


Eu faço a mesma coisa. Boa resposta.
Rocklan 23/03

Comecei minha carreira corrigindo defeitos pelo primeiro ano. Quando mudei para outros projetos, senti que a correção de bugs me fez muito melhor porque sabia o que não fazer.
Brandon

8

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

Mas, supondo que sejam competentes, o primeiro passo é enviá-los para uma aula. Uma aula de uma semana custará entre US $ 2.000 e US $ 3.000 (EUA). No entanto, isso proporcionará a eles experiência prática, com um instrutor que (espero) entenda o material e um plano de aula projetado para torná-los atualizados. Enviar alguém com um livro e a diretiva para "aprender isso" não será algo tão valioso e provavelmente custará mais (o custo da aula é quase igual a uma semana desperdiçada do programador).

Depois que eles tiverem o conhecimento básico, trabalhe com eles. Sente-se em uma mesa adjacente e dedique pelo menos metade do seu tempo para garantir que eles entendam seus negócios e sua maneira de fazer as coisas. Sim, isso diminuirá sua produtividade, pelo menos inicialmente, mas a longo prazo torna sua equipe como um todo mais produtiva. E se você pensar novamente nos custos, se um jovem desperdiçar um mês fazendo a coisa errada, isso provavelmente equivale a meio mês do seu salário.


4

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

A partir daí, cada desenvolvedor deve poder abordar por conta própria os assuntos associados, como Javascript, CSS, DAL, geradores de modelos, roteamento e assim por diante. Você pode orientá-los sobre os tópicos a serem estudados (pode ser baseado nas necessidades mais urgentes da sua empresa), orientá-los e monitorar o progresso deles. Mova os desenvolvedores, um de cada vez, para projetos simples que produzam funcionalidades que levarão adiante seu esforço de desenvolvimento real, 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. Seu mentor pode supervisionar seu trabalho quando começar a escrever código real.

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.