Uma 'entrevista' muito boa (para emprego) e algumas dúvidas, focar em qual 'conhecimento'?
E aí galera, tudo de boa?
Obs.: O texto inicial é um resumo meu pra dar mais contexto pro final, mas não é essencial, pode pular para a parte das perguntas e ir pro ponto principal do tópico.
`
Primeiro quero dar um resumo meu, comecei a estudar programção em 2006 e fiquei até 2009 nisso, na época 'WebMaster' com a stack padrão do programador POG, HTML,CSS,JS e PHP,MySQL.
Era tudo muito bagunçado, não fiz curso algum, era tudo via 'fórum'.
Me afastei em 2009 e retomei em 2016 pagando Alura e estudando. Mudou muito minha visão do código, tinha algo estruturado e uma sequencia pra estudo. Meu código evoluiu muito, mas eu ainda não tava focado em ser 'desenvolvedor'.
Então, depois desse resumo vem o 'foco', retomei os estudos em Outubro/2022 e comecei a trabalhar como freela, com Wordpress, enquanto estudava JS. Paguei Alura e comecei a estudar praticamente 100% do tempo.
A partir de Abril/Maio 2023 comecei a procurar/pegar freela de 'programação' em si, deixei de lado o Wordpress pra focar mais em desenvolvimento direto, e foi ok, mas bem nessa época apareceu uma vaga, e que vaga 'legal'.
O processo começava com código e não com RH, o que já tornava o processo interessante, deveria clonar o repo e fazer o que se pedia... Foi um experiência legal, fiz esse código em 2 dias e me consumiu principalmente a parte do 'React/Front' (não é obrigatório React, mas era o que eu sabia na época), lembro claramente eu não conseguindo dormir as 3h da manhã porque eu não conseguia fazer um componente re-renderizar porque meus states eram uma bagunça cheio de 'prop-drilling'... Mas entreguei, como era um código 'ruim' obviamente não passei dessa etapa, mas tudo bem, o que eu mais buscava era um feedback, eu queria saber em que ponto eu estava na escala de 'Dev', recebi um feedback bem 'simples', falou alguns pontos, se me lembro bem uns 3 pontos, como usar uma variavel de checagem de 'status' com valores 1 2 3, sendo que poderia ser um boolean true e false bem mais eficaz, eu entendi na época e achei ótimo.
Ok, agora chega a etapa mais 'importante' desse texto, essa vaga surgiu de novo esses dias, 7 meses depois da primeira vez.. nesse momento em questão eu só desisti de procurar vagas, enviei CV para umas 300 vagas e já sabem né, feedbacks automatizados que seria melhor nem receber.
Até hoje eu fiz 4 entrevistas, todas sempre superficiais, então eu decidi de parar de perder tempo com isso e focar 100% nos freelas, que estão acontecendo de certa forma 'ok'..... então essa vaga surgiu de novo e essa eu queria tentar, o teste era o mesmo, usa sempre o mesmo repo, pensei 'Vou fazer numa conta nova pra não conseguirem ligar a meu teste anterior', meu plano era ter um feedback, até mais importante que ser contratado em si..., mas independente dessa ideia eu fiz na mesma conta mesmo no final pensei 'tanto faz'.`
Então vem aqui a parte das 'dúvidas', fiz o código, dessa vez em 3h/4h e usando Context, tudo ok, senti a evolução e realmente tive, porque fui chamado pra entrevista, a segunda etapa.
Então vamos para a Entrevista.
As perguntas foram essas, depois dessa entrevista eu não pesquisei nada, então o que tá aqui é basicamente o que eu sei, mas com a cabeça mais fria e depois de algum tempo pra pensar sobre(4 dias)
1- Abra o código e na linha X me diga se você consegue identificar a Mutation
(Eu pensei se eu deveria por o código aqui ou não, pelo fato de ser um teste "privado" mas é algo simples, então tanto faz)
const peopleByCompanyMap = new Map();
peopleFetch.forEach(person => {
if (person.checkInDate && !person.checkOutDate) {
const count = peopleByCompanyMap.get(person.companyName) || 0;
peopleByCompanyMap.set(person.companyName, count + 1);
}
});
/**
* After create the map I convert it to an array to set the state and work with
* a map to show in the component
*/
const peopleByCompanyArray = Array.from(peopleByCompanyMap).map(([companyName, count]) => ({companyName, count }));
setPeopleByCompany(peopleByCompanyArray);
// Here is like the first step, i just count how many people do not have a checkInDate
setPeopleNotCheckedIn(peopleFetch.filter(person => !person.checkInDate).length);
Aí vem o que eu pensei: Bem, mutation é a alteração de um dado no "banco de dados", então, mas eu não estou alterando, fiz apenas uma consulta ...
-Ele me interrompe pra falar 'Mutation não é apenas com banco de dados'
Então pensei, claro, a mutation é a alteração de uma informação, mas assim, não identifiquei essa mutation, seria no caso do set do map? Porque eu altero o count+1, seria isso?
Bem, no final essa foi minha resposta, sem realmente ter certeza do que eu tinha falado, foi realmente um 'chute' e até agora não entendi com clareza e já puxando o final da entrevista ele citou usar reduce, ok, o reduce iria criar um outro item, então a ideia é não alterar o valor diretamente mas sempre criar um novo, ok? Mas porque isso é uma boa prática, no caso eu não iria criar vários pontos de memória desnecessários com isso? Eu sinto que eu estou deixando algo escapar no inicio da ideia de 'mutation' e esteja tendo uma ideia completamente errada no final, então minha dúvida sobre esse ponto 1 é:
O que é mutation? Onde está essa mutation nesse bloco de código? Qual seria a melhor alternativa pra trabalhar isso e porque?
Eu não consegui essas respostas claramente por conta própria.
Bora pra próxima.
2- Me fale o que você sabe sobre 'Programação Funcional'.
Essa aqui é mais simples, não tem análise de código nem nada, mas eu simplesmente 'não lembrava de conceito algum', não do nome, mas eu sabia que eu tinha ideia. Então na conversa ele foi jogando algumas coisas no ar e eu lembrei do ponto
A função deve receber parametros e retornar sempre o mesmo resultado, sem mexer com itens de fora, do escopo.
Foi essa resposta que eu dei, de forma resumida, sem falar nome de conceito nem nada, na hora o que me veio a cabeça foi comparar com 'idempotência', que por sinal esqueci completamente de como falava, acabei falando assim "é aquela palavra que tá muito ligada a HTTP requests, com get, post, put, etc", isso foi eu falando pra ver se ajudava a lembrar, mas travei e não lembrei.
No final da entrevista ele também falou "Acho que a palavra que você queria lembrar era função pura" eu confirmei, mas na verdade não era, a palavra era idempotente, mas o conceito que eu tava explicando era função pura.
(A, tanto a parte do mutation e essa segunda pergunta foram em ingles, então tinha mais um grau de dificuldade, mas nada de especial, só um ponto pra comentar mesmo)
3- Me fale como o Node executa
Aqui já tava em portugues, então não tinha trava alguma na linguagem, só de conhecimento mesmo, então a linha de pensamento foi
Como assim, executa? Usando v8? Transpilando, codificando...
Ele fala sobre async, threads etc
A certo, então é meio que pra falar sobre 'EventLoop', ok, Node executa linha a linha, async, await, then, callback.
Nessa parte acabei desviando da 'resposta direta' porque fui contar umas coisas que faço como freela, como um projeto atual, construindo uma API utilizando 'automação/webscrapping', no caso o Puppeteer faz as ações e retorna algo... ok, mas aí eu preciso que o código possa receber vários requests e executar tudo, então tenho a função que 'busca usuário' que é async e quando eu chamo eu chamo sem o 'await', seguindo essa ideia eu jogo no 'evento loop' do async e o código sync continua executando..., de qualquer forma o lance foi que esses dias atualizei algo e quebrou esse sistema, mas consertei logo depois e fiquei encudado com isso, "Como realmente funciona o 'async'", então eu percebi que realmente não sei 'a resposta', mas eu entendo parte do conceito, que por sinal onde entendi isso de forma mais eficiente foi nesse video aqui https://www.youtube.com/watch?v=cCOL7MC4Pl0 que peguei justamente de uma lista que o 'entrevistador' postou a um bom tempo no Twitter(X).
Tiveram outras perguntas mas essas são as mais interessantes, então pra tentar finalizar o pequeno texto com as dúvidas resumidas.
O que é mutation? Onde está essa mutation nesse bloco de código? Qual seria a melhor alternativa pra trabalhar isso e porque?
O que é imortante entender no conceito de programação funcional? Comparando com SOLID para POO é importante entender sobre Função Pura, mas o que mais? Recursividade faz parte de falar sobre programação funcional? Etc...
O quão é importante conhecer o 'Event Loop' e conseguir explicar?
No caso todas essas tem diferença de 'saber' e 'explicar', eu sempre fui a favor de que, quando você saber explicar é porque você realmente entende sobre o assunto, correto? Mas saber apenas não seria suficiente pra 'ser considerado um dev'?
Mas assim, pra finalizar, não passei nessa etapa e ele falou:
"Você precisa ter certeza nos conceitos, daqui um tempo você pode tentar de novo".
Então, eu concordo 100% com isso, 0 problemas, mas depois de 4 dias eu não consigo parar de pensar nisso e até mesmo estou escrevendo o texto por isso, e o que me incomoda mais é 'não saber responder as perguntas' e não 'não ter passado de fase', pra mim todos esses conceitos são importantes de conhecer, principalmente o 'Event Loop'.
Bom, talvez tenha ficado confuso, mas a ideia é falar de:
Processo legal, o único que fiz em 6 meses que me deu feedback REAL.
Fiquei em dúvida nesses pontos, então pelo julgamento do entrevistador eu não sou um 'Jr' ainda (eu sei que eu não sou pra empresa dele, mas esse lance de Jr, Pleno e Sr é 'quase' aleatório), mas, será que eu posso me colocar como um 'Dev JS' mesmo não sabendo explicar esses conceitos?
E a última é: Se eu não sou Jr pra ele, o que o Pleno precisa saber pra ser Pleno? E o Sr? Eu pergunto isso com intuito de me guiar para próximas etapas de estudo, atualmente trabalho como freela e 'parei' de estudar, porque eu não sei pra onde olhar, na verdade eu tenho focado muito em DevOps, mas eu queria ser um cara 'pro' em JS antes de pular pra outra coisa...
Obrigado pra quem leu até aqui e pra quem responder também :).
E na última linha vou mandar o link pra quem quiser tentar essa vaga também. Aparentemente ainda estão abertas, então deve dar tempo de tentar ainda.