A opção “Contratação apenas do melhor” é um conselho realmente prático para a programação normal de aplicativos de desktop? [fechadas]

60

Como pano de fundo, estamos fazendo aplicativos de engenharia de área de trabalho, com uma interface de usuário semelhante ao AutoCAD, algo semelhante a etabs .

Uma coisa que realmente me incomoda é, existe alguma necessidade de contratar os melhores desenvolvedores? Para começar, estamos enfrentando grandes dificuldades no recrutamento; a maioria dos currículos que vemos são aplicativos CRUD simples ou personalização do SharePoint, o que eu acho que não envolve muita programação hardcore. Mesmo aqueles a quem chamamos para entrevista, a maioria não pode fazer seqüência de Fibonacci e uma busca binária simples, e nós somos gentis o suficiente para dar dicas e soletrar os problemas explicitamente para que os candidatos não façam tem que 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 de programação ao fazer programação de geometria computacional / programação linear, e precisamos de algum nível de aptidão de 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 encanamento (eu acho), o que pode ser feito por alguém com alguma familiaridade com programação.

Dado que nós realmente precisamos de talentos de programação agora, e dado que contratar desenvolvedores superestrelas são muito difíceis, eu quero baixar meu padrão e contratar apenas os mais ou menos, em contradição direta com o que Joel prega .

O que você acha?

Edit: 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 lançar os problemas em questão em termos de programação geométrica / linear computacional apropriados e saber quando / como usar as bibliotecas existentes. Então não é tão difícil quanto parece.

    
por Graviton 04.05.2011 / 12:25
fonte

21 resposta

110

Eu sugiro que você pare de ler Joel demais. O que ele escreveu em seu blog contradiz com suas respostas neste site, então eu realmente não acreditaria muito em sua palavra.

O que faz uma superestrela e por que é necessário ter uma abre uma longa e uma discussão em nenhum lugar. É elitismo e não é prático.

O que você precisa é de uma pessoa que:

  1. Adoraria estar fazendo o que você está fazendo
  2. Seria um programador entusiasta apaixonado
  3. Teria potencial para aprender o que é preciso para fazer o seu trabalho corretamente

O resto não tem importância.

Você não acreditaria quantos jovens recém-formados estão lá fora que não querem mais nada além de mergulhar nesse tipo de projeto CS-strong e nunca olhar para codificar aplicativos CRUD. Um tempo atrás eu era um deles, eu praticamente sonhei em me juntar a um projeto de desenvolvimento de compiladores, mas não consegui encontrar um. Por que não dar uma chance a um deles?

Eu não acredito que o AutoCAD tenha sido escrito por super-homens. A maioria dos projetos de sucesso foi feita por pessoas que simplesmente queriam fazer a coisa e eles realmente queriam isso.

most resumes we see are either doing simple CRUD apps, or SharePoint customization

O que esperar se a maioria dos trabalhos exigir apenas isso? As pessoas podem ter estudado CS na uni e até mesmo ter sido muito bom nisso, mas você não pode esperar que elas se lembrem disso se nunca utilizaram isso em programação prática em 10 anos. Obviamente, ninguém vai ler todos os anos sobre livros antigos de comunicação social apenas para mantê-lo atualizado, se esse conhecimento não for usado em qualquer lugar.

    
por 29.04.2011 / 09:30
fonte
41

Um livro que eu realmente gosto é Primeiro, quebre todas as regras . Ele tem muitas informações sobre as diferenças entre gerentes médios e bons gerentes. Um dos principais insights que os bons gerentes disseram repetidas vezes foi resumido por um deles na frase: Eu nunca esperei muito tempo para encontrar a contratação certa, e nunca disparei o contrato errado rápido o suficiente. Sim, é frustrante levar muito tempo para contratar, mas vale a pena.

Um segundo ponto que você deve ter em mente é que, quando medido no rendimento 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 sobre o crescimento de uma equipe além do tamanho onde a dinâmica da pequena equipe funciona. E se você vai ficar abaixo desse limiar, então você realmente quer que essas 5-8 pessoas sejam boas.

