Como pano de fundo, estamos desenvolvendo aplicativos de engenharia de desktop, com uma interface do usuário do AutoCAD, algo semelhante ao etabs .
Uma coisa que realmente me incomoda é a necessidade de contratar os melhores desenvolvedores? Para iniciantes, estamos enfrentando grandes dificuldades no recrutamento; a maioria dos currículos que vemos são aplicativos CRUD simples ou personalização do SharePoint, que eu acho que realmente não envolve muita programação pesada. Mesmo aqueles a quem chamamos para entrevista, a maioria não consegue fazer a sequência de Fibonacci e uma simples busca binária, e somos gentis o suficiente para dar dicas e esclarecer os problemas explicitamente, para que os candidatos não precisem procurar um dicionário para verificar o que significa "sequência de Fibonacci".
Isso me fez pensar: Sim, precisamos de algum nível de aptidão para programação ao fazer coisas de geometria computacional / programação linear, e precisamos de algum nível de aptidão para programação ao projetar a arquitetura de software / ou decidir qual padrão de software usar, mas além disso , muito do nosso código é apenas código de canalização (eu acho), o que pode ser feito por alguém familiarizado com a programação.
Dado que realmente precisamos de talentos de programação agora e que a contratação de desenvolvedores de superestrelas é muito difícil, quero diminuir meu padrão e contratar apenas os mais ou menos, em contradição direta com o que Joel prega .
O que você acha?
Editar: você não precisa reescrever toda a geometria computacional / bibliotecas de programação linear; tudo o que você precisa fazer, no que diz respeito à minha aplicação, é saber como converter os problemas em questão em termos apropriados de programação geométrica / geométrica computacional e saber quando / como usar as bibliotecas existentes. Portanto, não é tão difícil quanto parece.
Respostas:
Eu sugiro que você pare de ler Joel demais. O que ele escreveu em seu blog contradiz suas respostas neste site, então eu realmente não confio na palavra dele por muito.
O que torna uma superestrela e por que é necessário ter uma abre uma discussão longa e sem saída. É elitismo e não é prático.
O que você precisa é de uma pessoa que:
O resto não tem importância.
Você não acreditaria em quantos jovens recém-formados estão lá fora, que não querem nada além de mergulhar nesse tipo de projeto com foco em CS e nunca olhar para codificar aplicativos CRUD. Há um tempo atrás eu era um deles, eu praticamente sonhava em ingressar em um projeto de desenvolvimento de compiladores, mas não consegui encontrá-lo. Por que não dar uma chance a um deles?
Não acredito que o AutoCAD tenha sido escrito por super-homens. A maioria dos projetos bem-sucedidos foi realizada por pessoas que simplesmente queriam concluir o projeto e realmente queriam isso.
O que esperar se a maioria dos empregos exigir exatamente isso? As pessoas podem ter estudado ciências da computação na universidade e até ter sido realmente boas nisso, mas não se pode esperar que elas se lembrem disso, se nunca usaram isso na programação prática em 10 anos. Obviamente, ninguém vai ler livros antigos de CS todos os anos apenas para mantê-lo atualizado, se esse conhecimento não for usado em lugar algum.
fonte
Um livro que eu realmente gosto é o primeiro que quebra todas as regras . Tem muitas informações sobre as diferenças entre gerentes médios e bons gerentes. Um dos principais insights que bons gerentes disseram repetidamente foi resumido por um deles na frase: nunca esperei muito tempo para encontrar a contratação certa e nunca demiti a contratação errada com rapidez suficiente. Sim, é frustrante levar muito tempo para contratar, mas vale a pena.
Um segundo ponto que você deve ter em mente é que, quando medido na taxa de transferência do projeto, há um pico de produtividade para equipes de 5 a 8 pessoas. Você não volta à mesma produtividade até ter uma equipe de mais de 20 pessoas. Seja muito, muito cauteloso ao fazer crescer uma equipe além do tamanho em que a dinâmica de pequenas equipes funciona. E se você permanecer abaixo desse limite, realmente deseja que essas 5 a 8 pessoas sejam boas.
Ambos os pontos falam fortemente no sentido de procurar a contratação certa.
fonte
Todos afirmam "contratar apenas o primeiro percentil". Se isso fosse verdade, 100% das pessoas empregadas estariam no "primeiro percentil" de todas as pessoas, portanto 99% de todas as pessoas estariam desempregadas (em qualquer campo). Como esse claramente não é o caso, e todos nós já experimentamos pessoas que claramente não fazem parte desse grupo (por que mais você faz essa pergunta ...) sabemos que isso não é verdade.
De fato, as organizações compostas exclusivamente por essas pessoas seriam altamente instáveis. Muito ego, muitas idéias conflitantes. Ele desmoronaria à medida que todo mundo faz suas próprias coisas, atolava em discussões teóricas intermináveis sobre os méritos relativos de tudo, ou evoluía para uma constante briga de gritos, à medida que os sentimentos surgem sempre que uma decisão precisa ser tomada.
fonte
A primeira coisa que você precisa perguntar é por que você está recebendo currículos que não estão dentro dos padrões que você deseja. Eu trabalhei com muitas pessoas boas, então elas estão por aí, e o aplicativo parece muito interessante para mim. Se você não conseguir pessoas que possam fazer sequências de Fibonacci e pesquisa binária (o que é mais difícil do que parece; de acordo com Knuth, foram vários anos entre a primeira publicação e a primeira publicação correta), você está fazendo algo para impulsionar o processo. bons longe.
Você está pedindo mais habilidade do que está disposto a pagar? Você está anunciando nos lugares errados? Sua empresa não é atraente por localização ou reputação? Esse é o seu primeiro e mais básico problema e o que você precisa resolver com urgência. Você e seus colegas, sem dúvida, conhecem algumas pessoas boas que não estão trabalhando para você. Mostre a eles o que você tem e pergunte se eles seriam tentados e, se não, por que não. Você pode estar muito perto do problema para entendê-lo sem ajuda.
Não contrate pessoas, porque elas são as melhores aplicadas. Contrate pessoas, pois elas poderão fazer o que você deseja. Se você contratar medíocre, porque isso é tudo o que se aplica, então você lentamente perderá boas pessoas e acabará com pessoas cuja álgebra é instável, tentando fazer coisas com geometria computacional. (Contratar medíocres porque você tem um emprego para dois programadores medíocres é outra coisa, mas você deve poder contratar pessoas de qualidade onde precisar delas.)
fonte
"a maioria não consegue fazer a sequência de Fibonacci e uma simples busca binária"
Seus critérios estão certamente errados. No meu grupo somos todos físicos ou engenheiros. Aposto que ninguém poderia fazer pesquisa binária porque não participamos de cursos de ciências da computação e, na vida real, usamos uma biblioteca para isso. Eu diria até: alguém que escreve o próprio binsearch não sabe como se concentrar em coisas importantes.
É de muito maior importância se o candidato for inteligente e se encaixar no grupo. Se você quiser verificar o talento de programação dele, dê a ele um trabalho para fazer em casa. Observe quanto tempo levou para ele / ela e discuta os resultados para descobrir se é o trabalho genuíno dos candidatos.
fonte
Eu acho que "contratar o melhor" está se tornando um culto demais.
A maioria dos trabalhos de programação é rotineira e não criativa. Mesmo ao trabalhar em novos projetos realmente criativos. A maior parte é monótona e frequentemente baseada em padrões. isso é particularmente verdadeiro para a interface do usuário.
A maioria dos sistemas modernos também exige que tantas pessoas os escrevam, que, inerentemente, nem todos podem ser os melhores. A maioria das pessoas é média, mesmo que não seja, ainda precisa realizar muitas tarefas "comuns".
Dito isto, exigir competência básica e requisitos mínimos sensíveis não é irracional e não é algo que você deva comprometer.
Pense em cirurgia de rotina: dependendo da sua tolerância ao risco, você provavelmente preferiria que um médico comum a realizasse, em vez de esperar 10 anos para que o reitor da faculdade de medicina tivesse tempo para fazê-lo. Isso não significa que você deve deixar o ordenado realizar a cirurgia.
fonte
"Contratar o melhor" tende a significar "contratar o melhor que está disponível atualmente aproximadamente onde estamos" de qualquer maneira, e significa coisas diferentes para empresas diferentes. Alguns querem codificadores da rockstar, outros querem engenheiros de software meticulosos e o próximo precisa de engenheiros de software experientes. Não existe um "melhor universal", portanto, lembre-se disso, e talvez as especificações do seu trabalho sugiram que você esteja procurando por um tipo de programador e a entrevista diga que você está procurando outro programador. De repente, você não recebe correspondências.
Dito isto, não gosto de trabalhar com programadores. Isso não tem nada a ver com experiência (eles podem estar programando há 20 anos e ainda não são muito bons nisso), mas tudo a ver com aptidão e entusiasmo. Se o mais ou menos afetar um desses dois, você tem um problema. Também não faz sentido contratar alguém cujas contribuições precisam ser retrabalhadas por outros membros da equipe, porque o código não é bom o suficiente. Infelizmente, mais vagabundos nos assentos nem sempre é a resposta; infelizmente, mais vagabundos nos assentos também podem significar mais trabalho para os melhores membros da equipe, enquanto eles tentam fazer seu trabalho e limpar a bagunça que o programador entregou .
Algumas pessoas não se apresentam como estrelas do rock, mas são sólidos programadores de nível intermediário. Eles são bons de se ter na equipe e não é isso que eu quero dizer com "tão programador". O último é alguém que mal evita ser demitido todos os anos no momento da análise de desempenho.
fonte
Como gerente, concordo que contratar "os 1% melhores" não é prático e não é necessário. Meu conselho seria contratar a equipe certa para criar e manter seu produto (podem ser duas equipes muito diferentes, pois compilar versus manter são muito diferentes em suas necessidades)
Eu sugiro fortemente que você identifique as pessoas que você tem atualmente em sua equipe que são "pessoas-chave" (por exemplo, faça as coisas, tenha boas atitudes, possa trabalhar bem com incerteza / requisitos de alto nível, etc.) e depois contrate as pessoas que eles têm trabalhou com no passado (e respeito, obviamente). Isso elimina muita incerteza em torno do processo de entrevista e ajuda a unir a equipe.
Além disso, mais "prazo mais longo" - invista fortemente em um programa de estágio. Se sua equipe de programação é composta por 20 pessoas, obtenha 5 estagiários por ano e ofereça um trabalho real. Traga de volta a uma ou duas que você gosta a cada ano e traga mais 5 variáveis aleatórias. Essa é provavelmente a melhor maneira de manter sua equipe cheia de bons programadores. Você pode contratar fora de forma oportunista e elevar a fasquia para esses candidatos.
Como já foi mencionado, preste atenção ao seu processo de entrevista. Faça com que os candidatos escrevam código (ou melhor, analise sua solução para um problema de "1 hora leva para casa") e faça-os almoçar com a equipe. Conheça suas habilidades técnicas e interpessoais. E nunca tenha medo de dizer "não", mesmo quando você estiver desesperado por mais 20 pessoas para um grande projeto que começa na próxima semana.
fonte
Na minha experiência, o Princípio de Paretto também se aplica à programação: 80% do trabalho é realizado por 20% dos desenvolvedores e vice-versa. OK, os números podem ser exagerados. Na realidade, você terá algo como 20% dos funcionários fazendo 50% do trabalho (por trabalho, quero dizer bom trabalho, não apenas linhas de código). Na verdade, é mais como uma curva de sino. Assim, em uma equipe de 10, você terá 1 herói, 2 grandes caras, 4 médios e 2-3 patéticos.
Muitas empresas usam a curva de Bell para avaliar as avaliações. Portanto, praticamente, por mais brilhantes que sejam seus candidatos, eles cairão em seus níveis. Você não pode ter uma equipe em que todos estejam no mesmo nível. Isso não acontece.
fonte
Já existem muitas respostas aqui, mas acho que ainda há um ponto que precisa ser discutido: o impacto que a contratação de pessoas mais ou menos tem sobre a qualidade do seu software e como isso dificulta sua vida como gerente.
A resposta para "é necessário contratar os melhores desenvolvedores?" é sempre um grande e gordo sim. Claro que, na realidade, isso nem sempre é possível. O erro perigoso que eu acho que você está cometendo ao considerar essa pergunta é pensar "nosso software é tão simples que até alguém tão capaz pode fazê-lo". Isto está errado.
Seu software será executado, não duvide disso, mas espere resultados muito diferentes de uma equipe excelente e de uma equipe mais ou menos. Você terá mais bugs, mais problemas de desempenho, mais problemas de manutenção e escalabilidade e assim por diante. Você terá que cuidar de seus filhos com problemas mais complexos. Você terá que tomar conta dos caras mais ou menos através de decisões de arquitetura adequadas.
Se você aceitar isso e estiver pronto para gerenciar isso, tudo bem. Apenas esteja preparado para o processo e os resultados.
fonte
Eu acho que não é realmente um problema contratar um ótimo desenvolvedor. O verdadeiro desafio é fazê-los querer trabalhar para você.
Há necessidade de contratar os melhores?
Eu acredito que sim. Um ótimo desenvolvedor não é apenas aquele que realiza tudo a tempo. Não apenas esse indivíduo é muito mais produtivo que outros. Um ótimo desenvolvedor também está liderando pelo exemplo e simplesmente inspirando outros membros da equipe. Outros poderiam avançar bastante ao trabalhar com eles.
OK, então você vai baixar seus padrões. Isso é legal, provavelmente você mudará de idéia depois de contratar um indivíduo realmente ruim. Aquele que responderá a todas as suas perguntas de CS na perfeição, mas que não pode realmente escrever uma única linha de código de produção. Boa sorte com isso :)
fonte
Vamos dar um passo atrás.
O que estamos tentando fazer? Escreva software.
Por que achamos que precisamos contratar os melhores? Porque aquele garoto do Arnold não conseguia sair de um saco de papel molhado e agora o SQL está todo errado e eu não consigo entrar.
Ok, então qual é o melhor ? Eu não sei, ele provavelmente é alguém que quer muito dinheiro e tem um currículo de um metro e oitenta de comprimento com um ótimo portfólio e trabalhou no google ou algo assim. Ele deveria ter um diploma, e talvez algumas letras no final de seu nome. Sim, isso parece o melhor para mim e, pelo melhor, quero dizer alguém que não é aquele garoto Arnold. Ah, e ele deveria saber como fazer uma porcaria muito difícil sobre a qual ouvi falar na escola, como "escreva uma espécie de bolha" ou o que eles chamarem. Vou pedir a um dos outros caras para citar algumas coisas complicadas que eles tiveram que fazer na escola, sim.
Parece que você simplesmente não quer aquele filho do Arnold? Você iria? Estou cansado de ter um código de buggy, as coisas levam uma eternidade para serem concluídas, e esses novos caras que entrevisto me dizem que preciso reescrever tudo!
Certo, então o que você pede ao filho do Arnold? Crie um site PHP, escreva jQuery, faça com que o PHP faça um CRUD básico com o MSSQL e altere as cores de segundo plano.
Isso soa como uma tarefa bem adequada exclusivamente para os melhores? Tenho certeza de que o melhor poderia fazer isso, mas provavelmente qualquer pessoa que possua o conjunto de habilidades certo que corresponda a isso poderia fazer isso.
Então, você não precisa do melhor? Certo, só preciso de alguém com o conjunto de habilidades que atenda aos meus objetivos.
Oh Sim.
fonte
O título da sua pergunta menciona um "Aplicativo de desktop normal", mas seu texto fala sobre a necessidade de aplicar conhecimentos de geometria computacional e programação linear. Essas são áreas de aplicação que geraram enormes programas de pesquisa de várias décadas com consequências sociais maciças de qualquer avanço (lembre-se, a programação linear abstrai a alocação de recursos ). Como resultado, existem muitas abordagens sofisticadas para solucionar problemas nessas áreas que funcionam muito bem.
Uma má contratação
Em outras palavras, pense se você está realmente trabalhando em algo para pedestres. Se você é ótimo, contratar deve ser muito mais fácil. Caso contrário, aguarde alguém que possa fazer o que você precisa.
fonte
Certamente não sou um programador de grandes estrelas pelos padrões de Joel. No entanto, escrevi alguns projetos de sucesso em meus 20 anos de carreira como desenvolvedor. Eu poderia ter resolvido suas perguntas. Porém, menos da minha experiência no trabalho, onde, na verdade, muito do trabalho mais complicado é feito solicitando ao banco de dados ou a uma função de biblioteca que o faça.
Mas se você decidir contratar pessoas menos experientes, considere usar tecnologias fáceis de manusear. Por exemplo, se você planejou usar o C ++ para todo o projeto, limite a parte do C ++ às bibliotecas criadas por seus melhores funcionários e permita que os outros implementem a interface do usuário no Visual Basic.
fonte
Anote os valores pesquisados em um funcionário que se juntará às suas fileiras.
Quando o único valor apreciado é a competência em programação, você se encontrará rapidamente cercado por pessoas que valorizam exatamente isso. Como os programadores verdadeiramente competentes têm um sistema de valores mais elaborado, eles se absterão de se juntar à sua equipe.
No entanto, é mais provável que você esteja procurando pessoas inovadoras, criativas, confiáveis, eruditas, curiosas, autodidatas, sociáveis, competentes e dedicadas. Mostre que sua empresa entende e respeita esses valores e está disposta a ajudar seus funcionários a desenvolvê-los ainda mais.
Entenda e adote os valores de seus funcionários atuais e comunique-os em seus pedidos de emprego. Boas empresas, com um sistema de valores sustentável, atraem bons funcionários.
fonte
Em qualquer organização, você tem pessoas com mais experiência e pessoas com menos. Não apenas isso, mas um especialista em um campo pode ser um novato em outro. Certamente um amador entusiasmado pode fazer mais mal do que bem a uma base de código, mas é assim que eles aprendem - corrigindo seus erros e discutindo sua experiência com seus colegas mais experientes.
Minha sugestão seria que, em vez de tentar contratar superestrelas, você tente contratar pessoas razoavelmente brilhantes, que se encaixem na cultura da sua empresa, que desejam aprender e tenham uma apreciação de suas próprias limitações.
fonte
Certamente você deve aspirar a contratar apenas os melhores. Isso não significa automaticamente que você será bem-sucedido nisso - existem tantos "melhores" para se movimentar, e haverá vencedores e perdedores na batalha para atraí-los. Muito disso virá da sua aptidão e vontade de trabalhar duro no problema e dos recursos disponíveis para você.
Desistir antes de começar é a maneira mais segura de perder.
fonte
A pesquisa binária é um problema interessante, porque é sabido que a maioria dos programadores se esforça para escrevê-la corretamente ( Bently escreve sobre isso em Programming Pearls ). Talvez não seja tão ruim testá-lo, desde que você não esteja descartando candidatos com base no fracasso em resolvê-lo. Se eles resolverem o problema de maneira rápida e correta, pelo menos isso indica que tipo de programador eles são, para que você tenha mais informações nesse caso específico.
fonte
você precisa contratar o melhor. mas o termo foi citado fora de contexto muitas vezes. você precisa encontrar o melhor candidato com as habilidades necessárias para essa posição e não o melhor programador em um sentido geral. O desenvolvimento de software é amplo e nem todas as posições exigem o mesmo conhecimento técnico.
Faça a si mesmo esta pergunta (você já o fez ..): Se você tem outro engenheiro na mesma posição por 5 anos, espera que ela se lembre das séries fibonanci e das pesquisas binárias?
se a resposta for não, altere seu padrão de entrevista. Pode ser que você precise conhecer uma dúzia de algoritmos de pesquisa se quiser trabalhar em um aplicativo de pesquisa como o google ou o bing. Todos os outros apenas usam map.get ("");
direcione suas entrevistas para o que a posição precisa, não para um bom programador genérico de livros didáticos.
fonte
Se você realmente não se importa com a qualidade, sugiro usar um dos sites de terceirização e começar com pequenos projetos. Então você pode pagá-los se eles puderem fazer o trabalho e ter uma maneira fácil de pagar a fiança, se não puderem.
No entanto, questiono se há realmente muita codificação de rotina em um aplicativo de engenharia de desktop. Eles podem ser muito complexos e a maioria dos programadores não é tão boa em gerenciar a complexidade. Você pode criar facilmente um monte de código legado instantâneo que amarrará sua equipe nos próximos anos. Em geral, as primeiras contratações para um novo projeto são as mais cruciais e definirão o tom para todo o projeto.
fonte
Eu concordo totalmente com a maioria dos comentários acima que se referem à adaptação de uma pessoa a um problema. Isso geralmente resulta em um relacionamento de longo prazo, em vez de contratar uma superestrela para trabalhar em um problema comum - o que o frustrará a sair rapidamente.
Dito isto, você deve sempre tentar contratar sua empresa em vez de uma posição específica. Porque esse mesmo cara vai alternar entre equipes mais cedo ou mais tarde com contatos pessoais, etc., e ele pode se tornar um peso morto em outro lugar. Garanta que sua empresa tenha diretrizes de transferência interna muito rígidas e que você tenha uma imagem clara do que fará em sua equipe nos próximos anos antes de contratar uma pessoa que você acha que pode não atender à barra da empresa (mas resolverá o problema atual ) Já vi muitos casos em que a mediocridade nos desenvolvedores fez a equipe trabalhar ainda mais para se adaptar a eles.
fonte