Ajudando programadores juniores a superar suas deficiências? [fechadas]

15

Quais são as suas queixas comuns sobre desenvolvedores juniores que se juntam à sua equipe ou com quem você tem que trabalhar? Obviamente, eles são inexperientes, então você não pode esperar que eles saibam tudo, mas que habilidades geralmente estão inexplicavelmente ausentes - e como, especificamente, podemos ajudá-los a desenvolver essas habilidades ausentes?

Não me refiro a habilidades interpessoais como 'ouvir conselhos', refiro-me a assuntos técnicos como (se aplicável):

  • 'você nunca fez SQL?'

  • 'você nunca escreveu um teste de unidade?'

  • 'você não sabe como usar uma linha de comando Unix?'

Coisas que você não espera - Eu gostaria de ouvir suas observações e técnicas para ensinar novos programadores para superar essas deficiências específicas.

Andrew M
fonte
13
Coisa mais irritante: perguntar constantemente sobre o que é irritante. :-)
Jerry Coffin
12
Não acho que você deva ficar irritado quando as pessoas não sabem coisas que você espera que elas saibam. O que é importante é que eles estão dispostos a aprender =)
koenmetsu
Sim concordar com @KoMet se você tem a vontade de aprender a escutar Eu acho que é importante :)
MalsR
8
Não gosto dessa pergunta, ela tem a mentalidade errada para um desenvolvedor. Éramos todos uma vez novatos, e todos os dias somos novatos em alguma coisa. Eu nunca ficaria irritado com alguém que não sabe alguma coisa. Isso sente-se que há demasiada arrogância envolvidos ....
Darknight
3
Ah, fechado, BRAVO. Eu li as seis diretrizes, questões subjetivas construtivas e isso preenche todas elas. Sinceramente, a parte não-construtiva é que os indivíduos ocupados estão fechando um tópico que 13 pessoas já responderam, apenas porque entenderam mal a pergunta. É simplesmente uma realidade que os desenvolvedores seniores às vezes ficarão decepcionados com as habilidades dos desenvolvedores juniores; essa questão só procura encontrar padrões nessa decepção para que possamos evitar melhor as dificuldades. Ignorar reclamações e críticas legítimas não beneficia ninguém e não tem nada a ver com arrogância.
8118 Andrew Andrew M

Respostas:

25

Não sabendo o que é o controle de versão ou como usá-lo corretamente .

Um dos desenvolvedores juniores que esteve na minha empresa por vários meses recentemente teve que aprender o básico do Subversion. Isso realmente me fez estremecer ... ela esteve verificando código para viver projetos o tempo todo ... e não tinha ideia do que estava fazendo ...?

sevenseacat
fonte
4
Vergonhoso? Ela tem sorte de ainda ter um emprego.
Rein Henrichs
2
Parece que é mais uma questão de "não saber o que você não sabe" ou "não admitir o que você não sabe". Se ela tivesse pedido ajuda desde o início, teria sido um grande problema?
Michael McGowan
1
ai, soou como eu haha, nós não implementamos o controle de versão até recentemente, e eu entrei na empresa como recém-formado, aprendi um pouco sobre o controle de versão e o tipo de subversão na Universidade, mas nunca o implementei antes.
Sufendy
1
"Essa é a ferramenta para backup, não é? Você a usa para salvar seu código todas as noites?"
David
2
É uma grande coisa que eles quase nunca ensinam na escola
Elias Saounkine
23

Não fazendo perguntas suficientes

Eu sei que eles são juniores, espero que eles cometam erros e simplesmente não saibam as coisas. Tantos f ** k ups reais poderiam ter sido evitados apenas fazendo uma pergunta em vez de assumir algo. Honestamente, não posso ser incomodado o suficiente.

Eu tinha TONELADAS de perguntas quando comecei - perguntar a elas salvou minha bunda em várias ocasiões. Inferno, ainda tenho muitas perguntas ... Só gosto de pensar que são perguntas melhores agora.