Ambos os pontos falam strongmente em relação à contratação certa.

    
por 29.04.2011 / 09:26
fonte
26

Todos afirmam "contratar apenas o percentil 1 superior". Se isso fosse verdade, 100% das pessoas empregadas estariam todas no "top 1 percentil" de todas as pessoas, então 99% de todas as pessoas estariam desempregadas (em qualquer campo). Como isso claramente não é o caso, e todos nós já experimentamos pessoas que claramente não estão nesse grupo (por que mais você faz essa pergunta ...) sabemos que isso não é verdade.

Na verdade, organizações formadas unicamente por essas pessoas seriam altamente instáveis. Muito ego, muitas ideias conflitantes. Ou se desmoronaria quando todo mundo faz sua própria coisa, atolado em intermináveis discussões teóricas sobre os méritos relativos de tudo, ou evoluir para uma constante gritaria enquanto os sentimentos se inflamam sempre que uma decisão tem que ser tomada.

    
por 29.04.2011 / 10:03
fonte
25

A primeira coisa que você precisa perguntar é por que você está recebendo currículos que não estão à altura dos padrões desejados. 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 consegue pessoas que podem fazer sequências de Fibonacci e busca binária (o que é mais difícil do que parece; de acordo com Knuth foi vários anos entre sua primeira publicação e sua primeira publicação correta), você está fazendo algo para bons fora.

Você está pedindo mais habilidade do que você está disposto a pagar? Você está anunciando nos lugares errados? Sua empresa não é atraente por localização ou reputação? Este é o seu primeiro e mais básico problema, e aquele 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 entender isso sem ajuda.

Não contrate pessoas porque elas são as melhores aplicadas. Contrate pessoas porque elas poderão fazer algo que você quer que seja feito. Se você contrata medíocre porque isso é tudo o que se aplica, então você vai lentamente perder pessoas boas, e você vai acabar com pessoas cuja álgebra está instável tentando fazer coisas com geometria computacional. (Contratar medíocre porque você tem um trabalho para um par de programadores medíocres é outra coisa, mas você tem que ser capaz de contratar pessoas de qualidade onde você precisa delas.)

    
por 29.04.2011 / 16:48
fonte
18

"a maioria não pode fazer seqüência de Fibonacci e uma simples busca binária"

Seus critérios certamente estão errados. No meu grupo, somos todos físicos ou engenheiros. Aposto que ninguém poderia fazer busca binária porque nós não frequentamos cursos de CS e na vida real nós usamos uma biblioteca para isso. Eu diria mesmo: alguém que escreve binsearch por si mesmo não sabe como se concentrar em coisas importantes.

É muito mais importante se o candidato for inteligente e se encaixar no grupo. Se você quiser conferir o talento de programação dele, dê a ele / ela um trabalho para fazer em casa. Observe quanto tempo demorou e discuta os resultados para descobrir se é o trabalho genuíno do candidato.

    
por 02.05.2011 / 18:00
fonte
13

Eu acho que "contratar o melhor" está se tornando muito culto.

A maioria dos trabalhos de programação é rotineira e não criativa. Mesmo quando se trabalha em novos projetos realmente criativos. A maior parte é monótona e muitas vezes baseada em padrões. isso é particularmente verdadeiro para a interface do usuário.

A maioria dos sistemas modernos também exige que muitas pessoas os escrevam, que inerentemente, todos eles não podem ser os melhores. A maioria das pessoas é média, mesmo que não sejam, elas ainda precisam fazer muitas tarefas "comuns".

Dito isto, exigir competência básica e requisitos mínimos razoáveis não é irrazoável e não é algo que você deve comprometer.

Pense em cirurgia de rotina: Dependendo da sua tolerância ao risco, você provavelmente preferiria ter um médico mediano em vez de esperar 10 anos para que o reitor da faculdade de medicina tivesse tempo de fazê-lo. Isso não significa que você deva deixar o enfermeiro fazer a cirurgia.

    
por 04.05.2011 / 13:06
fonte
8

