Programadores, vão para entrevistas

Programadores, vão para entrevistas
A foto foi tirada de um vídeo do canal “Ametistas Militantes»

Trabalhei como programador de sistemas para Linux por cerca de 10 anos. Estes são módulos do kernel (espaço do kernel), vários daemons e trabalho com hardware do espaço do usuário (espaço do usuário), vários bootloaders (u-boot, etc.), firmware do controlador e muito mais. Mesmo às vezes acontecia de cortar a interface da web. Porém, com mais frequência, tive que sentar com um ferro de soldar e interagir com designers de placas de circuito impresso. Um dos problemas desse trabalho é que é muito difícil avaliar o nível de sua competência, pois você pode conhecer profundamente uma tarefa, mas pode não conhecer outra. A única maneira adequada de entender para onde ir e quais são as correntes atuais é fazer entrevistas.

Neste artigo gostaria de resumir minha experiência de entrevista para uma vaga como programador de sistema Linux, as especificidades da entrevista, o trabalho e como avaliar seu nível pessoal de conhecimento comunicando-se com um futuro empregador e o que você não deve espere disso.

O artigo incluirá um pequeno concurso com prêmios.

Características da profissão

Um programador de sistemas, na área específica em que atuei, é um completo generalista: tive que escrever código e depurar hardware. E muitas vezes havia a necessidade de soldar algo sozinho. De vez em quando, acontecia que meus ajustes no hardware eram transferidos para os desenvolvedores. Portanto, para trabalhar nesta área é necessária uma base de conhecimentos bastante boa, tanto na área de circuitos digitais quanto em programação. Por causa disso, as entrevistas para um cargo de programador de sistemas muitas vezes parecem uma busca por um especialista em eletrônica.

Programadores, vão para entrevistas
Uma estação de trabalho típica para um programador de sistemas.

A foto acima mostra meu local de trabalho típico ao depurar drivers. O analisador lógico mostra a exatidão das mensagens transmitidas, o osciloscópio monitora o formato das bordas do sinal. Além disso, o depurador jtag não foi incluído no quadro, que é usado quando as ferramentas de depuração padrão não funcionam mais. E você precisa saber trabalhar com todo esse equipamento.

Muitas vezes acontece que é mais rápido e fácil soldar novamente alguns elementos e corrigir você mesmo erros de topologia do que levar o produto a um instalador. E então uma estação de solda também passa a residir em seu local de trabalho.

Outra característica do desenvolvimento em nível de driver e hardware é que o Google não ajuda. Muitas vezes você precisa procurar informações sobre o seu problema, e há três links, dois dos quais são suas próprias perguntas em algum fórum. Ou pior ainda, quando você se depara com uma pergunta do mesmo pobre rapaz que a fez há 5 anos na lista de discussão do kernel e nunca recebeu uma resposta. Neste trabalho, além de erros no design de hardware e software, são frequentemente encontrados erros de documentação - esses são provavelmente os problemas mais graves e desagradáveis. Às vezes, os registros são descritos incorretamente ou não há nenhuma descrição para eles. Tais problemas só podem ser resolvidos inserindo cientificamente números aleatórios em certos registros (uma espécie de reverso). Muitas vezes acontece que o processador contém alguma funcionalidade, mas ninguém, exceto você, implementou essa funcionalidade (especialmente se o processador for novo). E isso significa atravessar o campo com um ancinho, 70% do qual é para crianças. Mas quando há documentação, mesmo com erros, isso já é um progresso. Muitas vezes acontece que não há documentação alguma, e é aí que começa a caminhada pelos campos minados quando o ferro está queimando. E sim, também resolvi esses problemas com sucesso.

Entrevistas

Minha opinião é que você deve ir a entrevistas pelo menos uma vez a cada seis meses, mesmo que adore seu trabalho e não queira mudá-lo. Uma entrevista permite que você entenda seu nível como especialista. Acredito que as entrevistas mais valiosas são aquelas que falham. São eles que mostram com maior precisão quais gargalos do seu conhecimento precisam ser melhorados.

Outra característica interessante é a qualidade das entrevistas. Esta é a minha observação, e não é verdade, admito que tive sorte. Se a entrevista ocorrer de acordo com o cenário:

  • Conte-nos sobre você;
  • Temos essas tarefas;
  • você gosta?