Steven Evers
fonte
Puxa ... quase a mesma resposta que eu postei, você entra cerca de 5 segundos antes.
quickly_now
2
"você é chato !! Estou ocupado aqui, você não pode pensar sozinho?" se você tiver azar !! haha
Sufendy 08/04
4
+1 - Uma subcaixa disso não está solicitando uma explicação. Isso realmente me irritou quando eu expliquei alguma tarefa para um júnior, ele assentiu, pensei que ele conseguisse e chegaria ao trabalho, então duas semanas depois ele volta, faz as mesmas perguntas novamente , assente novamente, depois outras duas semanas depois ... É justo, não foi uma tarefa trivial, mas, pelo amor de Deus, não finja que você entende isso, se não o fizer. E se você acha que entendeu alguma coisa, faça anotações para que se lembre dela duas semanas depois.
Péter Török
1
Algumas pessoas, por outro lado, fazem muitas perguntas (no Stack Overflow).
BoltClock
1
@SnOrfus: Aqueles não qualificados são a quem me refiro: P
BoltClock
14

Copie colar, tente e tente, em vez de tentar entender os fundamentos subjacentes

Muitos desenvolvedores juniores copiam o código que parece mais próximo e tentam quase aleatoriamente diferentes permutações de modificações por força bruta até encontrarem um que funcione. Se você não sabe por que ele funciona, é provável que você esteja introduzindo erros nos casos de limite que alguém que entenda terá que limpar mais tarde.

Mantendo seu "primeiro rascunho" de código

Quando um desenvolvedor experiente escreve uma nova função de uma certa complexidade, ele começa com um esboço que não faz nada além de compilar, depois reescreve para adicionar comentários de pseudo-código de alto nível ao algoritmo geral e depois reescreve esses comentários um de cada vez com código real, adicionando e removendo código fictício conforme necessário para o teste, em seguida, reescreva para remover a redundância que surgiu durante a implementação e assim por diante em uma série de melhorias sucessivas e incrementais.

Os desenvolvedores juniores tendem a escrevê-lo em uma grande parte e depois fazem uma depuração massiva de força bruta. Eles não gostam de excluir uma linha de código depois que ela é digitada no editor e ficam tão felizes que finalmente conseguiram que funcionassem que detestam reescrever para melhorias não funcionais, mas são eles que precisam fazer então o mais.

Karl Bielefeldt
fonte
1
+1 para "copiar e colar em vez de procurar entender", embora, obviamente, esse não seja um problema exclusivo dos novos programadores, apenas dos ruins. Novos programadores pelo menos têm uma chance de crescer com isso - os caras com quem trabalho que são programadores há décadas e ainda fazem isso não.
Tom Anderson
Parte disso também pode ser uma consequência do estilo de gerenciamento. A tarefa já está falando mais do que o esperado e o gerente deseja seu recurso amanhã. Você corre para fazê-lo funcionar e passa rapidamente para a próxima tarefa. Tudo é dividido em cartões de tarefas microssensíveis, para que não haja tempo para refatorar ou dar um passo atrás e analisar o problema maior como um todo
21318 Jamie McGuigan
14

Acreditando que você é o primeiro a encontrar uma situação.

Todo problema de programação que você enfrenta foi enfrentado por outros, de alguma forma geral. Há muito o que aprender com programadores experientes. Tenho idade suficiente para lembrar de programar antes do Google e péssimo . Foi ainda pior quando tínhamos motores de busca, mas ainda não havia muita informação boa na web. A programação agora é muito mais produtiva, porque você tem acesso ao conhecimento global em segundos. As pessoas que não usam o ignoram por sua conta e risco.

Editar :

Só para ficar claro, eu estou não defendendo copiar / colar programação. Estou certo, no entanto, de que você precisa revisar o conhecimento existente antes de poder tomar boas decisões.

Scott Whitlock
fonte
1
Bem, você também não deseja que o desenvolvedor copie e cole todo o código de alguns recursos duvidosos da Web. É bom pesquisar algumas idéias, talvez resolver alguns problemas fundamentais de compreensão, mas nunca obter soluções prontas. Também torna o desenvolvedor mais burro; talvez o faça um bom colecionador, mas não um inventor.
Elias Saounkine
Eu concordo em algum momento com Elijah, copiar e colar código sem ter tempo para aprender o que faz, não acelera suas habilidades de programação. Pior, ele assumirá o controle e se tornará um mau hábito.
setzamora
1
Claro, mas o @Scott não disse nada sobre copiar e colar código, ele apenas disse que não assuma que você é o primeiro a encontrar uma situação, ou seja, perceba que pode haver algumas informações e experiências por aí que você pode se beneficiar. Exemplo: quero saber se duas strings são semelhantes. Já existe um algoritmo conhecido para resolver esse problema? Imagine se um desenvolvedor decidisse começar a criar os seus próprios, mesmo sem perceber que as respostas já existem.
David Conrad
@ David Conrad está certo, ponto de vista, estamos na mesma página aqui.
Elijah Saounkine
10

