Houve muita discussão em torno da excelente pergunta "A alta reputação no Stack Overflow ajudará a obter um bom emprego? ". Eu imediatamente concordei com JoshK que basicamente dizia " Não " (vou explicar o porquê), mas Joel entrou em contato com muitos fatos convincentes que me levaram a votá-lo também.
Minha pergunta é que outras habilidades (além de ser um gênio técnico) você precisa de um desenvolvedor? Para conseguir o emprego ou mantê- lo.
Acredito que ser um gênio está longe de ser suficiente. Conheci muitos gênios técnicos em várias empresas nas quais trabalhei que me impressionaram muito, mas, infelizmente, em muitos casos, eles foram simplesmente demitidos depois de alguns meses ou colocados em torres de marfim (principalmente por causa do motim interno de outros desenvolvedores). Eu já vi muitos em sofrimento pessoal como resultado disso, que eu entendo.
É por isso que sou um grande fã de perguntas não técnicas para posições técnicas. Eu gosto de saber como o candidato irá interagir com outras pessoas (incluindo funcionários não técnicos), quanta consideração ele terá pelo negócio, se ele trabalhará para o resultado desejado e assim por diante.
Gostaria de saber o que você precisa de seus desenvolvedores e POR QUE é importante (afinal, você contrata alguém para escrever código, não é? Por que você quer que ele seja assertivo?) . Idealmente, gostaria que você apresentasse um exemplo de pergunta que faria durante as entrevistas em apoio à sua resposta.
Respostas:
Excelentes habilidades de comunicação.
Se seus colegas não puderem ler seu cérebro diretamente, você precisará contar a eles o que pensa. De preferência tanto verbalmente quanto por escrito.
EDIT: Uma maneira de vê-los no momento da entrevista pode ser perguntando qual é a sua estrutura favorita para fazer o X e dizer que eles precisam trabalhar em um projeto onde o X possa ser usado, mas é uma decisão política usar a tecnologia Y (que é claramente mais antigo e tem algumas limitações que X resolve).
Se isso acabar em uma discussão sobre por que a decisão política está errada, você tem uma forte indicação de que essa pessoa não está se saindo bem com decisões pragmáticas.
fonte
Trabalho em equipe / comunicação:
Sem essas habilidades, você não pode trabalhar em equipe e, se não puder, não poderá entrar em uma empresa que exige isso (e quase todas elas exigem trabalho em equipe, naturalmente). Você ainda pode ser freelancer e trabalhar em projetos que não têm outras pessoas para trabalhar, mas ainda precisa se comunicar com pessoas de outras empresas.
Mesmo para aprender, se você não consegue se comunicar com muitas pessoas diferentes, como na Web, talvez não consiga fazer melhor na vida real e na sociedade (seja qual for o trabalho), é uma desvantagem.
editar> Na entrevista, o trabalho em equipe / socialização / comunicação é realmente fácil de verificar, pode ser a coisa mais fácil. Você só precisa fazer algumas perguntas, não técnicas, perguntas fáceis de responder ou simplesmente perguntas sobre o que o candidato pensa sobre algo ou sobre o que o candidato gosta ou não em um domínio ou outro. Faça ele falar. Você vai ver.
fonte
Persistência é uma habilidade que não vejo muito mencionada. E é uma habilidade - a capacidade de fazer você mesmo resolver um problema, mesmo que não consiga ver o fim. Muitas pessoas não fazem isso; eles trabalham apenas no momento ou apenas fazem o mínimo para sobreviver. Infelizmente, não há como saber se uma pessoa tem essa característica falando com ela. Você realmente precisa poder conversar com outras pessoas que trabalharam com a pessoa. As referências podem fazer isso, mas essa opção nem sempre está disponível.
fonte
Essas são mais características do que habilidades, mas eu provavelmente sugeriria que ainda vale a pena encontrar alguém para ser um desenvolvedor de sucesso:
Versatilidade seria outra característica que eu colocaria lá. Às vezes, um desenvolvedor pode ter que preencher funções fora do puro desenvolvimento, por exemplo, analista de negócios, arquiteto ou testador. Eu sei que tive várias partes de projetos em que estou fazendo algo diferente de projetar ou escrever código e isso deve ser algo para se ver em outro. Nem todo mundo pode aceitar assumir esses outros papéis. Pergunte que tipos de situações o desenvolvedor teve no passado, onde eles tiveram que desempenhar outra função e como isso acabou.
Humildade seria outra que eu provavelmente colocaria como requisito. O ego pode causar muitos problemas em alguns lugares e nem todos podem aceitar que possa haver alguém melhor em algo do que eles. Se alguém tiver uma idéia melhor, deixe que seja o que for feito. Você pode ter uma amostra do código do desenvolvedor que pede para eles criticarem e ver quão bem eles podem se corrigir ou não.
Orgulho seria outro para colocar lá em baixo. Isso contrasta com a qualidade anterior, mas se alguém não se orgulha de seu trabalho, que tipo de qualidade você acha que é? Não ficar satisfeito é um pouco diferente aqui, pois provavelmente muitos desenvolvedores podem ser perfeccionistas. Pergunte sobre qual projeto passado eles se sentem mais orgulhosos?
A auto-motivação também seria uma habilidade importante de se ver. O que os leva? Quão bem eles podem articular isso? "Office Space" tem esta linha de Peter Gibbons:
Isso é algo com o qual suspeito que muitos desenvolvedores e não desenvolvedores possam se relacionar. Por que você está fazendo o trabalho que faz? Essa pode ser uma boa pergunta, mas procure a sinceridade e autenticidade da resposta, pois podem ocorrer respostas às vezes enlatadas que é preciso identificar.
A curiosidade seria a última na minha lista a adicionar. O desejo de ver como algo funciona, aprender novas tecnologias e sair da zona de conforto de alguém, são outros marcadores para isso que podem ser encontrados em desenvolvedores de sucesso. Uma breve história de como alguém entra em desenvolvimento pode ser uma maneira de ver essa característica, enquanto outra é perguntar a eles sobre algo que eles não viram e ver se eles têm um "Bem, isso poderia ser interessante para explorar" ou um " Oh irmão, não de novo, "tipo de olhar.
fonte
1) A comunicação é provavelmente a habilidade mais importante para qualquer pessoa, incluindo os tipos de engenharia de software. Essas habilidades de comunicação são igualmente importantes para lidar com gerentes e clientes, assim como para lidar com colegas de trabalho.
2) O trabalho em equipe é uma habilidade um pouco diferente que depende muito da primeira. Essencialmente, preciso determinar se a pessoa que estou tentando contratar beneficiará a equipe como um todo ou haverá alguns conflitos de personalidade que estou potencialmente contratando. Ninguém pode prever o futuro, mas você também não pode ignorar os sinais de alerta na entrevista.
Uma tática que eu uso no processo de entrevista é pedir à pessoa para descrever um dos problemas técnicos mais desafiadores (sobre os quais eles podem falar) e como eles os resolveram. Enquanto eles discutem seu processo de raciocínio e como descobriram o problema, você pode ter uma idéia melhor de como eles podem se comunicar sobre coisas potencialmente complicadas. Se eles procuram alguma ajuda adicional no processo, vejo isso como um plus. Nenhum de nós é tecnólogo perfeito. Se o problema que eles escolheram acabou sendo um choque de personalidade (o que aconteceu apenas uma vez), você pode passar ou sondar um pouco mais fundo.
De muitas maneiras, o processo de entrevista é como ir a um encontro às cegas. As duas pessoas estão dando o melhor de si, tentando descobrir se querem passar mais tempo com a outra parte. Quanto mais você conseguir que a entrevista flua como uma conversa, mais relaxado o entrevistado ficará; e, consequentemente, melhor você verá se eles são adequados.
fonte
Embora seja uma qualidade que pode ser mais aplicável à equipe do que a desenvolvedores individuais, acho que há muito por trás do ditado: "Grandes engenheiros são enviados".
É algo que seria difícil de demonstrar em uma entrevista para a maioria das pessoas, mas se eu estivesse entrevistando um candidato que, por exemplo, tivesse criado e enviado um aplicativo, biblioteca ou estrutura de código-fonte substancial e pudesse falar eloquentemente sobre algo extra que necessário para concluir um projeto não trivial, eu precisaria dar a essa pessoa uma vantagem sobre sua concorrência.
Por outro lado, se um candidato em potencial me apontasse para sua conta do Github e eu visse que estava cheia de projetos incompletos, incompletos, negligenciados ou mal documentados, eu teria um bom motivo para desconsiderar sua candidatura.
"O café é para quem fecha", como disse um homem em um filme.
fonte
As habilidades de comunicação e trabalho em equipe são importantes, mas eu acrescentaria que ser capaz de entender os requisitos do cliente e adquirir conhecimento do domínio comercial também foi muito importante na minha experiência.
fonte
Concordo que a comunicação é fundamental, mas experimentei uma falha em um excelente codificador que não mostraria a outros engenheiros o uso de seus processos. Consegui duplicar seus processos e mostrá-los a outras pessoas, mas sem a ajuda dele. Ele foi demitido porque não ensinava.
fonte
Nunca é o bastante.
Senso comum. Solução de problemas. Interesse na tecnologia como um todo. Atitude de fazer as coisas da maneira certa. Persistência. Jogo em equipe / Comunicação.
Classifique cada habilidade em 1-5. Se você tem min 3 e em média 20+. Você terá uma boa vida como desenvolvedor. 25+ será desenvolvedor de sucesso. Menos de 10 e você precisa pensar seriamente em uma carreira em desenvolvimento de software.
fonte