"Contratar os melhores" tende a significar "contratar os melhores que estão atualmente disponíveis aproximadamente onde estamos" e significa coisas diferentes para empresas diferentes. Alguns querem programadores de rockstar, outros querem engenheiros de software meticulosos e o próximo, no futuro, quer artesãos experientes em software. Não há "melhor universal", então tenha isso em mente, e talvez sua especificação de trabalho sugira que você está procurando por um tipo de programador e a entrevista diz que você está procurando por outro tipo de programador. De repente, você não recebe correspondências.

Dito isto, não gosto de trabalhar com programadores mais ou menos. Não tem nada a ver com experiência (eles podem ter programado por 20 anos e ainda não são muito bons nisso), mas tudo a ver com aptidão e entusiasmo. Se o so-so afeta qualquer um desses dois, você tem um problema. Também não faz sentido contratar alguém cujas contribuições precisem ser retrabalhadas por outros membros da equipe, porque elas não são boas o suficiente. Mais vagabundos nos assentos nem sempre estão na resposta, mais vagabundos nos assentos podem infelizmente também significar mais trabalho para os melhores membros da equipe enquanto eles estão tentando fazer seus trabalhos e limpar a bagunça o programador so-so entregou.

Algumas pessoas não aparecem como rockstars, mas são sólidas programadoras de nível médio. Eles são bons para ter na equipe e não é isso que eu quero dizer com "so-so programador". Este último é alguém que dificilmente evita ser demitido todos os anos no tempo de avaliação de desempenho.

    
por 30.04.2011 / 01:03
fonte
6

Como tipo de gerente, concordo em contratar "o 1% superior" não é prático e não é necessário. Meu conselho seria contratar a equipe certa para construir e manter seu produto (podem ser duas equipes muito diferentes, já que build vs maintain são muito diferentes em suas necessidades)

Eu sugiro strongmente que você identifique as pessoas que você tem atualmente em sua equipe que são "pessoas-chave" (por exemplo, fazer as coisas, ter boas atitudes, trabalhar com incerteza / requisitos de alto nível, etc.) e depois contratar pessoas com quem eles trabalharam no passado (e respeito, obviamente). Isso elimina muita incerteza em torno do processo de entrevista e ajuda a equipe.

Além disso, mais "prazo mais longo" - investir strongmente em um programa interno. Se sua equipe de programação é de 20 pessoas, obtenha 5 estagiários por ano e dê a eles um trabalho real. Traga de volta o que você gosta a cada ano e traga mais 5 variáveis aleatórias. Esta é provavelmente a melhor maneira de manter sua equipe repleta de bons programadores. Você pode então contratar fora oportunisticamente e elevar o nível para esses candidatos.

Como já foi mencionado, preste atenção ao seu processo de entrevista. Faça os candidatos escreverem o código (ou melhor, percorrer a solução para um problema de "1 hora para levar para casa") para que comam o almoço com a equipe. Conheça suas habilidades técnicas e interpessoais. E nunca tenha medo de dizer "não" mesmo quando você está desesperado por mais 20 pessoas para um grande projeto que começa na próxima semana.

    
por 02.05.2011 / 19:11
fonte
6

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. Então, em um time de 10, você terá 1 herói, 2 ótimos caras, 4 médios e 2-3 patéticos.

Muitas empresas usam a curva de Bell para avaliar as avaliações. Então, não importa quão brilhantes 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. Não acontece.

    
por 19.10.2011 / 21:08
fonte
4

Já existem várias respostas aqui, mas acho que ainda há um ponto que precisa ser discutido: o impacto que a contratação de caras com a qualidade do seu software e como isso torna sua vida como gerente muito mais difícil.

A resposta para "existe alguma necessidade de contratar os melhores desenvolvedores?" é sempre um grande gordo SIM. Claro que, na realidade, isso nem sempre é possível. O erro perigoso que eu acho que você está fazendo, mesmo considerando esta questão, é pensar que "nosso software é tão simples que até um cara mais ou menos pode fazê-lo". Isso é errado.

Seu software será feito, não duvide, mas espere resultados muito diferentes de uma equipe excelente do que 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 tomar conta de seus caras com problemas mais complexos. Você vai ter que tomar conta dos caras mais importantes, apesar das decisões de arquitetura adequadas.

