Graças à grande ajuda deste site e do SO, pude criar um protótipo de um software que quero vender, mas infelizmente, embora o protótipo funcione, acho que a qualidade do meu código é muito baixa. Como não usei muito OOP ou padrões de design, embora meu código seja compreensível para mim, acho que um desenvolvedor normal desmaiaria se precisasse lê-lo.
Então, eu queria contratar um desenvolvedor para torná-lo um pouco mais melhor e melhorar algumas das implementações de APIs que talvez eu não tenha feito corretamente. Estou tendo problemas para contratar um desenvolvedor.
Conheci dois desenvolvedores e eles leram minhas especificações de software. O problema é que eles não tinham o conhecimento de domínio da minha empresa (o que é completamente compreensível e não é demais), mas também não tinham conhecimento dos sistemas de tecnologia subjacentes que eu usei, como Hadoop, Hbase, Cuda, etc .. Passei muito tempo explicando mapas / reduções, tabelas grandes e outras tecnologias que usei. Eu pensei que era de conhecimento geral por causa de minhas interações com as pessoas deste site, mas as pessoas que conheci mencionaram que nunca tiveram que lidar com essas coisas para não saberem.
Minha pergunta é: para projetos de software que estão contratando desenvolvedores contratados, é um perigo se o desenvolvedor não tiver experiência com as tecnologias subjacentes? ou pode um desenvolvedor geral que é realizado em outra área pegar realisticamente novas tecnologias? Fiz um cálculo muito rápido do verso do envelope e acho que os custos iniciais seriam semelhantes se eu contratar um estudante ou desenvolvedor sem experiência em minhas tecnologias, que trabalhará muitas horas em vez de contratar um desenvolvedor altamente experiente que cobra o dobro, mas termina pela metade o tempo, mas que outros riscos devo considerar ou me preocupar? Além disso, se eu contratar um generalista, devo pagar pelo tempo que eles levam para aprender hadoop ou cuda se forem contratados (parece fazer sentido nos negócios, mas não sabe o quão justo é para eles se não usarem o habilidade novamente).
Estou um pouco confuso, então qualquer sugestão seria ótima.
fonte
I think a normal developer would faint if they had to read it
- Isso é alguma honestidade ali.Respostas:
Sim. (O aprendizado leva tempo e cometer erros geralmente faz parte do processo.)
Sim. (Adotar novas tecnologias é algo que os generalistas fazem o tempo todo. Você não dura muito como programador se não pode aprender coisas novas.)
Observe que há uma grande diferença entre 'sem experiência com a tecnologia X' e 'sem experiência, ponto final'. Uma coisa é ter que aprender alguma nova estrutura ou linguagem e outra coisa é começar o seu primeiro trabalho como desenvolvedor e não ter alguém com alguma experiência para apontar na direção certa.
As decisões tomadas durante o processo de design e desenvolvimento podem ser difíceis e / ou caras para serem alteradas posteriormente. Um desenvolvedor experiente e inteligente pode economizar muito mais do que apenas horas de desenvolvimento. Por outro lado, alguém que é realmente bom no que faz poderá cobrar de acordo.
Talvez o artigo de Joel Spolsky ajude: O Guia de Guerrilha para Entrevistas . Em poucas palavras, Joel diz que procura duas coisas: 1) inteligente, 2) faz as coisas. Além disso, sugiro procurar alguém com quem você possa trabalhar e que entenda o que você está tentando realizar e trabalhe nesse sentido com você.
fonte
Eu acho que se um novato pode fazer exatamente as mesmas coisas pela metade do preço duas vezes, tudo funciona. Realisticamente, haverá problemas que o novato não resolverá e armadilhas que não poderão evitar. Eu não acho que você receberá código semelhante. Você vai acabar diminuindo suas expectativas.
É mais provável que isso aconteça quando se trata de design. Pague a taxa extra para que o desenvolvedor experiente trabalhe no design. Você pode usar o iniciante para ajudar com o volume de codificação, se achar que é econômico.
fonte
Sim. Ambos.
Idealmente, você poderia encontrar alguém no meio que precisaria de uma ajuda, mas não para alguém que os carregasse com conhecimento técnico ou de domínio. No entanto, muitas forças afetam o problema de pessoal que você está tentando resolver.
Por que existe uma escassez de habilidades de domínio
Os desenvolvedores são um grupo itinerante, passando de domínio de aplicativo para domínio de aplicativo conforme a demanda do mercado. Se algo está quente, dez, talvez cem ou até mil empresas o perseguirão até que a concorrência expulsar todos os participantes, com exceção de um punhado de jogadores. Consequentemente, os incentivos para que os desenvolvedores se aprofundem na pré-contratação do conhecimento do domínio comercial são zip. Se você estiver fazendo algo relativamente novo, não encontrará outras pessoas com conhecimento de domínio. Se você possui concorrentes ou, em particular, ex-concorrentes, não precisa desistir de sua busca pela experiência no domínio.
Se você contratar um desenvolvedor de hot shot, ele pode estar mais interessado no desenvolvimento de habilidades portáteis; portanto, você ainda pode ser forçado a ter muito peso no conhecimento do domínio. Talvez você deva considerar um engenheiro de sistema para documentar o conhecimento do domínio relacionado aos recursos para uso do desenvolvedor. Talvez entre inteligente e faça as coisas, você escolha alguém forte para fazer as coisas. Se você encontrar um desenvolvedor que esteja interessado em ficar com você por um tempo, aprendendo seus negócios e sua tecnologia, que coloca as necessidades de sua empresa iguais às suas, isso pode ser melhor a longo prazo do que o esperto cujos planos envolvem subindo e, freqüentemente, saindo.
Habilidades de alta demanda
Se você está fazendo algo que está em alta demanda, deve fazer muito mais para atrair candidatos. Se sua visibilidade é baixa e o que você tem a oferecer em troca é menos estelar do que a concorrência, talvez você precise pagar muito mais ou aumentar o talento necessário a partir de um conjunto de candidatos com outras habilidades.
Habilidades de domínio ou habilidades tecnológicas?
Na pergunta, você menciona várias habilidades que faltam aos seus candidatos, incluindo Hadoop, Hbase, Cuda, mapear / reduzir e bigtables. Não tenho certeza se chamaria essas habilidades de domínio porque elas são baseadas em tecnologia, e não nas especificidades de criar um produto que é específico do setor para seus clientes. Suspeito que cada uma dessas habilidades seja portátil e ainda será valiosa depois que seu setor em particular se automatizar e você dominar, encontrar um nicho ou mudar para outra coisa.
O crescimento da habilidade técnica atrai bons candidatos
A vantagem da contratação e treinamento de habilidades tecnológicas é que o desenvolvedor inteligente, faz as coisas, agressivo e orientado para a carreira, que treina a si mesmo, terá a chance de aprender algo com um futuro longo e gratificante. Se você mantiver desafios e uma nova combinação de tecnologias gerenciáveis, muitos dos desenvolvedores que você deseja abraçarão a sua equipe para benefício mútuo de curto e longo prazo.
fonte
Um desenvolvedor pode escolher tecnologias (e elas irão, eventualmente), mas acho que isso não atende aos seus requisitos.
Você possui um software em funcionamento, mas deseja que seja revisado, refatorado e talvez até reescrito. Você realmente precisa de um especialista ou, pelo menos, de alguém com experiência em algumas de suas tecnologias para poder fazer isso, porque, embora existam padrões de software, as implementações variam entre plataformas e estruturas devido à singularidade da plataforma e estrutura.
Você resolveu os problemas de negócios e dominou o domínio e implementou o software. Agora você precisa de orientação técnica para permitir que seu aplicativo seja dimensionado e tenha uma vida longa e saudável. Você quer alguém que tenha feito isso em um sistema semelhante ou usando tecnologia semelhante.
Plataformas diferentes geralmente exigem mentalidades e experiências completamente diferentes. Eu acho que você está trabalhando em um projeto do tipo big data / computação paralela? Um desenvolvedor da Web ou desenvolvedor de integração deve ser capaz de reescrever seu protótipo e fazê-lo funcionar também, mas por que supor que eles poderiam fazer isso melhor do que você?
Não se apegue à pessoa perfeita, porque elas podem não existir, mas seu desenvolvedor deve estar familiarizado com pelo menos algumas das tecnologias e conceitos que você está usando ou, como dizem nos anúncios de emprego, demonstrar a capacidade de rapidamente aprender novas tecnologias e conceitos . Se eles não ouviram falar do Hadoop ou do MapReduce, os alarmes devem tocar - um grande momento.
fonte
Você está realmente pedindo uma revisão de código e / ou treinamento. Especialmente para a revisão de código, um grupo de programadores experientes com diversas origens é o melhor. Quando todos concordarem, faça o que eles mandarem. Quando todos têm uma opinião diferente, você está fazendo a coisa certa. :-)
Se você usa mapReduce, CUDA e Hadoop e deseja um único revisor, contrate o especialista. Minha primeira opção seria procurar alguém com experiência além da escola. Considere também treinar você mesmo, ingressar em grupos de usuários etc. Você poderá fazer algumas perguntas individuais importantes e mostrá-las aos amigos, se você tiver esse tipo de amigo.
O Programmers.StackExchange permite que as pessoas publiquem códigos para críticas? Nesse caso, eu escolheria não mais que uma página. Escolha algo que você sabe que está errado, mas não sabe o porquê.
Qual linguagem de programação você está usando?
fonte
Eu sentiria total falta de familiaridade com o que o Hadoop / MapReduce é como um sinal de aviso de que o desenvolvedor pode não estar fazendo nenhuma tentativa de se manter atualizado.
Dito isto, isso é apenas um sinal, não um contrato de aluguel. Dê a eles o FizzBuzz ou algo dessa natureza e, se eles passarem, mostre seu código e peça uma crítica. Talvez escolha algo com um bug deliberadamente, mas também algo que você acha que está bem, pois essa discussão será mais interessante.
fonte
É difícil dar conselhos sobre isso. Apenas alguns pensamentos:
Forme o que você escreveu em sua introdução:
my code quality is very low
I didn't use much OOP
I wanted to hire a developer to make it a bit more better quality and improve some of my implementations
Responder a isso deve ser fácil :
Se você contratar um desenvolvedor sem experiência , é muito improvável que você possa aumentar a qualidade do código . Um programador sem experiência não ajuda .
Embora possa ser mais barato no curto prazo, contratar um novato , você está pagando mais tarde !
Não cometa o erro de calcular apenas os custos, para colocar você e seu produto em funcionamento. Mais importantes são os custos de manutenção .
Como conseqüência direta, do que eu disse no parágrafo anterior, você deve considerar o que é chamado de Dívida Técnica . Como você disse: a base de código não está em boa forma - por assim dizer, já existe uma dívida técnica . E com a contratação de trabalhadores não qualificados, você está aumentando a dívida . Talvez daqui a alguns anos você termine com uma base de código impossível de manter e tenha a) para recomeçar eb) eventualmente perca clientes, o que é igual nos dois casos: perda de dinheiro.
Claramente: Sim! Não vejo razão para não fazer isso. Eles precisam do conhecimento, você precisa que eles tenham - então: sim.
Se eles são bons desenvolvedores, devem facilmente entender a nova tecnologia - ou pelo menos nova para eles. As chances são altas de que, se eles levam o trabalho a sério, têm tecnologias em seu radar , ou seja, na verdade não fizeram nada produtivo com a tecnologia, mas sabem como e quando - usá-la.
Eu tenho que admitir, não tendo conhecimento do Hadoop para mim, mas sei, quando pode ser uma boa solução e ter um entendimento justo de como funciona na teoria ; então eu diria que não deve demorar muito para me tornar produtivo.
Explicar o seu negócio deve ser a parte mais fácil para você, pois você sabe melhor. Você não pode esperar que todos conheçam o seu negócio tão bem quanto você ou mesmo que o conheçam.
O mesmo vale para a tecnologia:
Existem inúmeros frameworks, linguagens e kits de ferramentas por aí - é improvável encontrar (m) qualquer desenvolvedor que conheça todos
É claro que você poderia dizer: $ Technology_du_jour está presente na mídia, por isso espero que todos os desenvolvedores tenham um conhecimento prático. Mas essa não é a realidade.
Para mim, como desenvolvedor, meu trabalho é uma desvantagem: tenho conhecimento prático de alguns idiomas e algumas tecnologias. Isso me torna flexível de várias maneiras. Se for necessário, sou capaz de desenvolver um entendimento profundo das minhas ferramentas atuais, mas, com o passar das estações, as ferramentas e as linguagens o fazem.
tl; dr;
1) Se puder, contrate um especialista em seu domínio e na tecnologia desejada
2) Se você não puder,
2a) Procure um generalista com alguma experiência em projeto , que pode ou não ter conhecimento das tecnologias usadas em seu projeto
3) Se houver realmente , realmente mais ninguém: contrate um aluno.
Você tem dívida técnica, não aumente!
fonte