2 pontos por GN⁺ 2024-11-17 | 1 comentários | Compartilhar no WhatsApp
  • Algumas tarefas de programação irreais em entrevistas técnicas criam uma situação de pressão diferente do trabalho real e não conseguem medir adequadamente a capacidade prática do desenvolvedor
  • Tarefas individuais de alta pressão não refletem um ambiente de trabalho com colaboração e suporte, e tendem a virar algo como depurar uma base de código antiga sem documentação nem ajuda da equipe
  • Mesmo quando a empresa fala em uma “tarefa de 4 horas”, somando pesquisa sobre a empresa, revisão dos requisitos da vaga e refinamento da entrega, isso pode virar mais de 8 a 10 horas
  • Tarefas em uma stack sem relação com o cargo costumam ser justificadas como avaliação de adaptabilidade, mas pedir a um desenvolvedor Ruby que faça debugging em PHP pode não condizer com a aderência real ao papel
  • A contratação deve focar em tecnologias relevantes, resolução de problemas, colaboração e potencial de crescimento, em vez de tarefas arbitrárias de alta pressão; tarefas excessivas podem desgastar e afastar bons candidatos

Tarefas de entrevista desalinhadas do trabalho real

  • Algumas entrevistas técnicas pedem que o desenvolvedor resolva tarefas como depurar PHP legado ou criar um miniapp em poucas horas
  • Essas tarefas individuais diferem da forma como o trabalho realmente acontece
    • No trabalho, normalmente existe colaboração com a equipe e acesso ao suporte necessário
    • Ter de depurar rapidamente uma base de código antiga sozinho, sem documentação nem ajuda da equipe, não corresponde a um ambiente normal de desenvolvimento
  • As empresas veem isso como avaliação de “capacidade de resolver problemas”, mas, se a tarefa não estiver ligada às exigências reais do cargo, fica difícil avaliar a adequação prática do candidato

O custo oculto de tempo e o peso para o candidato

  • O tempo recomendado para tarefas de programação muitas vezes não reflete adequadamente o tempo que o candidato realmente gasta
    • Antes da tarefa, é preciso pesquisar a empresa e verificar os requisitos da vaga
    • Também é necessário tempo para refinar o projeto e deixá-lo em boas condições para entrega
    • Uma tarefa “de 4 horas” pode virar 8 horas, 10 horas ou mais
  • Para desenvolvedores que conciliam trabalho e vida pessoal, isso pode passar a sensação de trabalho não remunerado por um emprego que ainda nem conquistaram

Quando a avaliação de adaptabilidade erra o alvo

  • Tarefas em stacks sem relação com a vaga às vezes são justificadas como avaliação de “adaptabilidade”
    • Pedir a um desenvolvedor Ruby para depurar PHP, independentemente da importância da adaptabilidade, pode ser um critério inadequado para julgar o valor do candidato
    • Apenas a capacidade de lidar rapidamente com tarefas ambíguas e irrelevantes não basta para determinar se a pessoa se encaixa no cargo real
  • Algumas tarefas podem parecer mais uma forma de a empresa exibir um padrão “de elite” do que de avaliar a adequação do candidato
    • Se toda contratação criar uma barreira de “top 1%”, até candidatos experientes que poderiam desempenhar bem o trabalho podem desistir por causa de situações artificiais e de alta pressão

O que uma tarefa de contratação deve avaliar

  • O processo de contratação deve ser desenhado em torno das competências concretas exigidas pelo cargo
    • É preciso evitar tarefas no estilo bootcamp de programação que não tenham relação com as demandas reais do trabalho
    • O foco deve estar em resolução de problemas, colaboração e potencial de crescimento em áreas relevantes
    • Adaptabilidade deve ser avaliada como a capacidade de aprender no longo prazo, e não pela rapidez com que a pessoa executa tarefas arbitrárias