Pensando que eles sabem tudo.

Eu tive um jr. estagiário que tentou resolver tudo com javascript. Tentou explicar vários conceitos, mas ele sempre pensou que poderia fazê-lo melhor. Agora ele saiu e está reformulando um programa importante que ele criou para imprimir usando HTML em vez de uma tecnologia pronta para impressão, como PDF. Sem mencionar uma pilha de outros problemas importantes.

A lição é pedir aos idosos orientações importantes importantes no início de um projeto, não saia da arquitetura sem ajuda. Você pode escrever o código e os detalhes sozinho, mas certifique-se de pelo menos usar a tecnologia certa.

P.Brian.Mackey
fonte
5

Raramente fico aborrecido quando os juniores não sabem o básico, eles não aprendem habilidades da indústria, como o SCC na Universidade. É o trabalho dos desenvolvedores seniores ensiná-los. Eu só me irrito com conflitos de personalidade. Mas fico muito irritado com os desenvolvedores seniores que não sabem o básico.

Craig
fonte
1
A @Graig tem razão: muitas coisas que nos incomodam desenvolvedores experientes em relação aos juniores são coisas que tivemos que aprender não em uma universidade, mas em um ambiente comercial.
Nickz
5

Não querendo avançar seus conhecimentos - seguindo o caminho de menor resistência.

Outro dia, um estagiário, juntamente com o designer gráfico (que é surpreendentemente habilidoso em programação), pediu ajuda porque teve problemas para implementar algo no jQuery - o fechamento pode ser doloroso se você não conseguir ver isso.

Sentei-me com o estagiário e expliquei exatamente o que estava errado e por quê. Corrigimos o bug, depois apontei várias melhorias adicionais que poderiam ser feitas ("desde que estou aqui") e acabamos reescrevendo a função culpada em 10 linhas, em vez de 20 e sem bugs. Depois de responder a qualquer pergunta, satisfeito de que tudo estava bem no mundo mais uma vez, eu saí.

No dia seguinte, o estagiário veio com uma pergunta que revelou que ele "hum, queria fazer algumas alterações e reescrever a função do meu jeito, porque eu achei difícil de entender" (na maioria das vezes, desfazendo minhas melhorias).

Em vez disso, ele poderia ter se esforçado mais (fazendo perguntas adicionais, lendo os conceitos que mencionei) - código tão curto que nunca pode ser tão difícil de entender - ou seguir o caminho mais fácil. Entristece-me toda vez que vejo alguém fazer o último.

Jon
fonte
Interessante, eu me pergunto se é possível que você tenha dificultado a leitura. Lembro-me do meu primeiro gerente de projeto fazendo isso algumas vezes (e eu sendo culpado de alterá-lo também). Embora eu tenha certeza de que, em retrospecto, sua abordagem era melhor, simplesmente não havia avançado o suficiente na época para entender por que e como funcionava. .
Maxim Gershkovich 27/09/12
3

Não entendo OOP. Infelizmente, isso é muito mais comum do que a maioria de nós provavelmente imagina.

Saber como criar uma classe, classe abstrata, interface ou mesmo conhecer o polimorfismo é uma coisa; entender como usá-los adequadamente para o benefício do seu programa é outra .


Se você quiser evitar essa, achei essas perguntas e as respostas esclarecedoras:

Nicole
fonte
Como no nível básico, eles não sabem o que você quer dizer com criar objetos, classes e herança? Ou coisas mais avançadas como o uso de padrões de projeto (você tem que admitir, o livro GoF é bastante obscura, embora haja, naturalmente, outros livros / guias)
Andrew M
@ Andrew Eu expandi a resposta um pouco.
Nicole
1
E eu vejo o contrário: não saber escrever código processual antigo e simples em C, por ser apenas ensinado OOP. Por outro lado, não me importe com pessoas que não são ensinadas a escrever analisadores, porque lhes dizem que todos esses problemas podem ser resolvidos usando lex e yacc.
quickly_now
1
@quickly_now Esse é um bom ponto, porém, writing code other ways than OOPe writing bad OOPsão duas coisas totalmente diferentes. O primeiro, não tenho problemas.
Nicole
A maioria das universidades não ensina design orientado a objetos. Além disso, muitos locais de trabalho funcionam como silos, mesmo com desenvolvedores juniores ... ou têm desenvolvedores "seniores" que não sabem o que é programação orientada a objetos. Há desenvolvedores "senior" que obteve o título de X anos de trabalho e desenvolvedores seniores que sabem seu material ....
Cervo
3