Se você aceitar isso e estiver pronto para gerenciar isso, tudo bem. Basta estar preparado para o processo e para os resultados.

    
por 03.05.2011 / 13:30
fonte
3

Acho que não é realmente um problema contratar um ótimo desenvolvedor. O verdadeiro desafio é fazê-los querer trabalhar para você.

Existe alguma necessidade de contratar os melhores?
Eu acredito que sim. Grande desenvolvedor não é apenas aquele que faz tudo a tempo. Não só esse indivíduo é muito mais produtivo do que outros. Grande desenvolvedor também está liderando pelo exemplo e simplesmente inspirando outros membros da equipe. Outros poderiam avançar muito enquanto trabalhavam com eles.

OK, você reduzirá seus padrões. Isso é legal, provavelmente você vai mudar de idéia depois de contratar um indivíduo muito ruim. Aquele que responderá a todas as suas perguntas de CS sem problemas, mas que não pode realmente escrever uma única linha de código de produção. Boa sorte com isso:)

    
por 29.04.2011 / 09:45
fonte
3

Vamos dar um passo atrás.

O que estamos tentando fazer? Escrever software.

Por que achamos que precisamos contratar os melhores? Porque aquele maldito garoto Arnold não conseguiu abrir caminho para fora de um saco de papel molhado e agora o SQL está todo bagunçado e eu posso faça o login.

Ok, então o que é o melhor ? Eu não sei, ele provavelmente é alguém que quer muito dinheiro e tem um currículo de seis pés de comprimento com um ótimo carteira e trabalhou no google ou algo assim. Ele deveria ter um diploma e talvez algumas letras no final de seu nome. Sim, isso soa como o melhor para mim, e, na melhor das hipóteses, eu quero dizer alguém que não seja aquele maldito garoto de Arnold. Ah, e ele deveria saber como fazer uma porcaria realmente difícil que eu ouvi na escola como "escrever um tipo de bolha" ou o que quer que seja. Vou pedir a um dos outros caras para citar algumas coisas complicadas que eles tiveram que fazer na escola, sim.

Parece que você não quer aquele maldito garoto Arnold? Você gostaria? Estou cansado de ter código com bugs, coisas demoram a acabar, e esses novos caras que entrevistei me dizem que preciso reescrever tudo!

Certo, então o que você pergunta ao maldito garoto Arnold para fazer? Crie um site PHP, escreva jQuery, faça o PHP fazer um CRUD básico com MSSQL e mude as cores de fundo ao redor .

Isso soa como uma tarefa bem adequada exclusivamente para o melhor? Tenho certeza de que o melhor poderia fazê-lo, mas provavelmente qualquer um que tenha o conjunto de habilidades certo que combine com isso poderia fazer isso. / p>

Então, você não precisa do melhor? Certo, eu só preciso de alguém com o conjunto de habilidades que atenda aos meus objetivos.

Oh. Sim.

    
por 03.05.2011 / 16:34
fonte
3

O título da sua pergunta menciona um "Normal Desktop Application", 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 programas de pesquisa enormes, com várias décadas, com consequências sociais massivas de qualquer avanço (recordar, resumos de programação linear alocação de recursos ). Como resultado, há muitas abordagens sofisticadas para resolver problemas nessas áreas que funcionam muito bem.

Um mau contratado

  • pode até não ter ouvido falar dessas classes de problemas,
  • pode não estar familiarizado com as soluções comuns,
  • provavelmente não saberia sobre as coisas melhores que estão por aí (dica: a maioria dos graduandos nunca ouve sobre as coisas extravagantes, se eles ouvirem sobre os problemas), e
  • quase certamente levaria séculos para implementar tais coisas (considerando que eu já vi algumas delas dando um seminário completo de graduação em estruturas de dados, incluindo professor).

Em outras palavras, pense se você está realmente trabalhando em algo pedestre. Se você é ótimo, a contratação deve ser muito mais fácil. Se você não for, aguente alguém que possa fazer o que você precisa.

    
por 04.05.2011 / 07:46
fonte
2