E se depois desse diálogo vocês se gostam, vão trabalhar, então, via de regra, a companhia e as tarefas acabam sendo muito agradáveis ​​​​e adequadas. Se uma entrevista é como passar por 12 círculos do inferno: a primeira entrevista com o RH, depois uma entrevista com um grupo de programadores, depois com o diretor, mais lição de casa, etc., então, via de regra, essas eram organizações falidas nas quais eu não trabalhei por muito tempo. Novamente, esta é uma observação pessoal, mas via de regra, muita burocracia e um processo de contratação demorado mostram que exatamente os mesmos processos ocorrem dentro da empresa. As decisões são tomadas de forma lenta e ineficaz. Houve também situações opostas, quando havia círculos de entrevistas infernais, e a empresa acabou sendo ótima, e quando, depois de um tapa na cara, a empresa acabou virando um pântano, mas essas são raras.

Se você acha que o cenário: conheceu, falou sobre você e foi contratado, existe apenas em pequenas empresas, então não. Tenho visto isto em empresas muito grandes que empregam mais de centenas de pessoas e estão representadas nos mercados mundiais. Este é um mecanismo normal, especialmente se você tiver um histórico rico e tiver a oportunidade de ligar para seus empregadores anteriores e perguntar sobre você.

Para mim, é um indicador muito bom de uma empresa quando ela pede para mostrar exemplos de seus projetos e códigos. O nível de formação do candidato é imediatamente mostrado. E, quanto a mim, do ponto de vista da seleção de candidatos, este é o método de seleção mais eficaz do que entrevistas mostram. Na verdade, você pode falhar em uma entrevista de tanto entusiasmo ou, pelo contrário, sair cheio de adrenalina. Mas no trabalho real você não consegue lidar com tarefas reais. E também encontrei isso quando entrevistei pessoas. Chega um especialista, se mostra excelente, gostei dele, ele gostou da gente. E lutei com o problema mais simples durante um mês e, como resultado, outro programador o resolveu em alguns dias. Eu tive que me separar daquele programador.

Valorizo ​​especialmente tarefas de programação em entrevistas. E aquelas que têm que ser resolvidas logo na reunião, no estresse e na lição de casa. A primeira mostra o quão pronto você está para resolver problemas com rapidez e precisão em uma situação estressante e de emergência. A segunda mostra o seu nível de competência e capacidade de buscar informações e resolver problemas atuais.

Os trabalhos mais interessantes que tive foram no complexo de defesa do nosso país. No processo de trabalho, tive que resolver problemas simplesmente fantásticos com os quais os programadores comerciais nunca sonharam. Supercomputadores, projeto de roteadores, vários sistemas de combate de nós - isso é incrivelmente emocionante. Quando durante o desfile você vê um complexo que armazena seu código, é muito legal. Curiosamente, as entrevistas com essas empresas costumam ser muito simples, literalmente vêm, assim, aceitas (provavelmente as especificidades dos militares, que não gostam de falar muito), são sobrepostas. Os desafios que enfrentei foram realmente interessantes e desafiadores. Com a experiência, descobriu-se que eles são bons para aprender a ser programadores de sistemas de alta qualidade. Também existem desvantagens, e nem sequer são salários baixos. No momento, o salário no complexo de defesa é bastante decente, com bônus e benefícios. Via de regra, há muita burocracia, longas jornadas de trabalho, intermináveis ​​tarefas urgentes e trabalho sob grande estresse. Em certos casos, o sigilo não pode ser excluído, o que acrescenta alguns problemas às viagens ao estrangeiro. Além, é claro, da tirania dos patrões, e isso, infelizmente, também acontece. Embora minha experiência de trabalhar com um representante do cliente seja extremamente agradável. Esta é uma impressão coletiva de três diferentes institutos de pesquisa e empresas relacionadas às ordens de defesa do Estado.

Tarefas de entrevista

Para evitar mal-entendidos e para não expor as empresas que entrevistei, não vou desafiar o destino e indicar os seus dados. Mas sou grato por cada entrevista, pelo tempo que as pessoas dedicaram comigo, pela oportunidade de me olhar de fora. Só posso dizer que as tarefas foram para grandes empresas internacionais representadas em diferentes países.