Sem saber o que você não sabe, e na ignorância pensando, você sabe tudo.

(E seu primo próximo, não querendo perguntar.)

Em parte, isso é uma coisa organizacional - uma indução de entrada apropriada ajudaria muito a impedir que algumas dessas coisas se tornassem problemas. Mas muito poucas empresas têm tempo ou pessoas disponíveis para uma indução de entrada - algo que deve levar de alguns dias a algumas semanas e tira os desenvolvedores de seu trabalho. Portanto, temos que apagar os fogos.

rapid_now
fonte
2

Estou impressionado com quantos programadores juniores relativamente novos de um programa de CS são fracos com algoritmos. A má escolha do algoritmo pode não se destacar na linha de aplicativos de negócios, mas ao processar bilhões de solicitações de serviço da Web por dia, isso realmente importa.

Aqui está uma pergunta de entrevista que uso, quase todos os programadores juniores sentem falta, destacando a questão:

Escreva um código que calcule o número Nésimo de Fibonacci .

Eles quase sempre se esforçam para escrever o óbvio, mas ineficiente

int Fib(int n)
{
    if (n == 0) return 0;
    if (n == 1) return 1;
    return Fib(n-2) + Fib(n-1);
}

Quando me pedem para comentar sobre a complexidade algorítmica, geralmente recebo "é pior que O (N) ... uhm ... O (N logN)". Na verdade, é (muito) pior que isso ...

Eric J.
fonte
1
Para responder sua pergunta sobre compleixty, deve-se conhecer a fórmula para calcular os números de fibonacci sem recursão, que ele usaria em vez de recursão em primeiro lugar.
precisa
1
@Pavel: Há um O (n) e uma (1) solução de S ... na verdade Like every sequence defined by linear recurrence, the Fibonacci numbers have a closed-form solution. en.wikipedia.org/wiki/Fibonacci_number#Closed-form_expression
Eric J.
1
Não estou dizendo que a solução que você postou é perfeita. Estou apenas questionando a relevância da sua pergunta de acompanhamento para essa solução, a questão sobre complexidade. O que você deseja alcançar perguntando e, o mais importante, por que você espera que o que você deseja seja alcançado, dada a resposta à pergunta anterior? (Será que eu fazer o meu ponto?)
P Shved
para deixar meu argumento mais claro, sugiro que você pergunte como o código pode ser aprimorado em vez de pedir para estimar a complexidade. Tenho certeza de que alguns graduados em CS propõem memoização ou dizem que conhecem a fórmula, mas não queriam mostrá-la de uma só vez, porque você acha que eles são espertos.
precisa
Em termos práticos, essa função pode ser descoberta usando um criador de perfil e otimizada adicionando um cache de memorização. A ineficiência é realmente apenas um problema para grandes valores de N. A melhor maneira de ensinar a um júnior sobre esse código é forçá-lo a percorrer toda a execução do código usando um depurador. Para realmente grandes valores de N, verifica-se que há uma fórmula matemática maths.surrey.ac.uk/hosted-sites/R.Knott/Fibonacci/...
Jamie McGuigan
1

Fazendo recuo de código para trás!

Claro que não é muito "típico". Eu nunca poderia acreditar que isso era possível, mas como um desenvolvedor normal escreveria

try {
    switch(action){
        case case1:
            ...
            break;
        case case2:
            ...
            break;
        default:
            break;
    }
}
catch(Exception e) {
    e.printStackTrace();
}

ela escreveria assim (Deus, ainda me parece impossível!)

            try {
        switch(action){
    case case1:
...
break;
    case case2:
...
break;
    default:
break;
        }
            }

Frustrante, não é?

Elijah Saounkine
fonte
O que em nome de ...
Mike Speed
1
É muito incrível !!!
Javanna #
É quase como se eles fossem árabe, hebraico ou chinês, onde você lê da direita para a esquerda, em vez da convenção ocidental da esquerda para a direita. É uma maneira perfeitamente válida de recuar o seu código, mas significa que você precisa re-recuar todo o arquivo com base no seu nível mais profundo de aninhamento, e isso torna o seu código incompatível com todos os que compartilham a convenção oposta.
21718 Jamie McGuigan