O que é mutation?
Uma mutation no contexto de software funcional é simplemente um assignment, ou qualquer coisa que altera o valor de um objeto depois que ele foi criado.
Onde está essa mutation nesse bloco de código?
.set()
Neste trecho de código, os assignment acontecem apenas no momento da criação da variável por isso não são mutações neste caso.
As funções setPeopleByCompany(), setPeopleNotCheckedIn(), provavelmente vão fazer mutações, mas isso não fica claro neste trecho código.
Qual seria a melhor alternativa pra trabalhar isso?
A abordagem de utilizar variáveis constantes e atribuir os valores no momento da criação, como feito no código é uma excelente prática em muitos cenários, especialmente em programação funcional ou em contextos onde a imutabilidade é valorizada.
E por quê?
Código que evita mutações é geralmente mais fácil de entender, raciocinar e depurar. Como o estado de um objeto ou variável não está constantemente mudando, fica mais claro entender o que um trecho de código fará. Código imutável tem um fluxo de controle mais claro e previsível.
Dados imutáveis são naturalmente seguras para uso em threads, pois não existem problemas com múltiplas threads tentando modificar os mesmos dados simultaneamente. Já que ninguém pode modifical o dado. Isso facilita a escrita de código concorrente e paralelo de forma segura.
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?
A imutabilidade é um dos princípios de programação funcional que todo progrmador deve conhecer. Além disso é imporante saber sobre Composição de Funções, Currying, Tipagem Forte, e talvez, apenas talvez Monads.
Recursividade faz parte de falar sobre programação funcional?
Sim, e não. A recursividade é uma parte fundamental de qualquer paradigma de programação. Embora a recursão não seja exclusiva da programação funcional, ela desempenha um papel particularmente importante na programação funcional. Isso ocorre por que em vez de usar loops tradicionais, frequentemente se usa recursão para realizar iterações ou repetições. Além disso a recursividade se alinha bem com estruturas de dados imutáveis, que são o mais básico da FP.
Linguagens puramente funcionais como Haskell, sequer têm estruturas de Loop nativamente.
E falando nelas, embora o JS e muitas outras linguagens modernas possam (e devem) ser usadas de forma funcional, para realmente compreender este paradigma é altamente aconselhavel estudar e praticar programação com linguagens puramente funcionais, embora Haskell seja talvez a melhor do ponto de vista puramente academico, eu pessoalmente recomendaria conhcer Clojure ou Elm.
Além disso recomendo fortemente esse pequeno livro maravilhoso:
https://github.com/MostlyAdequate/mostly-adequate-guide
O quão é importante conhecer o 'Event Loop' e conseguir explicar?
Conhecer e compreender o 'Event Loop' é extremamente importante para programadores, especialmente aqueles que trabalham com JavaScript ou outras linguagens que operam em um modelo de programação assíncrona. Saber como as funções assíncronas são tratadas, como os callbacks são enfileirados e processados, e como a concorrência é gerenciada é crucial para escrever código eficiente e evitar erros comuns. Um programador de verdade precisa saber exatamente, quando cada linha de código vai ser executada. E entender o Event Loop, é fundamental para isso.
Problemas como bloqueio do thread principal, gerenciamento ineficiente de tarefas assíncronas e outros problemas de performance estão frequentemente ligados a um entendimento insuficiente do Event Loop. Um conhecimento sólido nessa área é fundamental para evitar esses problemas.
A verdade é que muitos desenvolvedores JavaScript não têm esse conhecimento. Por isso recorrem a async/await e promises, sem entender os fundamentos por trás dessas abstrações. Eles acreditam que callbacks são inferiores ou obsoletos comparados a promises e async/await. No entanto, callbacks são quase sempre a escolha certa.
Entender o Event Loop é fundamental para entender quando usar cada um desses padrões.
Se eu não sou Jr pra ele, o que o Pleno precisa saber pra ser Pleno? E o Sr?
A transição de Junior para Pleno e de Pleno para Sênior em uma carreira de desenvolvimento de software não é uma questão de conhecimento técnico acumulado, mas principalmente de experiência prática e a capacidade de aplicar esse conhecimento de maneira eficaz. Autonomia, liderança técnica, habilidades interpessoais e compreensão dos objetivos de negócios são alguns exemplos do que não é esperado de Jr. Conhecimento técnico, não está nessa lista.
Acho que respondi tudo, certo? Quaisquer outras dúvidas não hesite em perguntar,
Um abraço e bons estudos!