Vou te contar o mais interessante: quais tarefas são dadas durante as entrevistas. Em geral, as dúvidas mais comuns para a vaga de programador de sistemas e programador de microcontroladores são operações de bits, em todas as variações possíveis. Portanto, prepare-se melhor nesta área.

O segundo tópico mais polarizador são as placas de sinalização, isso deve realmente impressionar você. Para que te acordem no meio da noite e você possa contar e mostrar tudo.

Roubei perguntas de diversas entrevistas na minha cabeça, e vou apresentá-las aqui, pois as acho bastante interessantes. Deliberadamente não dou respostas a essas perguntas para que os próprios leitores possam respondê-las nos comentários e tenham um pouco de pólvora ao passar por uma entrevista real.

Perguntas nº 1

I. Conhecimento de SI. O que significam as seguintes entradas:

const char * str;

char const * str;

const * char str;

char * const str;

const char const * str;

Todas as entradas estão corretas?

II. Por que este programa gerará uma falha de segmentação?

int main ()
{
       fprintf(0,"hellon");
       fork();
       return(0);
}

III. Ser esperto.

Há uma vara com um metro de comprimento. Dez formigas caem aleatoriamente sobre ela, rastejando em direções diferentes. A velocidade de movimento de uma formiga é de 1 m/s. Se uma formiga encontra outra formiga, ela se vira e rasteja na direção oposta. Qual é o tempo máximo que você precisa esperar para que todas as formigas caiam do palito?

A próxima entrevista foi um fracasso para mim e considero-a a mais útil na minha prática de programação. Isso mostrou a profundidade da minha incompetência. Antes desta entrevista eu estava familiarizado com cada uma dessas questões e elas surgiam constantemente na minha prática, mas de alguma forma eu não dava muita importância a elas e, portanto, não as entendia bem. Portanto, fui reprovado neste exame em desgraça. E estou muito grato por tal fracasso ter acontecido; teve o efeito mais preocupante sobre mim. Você se acha um especialista legal, conhece design de circuitos, interfaces e trabalha com o kernel. E então você tem perguntas reais e flutua. Então vamos ver.

Perguntas da entrevista nº 2

Problemas de hardware.

  • Como as chamadas do sistema Linux são organizadas em linguagem assembly em um processador ARM, em x86. Qual é a diferença?
  • Quais ferramentas de sincronização existem? Quais ferramentas de sincronização podem ser usadas em um contexto de interrupção, quais não podem e por quê?
  • Qual é a diferença entre o barramento i2c e o barramento spi?
  • Por que existem terminadores no barramento i2c e qual o seu valor?
  • A interface RS-232 pode funcionar SOMENTE em dois fios: RX e TX? Aqui vou dar a resposta: Acontece que está ruim, em 9600, mas pode!!!
  • E agora a segunda pergunta: por quê?
  • Qual é a melhor maneira de organizar linhas de sinal e energia em placas multicamadas e por quê? Energia dentro das camadas ou linhas de sinal dentro das camadas? (A questão geralmente é puramente sobre design de circuitos).
  • Por que as linhas diferenciais têm trilhos que vão juntos em todos os lugares?
  • Barramento RS-485. Geralmente existem terminadores nessa linha. Porém, temos um circuito em estrela, com número variável de módulos plug-in. Que meios de evitar colisões e interferências devem ser utilizados?
  • O que são árvores vermelhas e binárias?
  • Como trabalhar com cmake?
  • Perguntas sobre a construção do Yocto Linux.

Objetivos desta entrevista:

1. Escreva uma função que inverte para uint32_t todos os pedaços. (trabalhar com bits é muito popular em entrevistas, recomendo)
2.

int32_t a = -200;
uint32_t b = 200;
return *(uint32_t) * (&a)) > b;

O que esta função retornará? (solução em papel, sem computador)

3. Função para calcular a média aritmética de dois números int32_t.

4. Quais são os métodos de saída nos programas, incl. em uma torrente de erros.

A terceira seleção foi relativamente recente, e não me surpreenderia se ainda existisse esse questionário por aí, então não vou revelar a empresa para não expô-la... Mas em termos gerais vou dar um exemplo de possíveis perguntas, e se você reconhecer suas perguntas, então eu digo olá :).