1 comentários

 
GN⁺ 2024-11-17
Opiniões do Hacker News
  • Quando foi a última vez que você depurou uma base de código antiga sem documentação nem ajuda da equipe? Sempre foi assim. Era uma base de 300 a 400 mil linhas de C++, e “legado” significava não ter teste nenhum; quase não havia documentação e, como único desenvolvedor de uma pequena empresa, eu precisava manter o serviço funcionando para dezenas de milhares de usuários enquanto corrigia bugs e adicionava funcionalidades.
    Um caso recente: havia um patch para uma funcionalidade central que estava parado havia mais de um ano; o autor original já não estava mais lá, e eu precisava reescrever o código do zero ou ressuscitar o patch para alinhá-lo ao master.
    A capacidade de entrar em um projeto e conduzir as pessoas em direção a um objetivo é claramente uma habilidade necessária para um desenvolvedor sênior, e concordo com a conclusão de que é preciso testar a capacidade de resolver problemas. Mas o conteúdo da entrevista técnica deve variar conforme a função: não há necessidade de pedir a um desenvolvedor web júnior que resolva algoritmos de grafos no quadro branco, mas um desenvolvedor sênior ou arquiteto de um produto de rede social precisa entender isso profundamente.

    • Concordo com “sempre foi assim”. Ainda hoje depurei uma parte central do sistema que, ao contrário do restante, é em Python, quase não é atualizada desde 2020, não tem comentários nem documentação, e o sistema de deploy é tão quebrado que dá vontade de chorar toda vez que penso nele.
      Na semana passada, depurei um código Go de 2020, também sem comentários nem documentação; também era uma parte central do sistema e parecia ter sido escrito por lunáticos. Doloroso.
    • Também preciso depurar código escrito por algum idiota seis meses atrás — ou seja, eu mesmo — e, como não lembro absolutamente nada de como depurá-lo, na prática é como se fosse código de outra pessoa.
    • É verdade. Engenheiros que acham que esse problema não existe são aqueles que enxergam dependências e camadas inferiores da stack apenas como caixas-pretas rígidas nas quais não se pode mexer. Eles deveriam vê-las como coisas nas quais, se necessário, é possível entrar, corrigir e até adicionar funcionalidades.
      Vejo a disposição de cavar até a camada inferior para resolver o problema na camada correta como uma das grandes soft skills que diferenciam engenheiros sênior. Em vez de contornar no próprio código, com correções posteriores, um bug ou uma funcionalidade ausente em uma camada mais baixa, corrigir na camada certa torna o sistema inteiro mais robusto a mudanças acima e abaixo na stack e a casos de uso futuros inesperados.
      Por outro lado, quando essa abordagem não é adotada, a base de código começa a apodrecer depois que os engenheiros sênior saem ou são substituídos por juniores. Por exemplo: se, para cada caso de borda no parsing de entrada, você acrescenta mais uma regex ingênua de validação antes de um parser assustador e opaco, em vez de corrigir a própria gramática do parser, a base de código está evoluindo para uma bola de lama.
      Claro que, ao corrigir na camada certa, muitas vezes a empresa precisa manter um pequeno branch de hotfix privado e de longo prazo de algum software do ecossistema usado na stack. O upstream normalmente não vê aquilo como um problema e não aceita o patch, então você precisa mantê-lo por conta própria.
      Em tom de brincadeira, talvez bastasse autenticar o perfil no GitHub e contar quantas vezes alguém criou ou manteve esses branches privados de hotfix de longo prazo para medir a senioridade de um engenheiro de forma muito mais simples do que com testes de programação.
    • A capacidade de entrar em uma base de código desconhecida — às vezes até em bibliotecas das quais se depende —, investigar rapidamente, depurar e encontrar a causa raiz é, pela minha experiência, muito valiosa.
      Não ajuda fingir que isso é inútil no mundo real. A realidade é bagunçada, a documentação muitas vezes não existe ou não é confiável, e a pessoa ou equipe que escreveu o código original pode já não estar mais lá.
    • Se o único desenvolvedor de uma pequena empresa atende dezenas de milhares de usuários, me parece que valeria a pena contratar mais desenvolvedores. É uma pena; deveria ser possível investir em testes e na melhoria da experiência de desenvolvimento, e trabalhar com menos estresse.
  • Tenho uma pequena anedota. O cônjuge de um amigo saiu do emprego no início deste ano e passou 4 a 6 semanas se preparando para entrevistas em cada empresa de Big Tech. Preparou-se 4 a 6 semanas para a Meta, 4 a 6 semanas para a Stripe, e assim por diante; no meio disso também fez entrevistas aleatórias para praticar e criar memória muscular, pesquisou os tipos de problemas que poderiam aparecer em cada empresa e resolveu LeetCode por algumas horas por dia
    No fim, deu tudo certo e aceitou uma oferta L6/staff de uma MAANG. Mas, conversando com essa pessoa esta semana, ela disse que, embora ainda nem tenha começado a nova função, já esqueceu a maioria dos detalhes que praticou. Disse que a preparação para system design foi a parte mais difícil, porque não tinha experiência em design de sistemas, mas agora se tornou staff eng em uma MAANG. Na prática, em um pequeno projeto que fizemos juntos, era uma ótima pessoa, mas não um engenheiro excepcionalmente brilhante
    É realmente estranho, e parece explicar bastante os ciclos de alta e baixa nas contratações. Quando você assiste a vídeos de preparação para entrevistas de system design, eles parecem quase roteiros. Basta entrar na entrevista e seguir o roteiro; não parece importar se a pessoa de fato já projetou sistemas parecidos ou mais complexos. O objetivo da entrevista de system design, no fim, parece ser “você conhece o roteiro?”
    Se você assistir a estes dois vídeos em sequência a 2x, é surpreendente como a execução parece roteirizada: https://www.youtube.com/watch?v=4_qu1F9BXow, https://www.youtube.com/watch?v=_K-eupuDVEc

    • Quando eu cuidava de contratação no passado, criava problemas pelos quais eu pudesse conduzir o candidato, para observar o que ele descobria na hora e como revelava coisas que nem sabia que sabia. Os problemas de quadro branco que aprendi eram isso, não esse estilo LeetCode de hoje
      Meus pais estiveram no setor de tecnologia de Santa Cruz nos anos 1980 e 1990, e naquela época o pool de talentos não era grande, então isso era uma ferramenta inclusiva para encontrar pessoas que pudessem crescer como desenvolvedores. A indústria atual adotou essa prática, mas a transformou no exato oposto: algo excludente
      Uma das pessoas que contratei era física, não conhecia nada da terminologia especializada e ficou apavorada quando viu o primeiro problema de quadro branco. Quando a levei até um ponto em que se sentisse confortável, ela começou a falar sobre ferramentas que tinha criado para ajudar em seu trabalho de física; quando eu disse que aquelas ferramentas, feitas sem conhecimento de desenvolvimento, eram software, ela ficou surpresa. Não só aquilo era software de verdade como era muito impressionante, e o problema de quadro branco serviu como ferramenta para revelar potencial
      Entendo que grandes empresas queiram widgets prontos para encaixar no lugar de pessoas, mas é engraçado que estejam usando algo que foi criado originalmente para o propósito oposto. Também penso que, de certa forma, é uma sorte eu já estar velho o bastante para não ter esperança de entrar em uma empresa bacana que usa esses desafios de código
    • Conversando com recrutadores dessas empresas, fica claro que esse método foi projetado de propósito para ser relativamente meritocrático
      A lógica é que, independentemente da universidade em que você estudou, das disciplinas que cursou ou das vantagens e desvantagens que teve, se você tem as qualidades necessárias para a função, esse é um conteúdo que pode aprender em poucos meses. Como as técnicas são muito padronizadas, o processo também se torna bastante objetivo
      Não se espera que você use aquelas técnicas específicas no trabalho real. Em vez disso, você demonstra que consegue aprender esse tipo de técnica e desempenhar em alto nível em uma situação de entrevista muito estressante. A lógica é que isso é um bom sinal de que você conseguirá aprender as tecnologias necessárias para o projeto ao qual será alocado depois e entregar sob grande pressão de prazo
      Não estou defendendo esse sistema, mas há uma lógica clara por trás dele
    • Fico curioso para saber se você trabalhou com essa pessoa depois de ela passar por esse processo de treinamento. Treinar problemas de código de estruturas de dados e algoritmos e estudar system design podem transformar um engenheiro. Talvez ela tenha ficado muito melhor do que você imagina
      A pessoa diz que esqueceu, mas, se conseguiu aquela posição, provavelmente era capaz de resolver problemas médios do LeetCode. É difícil acreditar que tenha esquecido tudo; é bem possível que ainda consiga resolver problemas fáceis que a maioria das pessoas não resolveria de improviso. Provavelmente ainda sabe a complexidade de operações essenciais de backend, como busca, ordenação, arrays e consultas em hash, e percursos em árvores e grafos
    • Só a própria pessoa sabe que projetou sistemas mais complexos. O entrevistador não tem como saber se isso é verdade ou se ela é uma atriz seguindo um roteiro de atuação do tipo “já projetei sistemas complexos”
      E talento para atuação talvez seja mais comum na população geral do que talento para programação
    • Então parece que o sistema funcionou exatamente como pretendido. Uma pessoa que parece inteligente conseguiu um bom emprego; não entendo qual é exatamente o problema dessa história
  • Recentemente conduzi um processo de entrevista para uma vaga relativamente sênior de engenharia em uma startup pequena. Como acredito que pessoas diferentes se dão melhor com formatos diferentes de entrevista, ofereci opções a todos:

    1. Um teste para fazer em casa, planejado para levar cerca de 4 horas, mas sem limite real de tempo. Não era um problema de algoritmo, e sim um projeto reduzido baseado em algo que eu tinha feito de verdade no mês anterior
    2. Um exercício de pair programming ao vivo por 2 horas. Era uma variação do item 1, mas mais na linha de “vamos ver até onde você chega em 2 horas”
    3. Enviar uma amostra de código de trabalhos anteriores Como vi muita raiva contra testes para fazer em casa, achei que as escolhas se distribuiriam de forma equilibrada entre as três opções, mas, surpreendentemente, cerca de 90% a 95% dos candidatos escolheram o teste para fazer em casa. Como candidato, essa também seria a minha forma preferida, então foi um dado interessante, e foi muito surpreendente ver que a maioria preferia isso
    • Eu prefiro um pouco mais o formato para fazer em casa, principalmente por ser menos caótico. O problema é que não há garantia de que a outra parte vá dedicar tempo a isso. Em uma entrevista presencial, a empresa também assume um custo considerável, então dá para considerar que é menos provável que meu tempo seja desperdiçado. A assimetria no processo de busca de emprego já está aumentando, e os testes para fazer em casa aceleram ainda mais essa tendência. Um amigo não técnico ainda me olha torto porque, no passado, eu não terminei um desses testes. O requisito principal era claramente trivial, mas as instruções eram vagas o bastante para eu conseguir gastar horas tentando decidir se a entrega estava boa o suficiente para enviar. Além disso, eles esperavam um conjunto estreito de tecnologias; não era difícil, mas eu não queria aprendê-las só pela chance de talvez ajudar uma empresa que dizia “não encontrar talentos técnicos”
    • Fico curioso se você perguntou por que eles escolheram o teste para fazer em casa. Acho que eu preferiria as opções 1 e 2 à 3. Para o entrevistador avaliar melhor minha abordagem, ele precisa entender o problema que estou resolvendo. Se eu fizer em casa e enviar depois, o entrevistador pode comparar minha solução com a dele ou com outras soluções e, usando a mesma tarefa como referência, entender melhor meu estilo de codificação. Se trabalharmos juntos em pair programming, ele pode ver meu processo de raciocínio, e eu também consigo explicar melhor por que escolhi determinados idioms. Código antigo quase não tem contexto. É apenas código escrito para outro projeto. Pode ser útil nas fases iniciais, junto com o currículo, para confirmar que a pessoa realmente sabe escrever código; mas, em etapas posteriores, só seria impressionante se houver uma aplicação funcionando e eu puder guiar o entrevistador pelo código de uma funcionalidade específica. Mas quantas pessoas simplesmente têm um software funcionando à disposição? Normalmente, o que se tem é um código que funciona mais ou menos à base de alguns truques. Eu prefiro a opção 1 à 2. Porque reduz a chance de eu cometer erros. Em vez de correr o risco de me atrapalhar em 2 horas ao vivo por causa da pressão e da lei de Murphy, obviamente prefiro gastar mais 2 horas em casa e ter liberdade para pesquisar o que eu não souber
    • Sou um engenheiro introvertido de habilidade mediana, mas, como alguém que resolve problemas há mais de 10 anos, eu escolheria a opção 2. Pessoalmente, consigo explicar meu pensamento com muito mais facilidade, há muito menos trabalho a fazer, e acho que há mais formas de causar uma boa impressão no entrevistador. Também já estive do lado de quem avalia testes para fazer em casa, e sei como é difícil impressionar alguém por meio deles
    • Eu achei que “3. Enviar uma amostra de código” venceria de lavada. Como é algo que já está pronto, parecia óbvio; fico curioso se alguém de fato escolheu isso
    • A ideia de oferecer opções é interessante, mas, do ponto de vista de um gerente de contratação, isso torna o problema mais difícil. Como comparar os resultados de opções diferentes de forma justa? Acho que comparar candidatos de forma justa já é bem difícil mesmo quando todos passam pela mesma entrevista. Na última entrevista de programação real que fiz, eu podia escolher qualquer linguagem de programação e também escolher um entre três problemas para resolver. Gostei bastante e recebi a oferta. Em uma entrevista com limite de tempo, poder escolher Python em vez de C++ quase parecia trapaça
  • Quanto mais reclamações vejo online sobre entrevistas de programação, mais me convenço de que a entrevista de programação é, de longe, a melhor forma de filtrar candidatos para vagas de desenvolvimento de software. No setor como um todo, há gente demais que só fala bem, impostores e pessoas que marcam reuniões, e falta gente disposta a arregaçar as mangas, mergulhar no código e realmente terminar o trabalho. Esse problema fica ainda pior em níveis mais altos. Pode reclamar à vontade, mas uma vaga confortável de US$ 500 mil por ano na FAANG não é um direito adquirido. Se você não está disposto a revisar programação básica e escrever alguns loops for, a empresa simplesmente vai passar para alguém que esteja

    • Eu passo bem por esse tipo de entrevista, estou em uma FAANG e devo me mudar para outra FAANG este mês. Mesmo assim, essas entrevistas são inúteis e dão sinais falsos sobre capacidade de resolver problemas e de aprender. Se a entrevista realmente testasse a capacidade de arregaçar as mangas e mergulhar no código, não entendo por que, depois de entrar como novo funcionário, precisei explicar tantas práticas de engenharia de software e depuração para pessoas que estavam lá havia muito mais tempo. Se você já trabalhou de fato em uma grande empresa, sabe que 90% do trabalho real é feito por 5% ou menos das pessoas. Se as entrevistas funcionassem direito, essa proporção deveria ser muito melhor
    • Eu não gosto de desafios de programação, mas não porque sejam difíceis. É porque eles favorecem quem tem tempo para fazer desafios de programação. Ainda assim, é verdade que há muitos falsos profissionais no setor, e testes de programação talvez sejam, por enquanto, a melhor forma de filtrá-los
    • Talvez isso tenha sido verdade no passado, mas hoje surgiu uma indústria inteira para ajudar as pessoas a explorar esse sistema. Há Cracking the Coding Interview, Elements of Programming Interviews in Java/Python/outras linguagens, LeetCode e sites com assinatura premium paga, além de bootcamps de entrevistas simuladas. Agora é menos uma questão de habilidade e mais de jogar com o sistema
    • Você está dizendo que “entrevistas de programação são a melhor forma absoluta de filtrar candidatos para vagas de desenvolvimento de software” e, ao mesmo tempo, que “há gente demais no setor que não consegue fazer o trabalho”. É surpreendente não haver nenhuma dissonância cognitiva entre a premissa de que entrevistas de programação são o método padrão de contratação e a realidade de que os resultados são tão ruins
    • Mesmo aceitando que o LeetCode em geral seja bom, e quanto à variação cada vez mais dominante de engenheiros de ML/AI? Se o problema for algo como tokenização de LLM, como você proibiria o uso de LLM em um problema de “ML-LeetCode”? Se o candidato for um especialista em programar usando Cursor e Claude com habilidade, resolver em 10 minutos com 3 prompts e correções de 2 erros fáceis de encontrar, e ainda tiver artigos no nível da NeurIPS e código open source, eu filtrei um impostor fraudulento ou descartei um candidato de altíssimo nível? Não acho que problemas no estilo LeetCode façam sentido para pessoas que trabalham com LLMs. Gostemos ou não, uma parcela cada vez maior das vagas confortáveis de US$ 500 mil por ano em FAANG+ terá relação com LLMs
  • Pedir a um desenvolvedor Ruby para depurar PHP como teste de flexibilidade soa como um teste razoável. Um bom desenvolvedor, especialmente um desenvolvedor sênior, deveria conseguir fazer esse tipo de coisa. Classificar-se apenas como “desenvolvedor Ruby” é uma armadilha de carreira

    • E também é uma armadilha que pode render bastante dinheiro
    • Dependendo de quem conduz e de como conduz, pode ser um exercício interessante ou horrível. Mas, se a vaga foi anunciada como uma função Ruby e o candidato tem boas opções, isso pode fazê-lo ir embora achando que a descrição da vaga era mentira
    • Concordo. Isso aconteceu com frequência suficiente no trabalho real, então não é um exemplo totalmente inventado. Em geral, na empresa inteira há só duas ou três pessoas que conseguem e estão dispostas a fazer isso
      Às vezes é preciso depurar uma DSL antiga e específica de fornecedor, ou código em que o framework e os padrões são tão antigos que quase viraram outra linguagem
      Também há casos de adicionar suporte a funcionalidades backportadas ou corrigir falhas de segurança em clientes antigos e stacks legados. Em uma empresa grande, já tivemos de assumir a responsabilidade pelo código em escrow de um parceiro muito menor
      Preparar o ambiente para conseguir depurar direito muitas vezes dá mais trabalho do que a correção em si. Ainda assim, é um bom teste para nível sênior ou acima
    • Já passei em um teste de JavaScript e fui contratado sem nunca ter escrito uma linha de JavaScript. A tarefa era quase interativa
      Quando o entrevistador disse “inverta este array”, respondi: “Em Python eu usaria array.reverse() ou reversed(array), e em JS deve haver uma dessas opções, então provavelmente é o método .reverse”. O entrevistador disse: “Bom palpite”
      Achei sinceramente divertido, saí com a sensação de ter aprendido algumas coisas, e eles também puderam ver como eu raciocinava diante de um problema novo
    • Colocar a carreira acima da saúde mental também é uma armadilha de vida
  • Já depurei várias vezes bases de código antigas sem documentação nem ajuda da equipe. Existem, sim, sistemas em que ninguém que os criou continua por perto e a documentação não existe ou não pode ser encontrada. Então esse exemplo não é muito bom. A capacidade de depurar um programa, seguir o fluxo de uma requisição e ver o que está acontecendo é uma boa habilidade
    Mas o ponto em que esse exemplo é realmente ruim é encaixotar o desenvolvedor em uma tecnologia específica. Se você tem uma aplicação PHP legada, acaba filtrando desenvolvedores Java, Python, Ruby e Go que têm essa habilidade de depuração, mas que seriam mais lentos por não conhecer PHP. Mesmo que, depois de alguns meses mexendo diretamente com PHP, eles pudessem ser desenvolvedores mais fortes
    Concordo que uma “tarefa de 4 horas” pode facilmente virar 8, 10 horas ou mais para produzir algo bom. O tempo indicado pode ser manipulado com facilidade, então quem tem mais tempo pode parecer um candidato melhor

    • Quando entrevistei na Stripe, eles tinham problemas do tipo “depure isto” preparados em várias linguagens. Acho que eram Ruby, Java, Python, JavaScript, Go e talvez mais uma ou duas. Era muito bom, mas também parecia exigir bastante trabalho
  • Quando foi que depurei uma base de código antiga sem documentação nem ajuda da equipe? Todos os dias desta semana
    Quanto à documentação, o código foi atualizado pela última vez em junho e a documentação foi atualizada pela última vez em janeiro de 2022
    Quanto à equipe, a metade que não foi demitida há dois anos já saiu para lugares melhores. Claro que existe uma equipe dona deste projeto, mas ela também tem outros três projetos, e no último ano contribuiu aqui com uma dúzia e poucos de linhas, das quais 11 eram atualizações de dependências

    • Fazer isso no trabalho é aceitável, mas fazer em uma entrevista é um problema, na minha opinião. Nem todo mundo fica confortável em um ambiente desconhecido, diante de pessoas desconhecidas. Por favor, deem um teste em formato de tarefa e não fiquem conversando entre vocês enquanto eu estou em frente ao quadro branco
  • “Parece fazer um desenvolvedor Ruby depurar PHP”, “se a função exige uma tecnologia específica, teste essa tecnologia” soa como alguém que foi reprovado em um desafio de código
    Falando sério, empresas raramente adotam práticas de contratação só por diversão. Normalmente é a melhor forma que aquela inteligência coletiva conseguiu conceber. Pedir para acabar com isso sem tentar entender qual problema elas estão tentando resolver e sem propor alternativas não é produtivo
    Acho que, em desenvolvimento de software, reinventamos a roda com frequência demais em vez de tomar emprestadas práticas de outras profissões. Vamos ver por quais processos de contratação os engenheiros civis passam para ganhar metade do salário de desenvolvedores de software e integrar isso às nossas práticas. Aí todos seremos soldados felizes

    • A ideia de que empresas não criam práticas de contratação só por diversão e que isso é o melhor produzido pela inteligência coletiva delas parece pouco provável. Normalmente é algo que a pessoa mais sênior leu ou vivenciou no passado e trouxe para cá
      Acho muito improvável que tenham refletido sobre o que realmente queriam alcançar. Elas simplesmente fizeram porque os outros fazem e acreditam que alguém, em algum lugar, criou o processo com uma intenção
      A contratação em tecnologia se perdeu tanto que parece ter se acomodado, na melhor das hipóteses, em um máximo local
    • Ainda assim, talvez dê para criar software melhor
  • Tive uma experiência muito ruim em uma empresa que não fazia nenhum teste de programação. Eram apenas 2 ou 3 entrevistas
    O problema apareceu quando comecei a trabalhar com a equipe de engenharia de dados. A maior parte da stack era baseada em Hadoop, Kubernetes, Ruby, Python e várias outras tecnologias, e exigia uma compreensão básica de computação em nuvem
    Mas as experiências profissionais e os históricos eram tão díspares que, em vez de fazer o trabalho para o qual fui contratado, eu muitas vezes ficava cobrindo lacunas de outras pessoas. Alguns colegas não conseguiam fazer nem tarefas básicas, como empacotar uma CLI em Python usando Docker ou verificar jobs do Hadoop, então acabei fazendo muito trabalho de cola para compensar isso
    No fim, saí. Não porque eu me achasse especial, mas porque me cansei de gastar 80% do meu tempo dando suporte a pessoas contratadas no mesmo nível que eu ou em níveis mais altos. Reconheço que as práticas de contratação daquela empresa eram muito ruins, mas algum tipo de teste técnico básico é necessário

    • Fico curioso se “não conseguiam fazer nem tarefas básicas” quer dizer que não conseguiam executar completamente o trabalho atribuído, ou se apenas travavam em tarefas simples, mas no geral eram independentes e competentes
      Outra pergunta importante é se era preciso explicar a mesma coisa repetidamente para a mesma pessoa. Não saber algo é aceitável, mas não querer aprender é difícil de aceitar
  • A parte interessante dos testes em formato de tarefa é que existe um risco moral que incentiva a pessoa a gastar mais tempo, mesmo quando dizem “use apenas X horas”. Também surge o incentivo para mentir sobre o tempo realmente gasto se a empresa perguntar.
    Já entreguei tarefas várias vezes resolvendo o problema de forma adequada e enfatizando que fiquei dentro do tempo recomendado, mas na entrevista seguinte fui repreendido com “por que você não implementou X?”.
    Nesse sentido, testes em formato de tarefa excessivamente abertos são tarefas ruins. Porque favorecem quem tem mais tempo livre e consegue caprichar mais. Um abraço para os testes em formato de tarefa de ciência de dados que exigem uma apresentação em PowerPoint como entrega final.

    • É exatamente isso. Aí, depois, alguém sentado na empresa, que nunca me encontrou nem conversou comigo, reclama que há comentários demais, ou que eu não usei o formatador de código preferido deles, ou que não fiz verificação opcional de tipos. Se querem um guia decente de configuração do projeto, têm que pagar por isso.