Certamente não sou um programador de 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. Mas menos da minha experiência no trabalho, onde na verdade muito do trabalho mais complicado é feito pedindo ao seu banco de dados ou a uma função de biblioteca para fazê-lo.

Mas se você decidir contratar pessoas menos experientes, considere o uso de tecnologias fáceis de lidar. Por exemplo, se você planejou usar o C ++ para todo o projeto, limite a parte do C ++ às bibliotecas escritas por seus melhores funcionários e permita que os outros implementem a interface do usuário no Visual Basic.

    
por 29.04.2011 / 09:29
fonte
2

Anote os valores pesquisados em um funcionário que ingressará em suas fileiras.

Quando o único valor apreciado é a competência de programação, você se verá rapidamente cercado por pessoas que valorizam exatamente isso. Como a maioria dos programadores realmente competentes tem um sistema de valores mais elaborado, eles evitam 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 aceite os valores de seus funcionários atuais e comunique-os em seus formulários de emprego. Boas empresas, com um sistema de valor sustentável, atraem bons funcionários.

    
por 03.05.2011 / 01:43
fonte
1

Em qualquer organização, você tem pessoas com mais experiência e pessoas com menos. Não só isso, mas um especialista em um campo pode ser um novato em outro. É claro que um amador entusiasta 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 colegas mais experientes.

Minha sugestão é que, em vez de tentar contratar superstars, você tente contratar pessoas que sejam razoavelmente inteligentes, se encaixem na cultura de sua empresa, estejam ansiosos para aprender e tenham uma apreciação de suas próprias limitações.

    
por 29.04.2011 / 14:31
fonte
1

Certamente você deve aspirar a contratar apenas os melhores. Isso não significa automaticamente que você será bem sucedido nisso - há apenas muitos dos "melhores" para dar a volta, e haverá vencedores e perdedores na batalha para atraí-los. Muito disso virá de sua aptidão e vontade de trabalhar duro com o problema e com os recursos disponíveis para você.

Desistir antes de começar é a melhor maneira de perder.

    
por 02.05.2011 / 17:53
fonte
1

A busca binária é um problema interessante porque é bem sabido que a maioria dos programadores realmente se esforçam para escrevê-lo corretamente ( Bently escreve sobre isso em Programming Pearls ). Talvez não seja tão ruim testá-lo, desde que você não exclua candidatos com base em sua incapacidade de resolvê-lo. Se eles resolvê-lo rapidamente e corretamente, pelo menos, sugere que tipo de programador eles são, então você tem mais informações nesse caso em particular.

    
por 02.05.2011 / 22:53
fonte
1

você precisa contratar os melhores. mas o termo foi citado fora do 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 toda posição requer o mesmo conhecimento técnico.

Pergunte a si mesmo esta pergunta (você meio que já fez ..): Se você tem outro engenheiro na mesma posição por 5 anos, você esperaria que ela se lembrasse da série de fibonanci e buscas binárias?

se a resposta for não, mude o 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 usam apenas map.get ("");

direcione suas entrevistas para o que a posição precisa, não para um bom programador genérico.

    
por 02.05.2011 / 23:33
fonte
1

Se você realmente não se importa com 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 resgatar, se eles não puderem.

No entanto, questiono se existe 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 é boa em gerenciar a complexidade. Você pode facilmente criar um monte de código legado instantâneo que irá 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.

    
por 03.05.2011 / 04:19
fonte
0

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 um superstar para trabalhar em um problema regular - o que irá frustrá-lo a sair rapidamente. Dito isto, você deve sempre tentar contratar para a sua empresa, em vez de uma posição particular. Porque esse mesmo cara vai alternar entre as 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 internas muito rígidas e que você tenha uma visão clara do que fará em sua equipe nos próximos dois anos antes de contratar uma pessoa que acha que talvez não atenda à barra da empresa (mas resolverá o problema atual). ). Já vi muitos casos em que a mediocridade dos desenvolvedores fez com que a equipe trabalhasse com mais afinco ao redor deles.

    
por 17.05.2011 / 16:08
fonte

Tags