Perguntas da entrevista nº 3

  1. É dado um exemplo de código de travessia de árvore; é necessário informar o que está sendo feito neste código e apontar erros.
  2. Escreva um exemplo do utilitário ls. Com a opção mais simples “-l”.
  3. Dê um exemplo de como fazer links estáticos e dinâmicos. Qual é a diferença?
  4. Como funciona o RS-232? Qual é a diferença entre RS-485 e RS-232? Qual é a diferença entre RS-232 e RS-485 do ponto de vista de um programador?
  5. Como funciona o USB (do ponto de vista de um programador)?
  6. Tradução de texto técnico do russo para o inglês.

Uma entrevista bem-sucedida não é garantia de um trabalho bem-sucedido

Este capítulo provavelmente não é nem mesmo para programadores (embora também seja para eles), mas mais para RH. As empresas mais adequadas não analisam meticulosamente os resultados das entrevistas. É normal cometer erros; na maioria das vezes eles olham para como uma pessoa sabe resolver problemas e raciocinar.

Um dos principais problemas é que o candidato resolve problemas com sucesso durante as entrevistas, mostra-se um excelente especialista, mas falha na primeira tarefa real. Não vou mentir, isso também aconteceu comigo. Passei com sucesso por todos os círculos do inferno, resolvi todas as tarefas de teste, mas em condições reais o trabalho acabou sendo muito difícil devido à simples inexperiência. Embarcar não é a tarefa mais difícil. O mais difícil é permanecer a bordo desta empresa.

Por isso, confio mais em empresas que fazem entrevistas simples com o candidato e dizem: depois do primeiro mês de trabalho ficará claro se você é adequado para nós ou não. Esta é a abordagem mais adequada, sim, talvez um pouco cara, mas fica imediatamente claro quem é quem.

Existe outra opção de entrevista: quando você passa com sucesso, mas com base no resultado da entrevista você entende que o empregador é completamente inadequado. Recuso imediatamente o trabalho se me oferecerem para trabalhar como empresário individual, prometendo grandes rendimentos. Esta é uma forma de evasão fiscal para uma organização operacional, e por que os problemas do empregador deveriam me preocupar como programador? Outra opção são várias agências governamentais. Fiz uma entrevista, com a qual me ofereceram um bom salário, mas falaram que o programador anterior pediu demissão, adoeceu, morreu, enlouqueceu por causa da carga de trabalho e sua jornada de trabalho começa às 8 da manhã . De tal lugar ele também correu tanto que seus calcanhares brilharam. Sim, RH, observe que os programadores estão prontos para recusar até mesmo o trabalho mais delicioso se o dia de trabalho tiver que começar de manhã cedo.

No final, darei um excelente vídeo de seleção de programadores, cuja captura de tela é fornecida no início deste artigo. Eu também tive essa entrevista mais de uma vez. Se você vê tirania na fase de perguntas, respeite-se, levante-se, pegue suas coisas e vá embora - isso é normal. Se o RH e o gestor se afirmarem às suas custas durante a entrevista, isso indica que a empresa é tóxica e você não deve trabalhar lá, a menos que goste de chefes inadequados.

Descobertas

Programadores, vão às entrevistas! E sempre tente ser promovido. Digamos que se você receber N dinheiro, vá para uma entrevista por pelo menos N*1,2, ou melhor, N*1,5. Mesmo que você não ocupe essa vaga imediatamente, você entenderá o que é necessário para esse nível de remuneração.
Minhas observações mostraram que um bom conhecimento da língua inglesa, uma experiência suficientemente rica no setor e autoconfiança decidem. Esta última é a qualidade principal, como em toda a vida. Via de regra, um candidato mais confiante consegue ter um desempenho melhor em uma entrevista, mesmo com mais erros, do que um candidato excelente, porém mais tímido e proativo. Boa sorte com suas entrevistas!

Competição P/S

Se você tiver exemplos interessantes de problemas que o RH colocou sobre você, seja bem-vindo nos comentários. Preparamos um pequeno concurso - as condições são simples: você escreve a tarefa mais inusitada que teve durante uma entrevista, os leitores avaliam (mais), e depois de uma semana somamos os resultados e recompensamos o vencedor com guloseimas divertidas.

Programadores, vão para entrevistas

Programadores, vão para entrevistas

Fonte: habr.com

Adicionar um comentário