Luis 8 de junho de 2022 - Leia em 20 minutos
Um desenvolvedor Júnior em geral, é aquele profissional que no está no início de sua carreira e que tem as habilidades mínimas requeridas para executar algumas tarefas básicas de programação, normalmente não recebe tarefas de grande impacto e não tem maiores responsabilidades dentro da empresa.
Com o passar do tempo, o desenvolvedor Júnior vai adquirindo novas habilidades e responsabilidades e, eventualmente, vai subir de nível dentro da empresa.
Nesse artigo vou falar sobre alguns temas que eu entendo como importantes na formação do Dev Júnior em React Native para que ele possa em menor tempo conseguir mostrar sua evolução e mudar de nível.
Antes de entrar nos conhecimentos necessários em React Native, é muito importante que o Dev entenda o contexto no qual está inserido e se ele quer mudar de nível em menor tempo.
Eventualmente, com o tempo de empresa, o desenvolvedor Júnior vai receber maiores responsabilidades e vai mudar de nível, mas, se quiser acelerar esse processo, um grande passo é conhecer cada vez mais sobre a área de atuação da empresa para qual trabalha.
Vamos pegar um exemplo de um Dev Júnior em uma empresa no ramo imobiliário, que tenha um aplicativo focado em aluguéis de imóveis. Não é de responsabilidade do desenvolvedor Júnior conhecer sobre aluguéis, impostos, contratos imobiliários, avaliação de imóveis, entre outras particularidades do setor, porém, quanto mais ele aprender sobre a área, mais capacidade terá de trazer novas ideias e mostrar sua evolução e comprometimento.
Em geral, em uma empresa com vários desenvolvedores de nível Júnior, esse é um dos grandes diferenciais. Se um talento mostra comprometimento com a empresa, seu líder vai gradualmente lhe dando cada vez mais oportunidades de crescimento, mostrando-lhe o menor caminho em direção à subida de nível.
Obviamente, a parte técnica ainda é a mais importante. Então, vamos em seguida falar sobre as habilidades técnicas necessárias para mudança de nível. Confira:
Por mais óbvio que pareça, vale a pena reforçar que para um desenvolvedor evoluir em React Native, ele deve ter um bom conhecimento de JavaScript e Lógica de Programação.
Assim como na Web, em React Native é possível começar com pouco conhecimento em JavaScript e lógica, com tarefas mais básicas, de pouca urgência e com acompanhamento. Nesses casos, como as tarefas não são urgentes, o Dev tem tempo para pesquisar, pegar um trecho de código pronto na internet e acaba desacelerando seu desenvolvimento.
Esta situação se agrava um pouco mais quando o Dev é alocado em uma tarefa repetitiva, porque com pouco tempo ele vai dominar a sua tarefa de responsabilidade, mas pode ficar estagnado na carreira por não precisar evoluir em conhecimentos de JavaScript e Lógica para sua tarefa.
Dentro ainda desse tema, vou enumerar os itens que considero indispensáveis para evolução de um desenvolvedor Júnior
Pode parecer muito simples, mas vejo muitos talentos com dificuldades em operadores básicos. Às vezes, por não possuir uma base muito sólida em matemática, alguns desenvolvedores têm dificuldades com parênteses, operadores lógicos como ( !, <, >, || , ??, &&, …). Em outras situações, o profissional até entende a lógica, mas ainda está se adaptando à linguagem e se confunde com os operadores lógicos.
2 – Estruturas condicionais
Também ainda no básico, as estruturas condicionais têm suas particularidades no React Native, o que pega alguns Devs desprevenidos.
É super importante que o profissional domine, além da estrutura padrão, o "if ternário" porque, dentro do render da aplicação, toda exibição condicional só funciona com a utilização do "if ternário". Logo, dominar essa estrutura é obrigatório para mudança de nível.
3 – Laços de Repetição
Laços de repetição também são de extrema importância. Além dos básicos FOR e WHILE, por exemplo, é importante dominar MAP, FILTER entre outros que veremos a seguir em arrays.
4 – Arrays
Aprender a trabalhar com arrays é muito importante em React Native, principalmente para manipular listas em geral. Filtros, Iterações, concatenações, remoção e edição de itens específicos, tudo isso é obrigatório para um desenvolvedor Júnior que deseja mudar de nível.
Para esse item em específico, um bom desafio é criar um App de lista de tarefas. Não precisa de se preocupar com salvar os dados ou com a aparência do app, basta conseguir inserir, remover, editar e filtrar a lista. Com essa simples aplicação, garanto que será possível desenvolver bem as habilidades para trabalhar com arrays, algo tão necessário no React Native.
5 – Funções
Entender o uso de funções também é essencial. Nesse tópico, é importante entender como passar parâmetros, retornar valores, criar e executar funções, entre outras habilidades.
Por mais que funções sejam um aspecto básico tanto de Lógica, quanto de JavaScript, no React Native existem algumas particularidades que são importantes de se pontuar. Um exemplo disso é: se você chama uma função dentro de uma propriedade como, por exemplo, no onPress de um componente Touchable, você deve usar a estrutura de arrow function para chamar a sua função. Caso contrário, sua função será executada no carregamento do componente e não na ação de clique em si.
Por isso, é muito importante, mesmo que o desenvolvedor domine o conceito de funções, conhecer essas particularidades do React Native.
React Hooks são indispensáveis. Não se pode evoluir em React Native sem um conhecimento básico dos seus principais hooks.
1 – useState()
O Hook de estado, é o hook responsável para lidar com as variáveis de estado na nossa aplicação.
Para um Dev que está começando como Júnior, uma das coisas mais complexas são as variáveis de estado, porque são uma categoria diferente de variáveis, e não está ligado à sua tipagem, e sim ao conceito. As variáveis de estado representam o estado atual de um componente em React.
As variáveis de estado não são declaradas ou alteradas da mesma maneira que as variáveis comuns em JavaScript. Enquanto nas variáveis tradicionais você atribui um valor utilizando o símbolo "=", (var x = 0), as variáveis de estado são alteradas utilizando a função setState().
Ah, e um fato importante sobre a função setState é que ela é assíncrona. Ou seja, você não pode alterar uma variável de estado em uma linha e querer utilizar seu valor na linha seguinte, porque ela ainda não estará disponível com seu valor atualizado. Para saber quando o novo valor está disponível, utiliza-se o hook de efeito que veremos a seguir.
Para um desenvolvedor Júnior evoluir em React Native é muito importante entender e dominar o conceito de state.
2 – useEffect()
O useEffect é um dos hooks mais complexos, mesmo para quem já desenvolve a mais tempo e veio migrando da estrutura de classes para estrutura de componentes funcionais. Isso porque, o useEffect veio substituir pelo menos três funções muito comuns no uso da estrutura de classes.
Como não vou entrar tanto em detalhes neste artigo, recomendo a leitura desse outro artigo sobre o assunto. Mas, de forma resumida, o hook useEffect é responsável por executar trechos de códigos em momentos específicos dentro da aplicação, seja no momento em que o componente é montado em tela, seja no momento em que ele é desmontado. Ou seja, no momento em que alguma variável do estado da aplicação seja atualizada.
3 – useRef() e createRef()
Esses dois hooks são responsáveis por referenciar componentes dentro da aplicação.
Na web, temos o id dos elementos como uma propriedade bem conhecida e utilizada. No React Native, os componentes não possuem uma propriedade padrão de identificação única e por isso é importante aprender sobre useRef e createRef, para um melhor domínio da linguagem.
Existem muitos outros hooks, e os desenvolvedores ainda podem criar seus próprios. No entanto, acredito que no quesito "sair do nível Júnior", esses acima são os mais importantes.
Nesse tópico quero apenas citar rapidamente a importância de um desenvolvedor entender como funciona no React Native a estrutura de componentes.
O React Native já vem "de fábrica" com todos os principais componentes necessários para criação da aplicação. Porém, dificilmente você trabalhará em uma aplicação onde não se tenham componentes criados a partir desses componentes padrões.
Saber combinar componentes padrões, embarcar funções e state dentro de seus próprios componentes e, principalmente, saber identificar a necessidade de criar um componente específico, são habilidades indispensáveis para um Dev, pois é algo que está diretamente ligado à estrutura geral da aplicação.
Utilização de Libs Externas
Tenho também um outro artigo sobre esse assunto mas, vale citar aqui que saber identificar a necessidade de libs externas, instalar e utilizar, são conhecimentos importantes para um Dev React Native.
As Libs externas ajudam no desenvolvimento dos Apps, afinal, ninguém quer perder tempo reinventando a roda. No entanto, é importante saber identificar e escolher libs que realmente sejam necessárias, além de saber avaliar se a lib em questão tem manutenção, se está sempre bem atualizada e compatível com as mais recentes versões do React Native.
De todo o artigo, talvez esse seja o requisito de mais alto nível, e pode até ser deslocado para o nível pleno. Mas, resolvi colocar nesse artigo porque acredito que o quanto antes o Dev se envolver em conceitos de bancos de dados e memória, mais confortável ele vai se sentir em subir de nível.
Para um desenvolvedor Júnior que quer subir de nível, não precisamos aprofundar muito nesse assunto. Mas, é importante entender que, para praticamente qualquer aplicação, será necessário algum tipo de armazenamento offline, seja para dados de usuário, carrinho de compras, listas de tarefas, entre outros.
Recomendo começar pelo AsyncStorage, que é bem similar ao LocalStorage que temos na Web. Ele consiste em um banco de dados offline, que antes fazia parte do core do React Native, mas que agora foi separado e é mantido pela comunidade. As operações são bem básicas, apenas leitura e escrita, não é um banco de dados robusto e nem veloz, mas é muito útil para persistência de dados.
Existem outras excelentes opções, como RealmDB, mas acredito que para o nível Júnior, o AsyncStorage é o melhor ponto de partida.
Uma grande habilidade que um talento Júnior precisa aprender é ler documentações. Isso não é essencial apenas para aprendizado e evolução na linguagem, mas também é a melhor forma de aprender a documentar seu próprio trabalho.
Por natureza, o Dev Júnior por muitas vezes utiliza trechos de códigos de terceiros, mesmo que para fazer tarefas relativamente simples. E, ao se deparar com os primeiros códigos de erros, o instinto inicial é de pedir ajuda, seja para um superior ou para comunidade em grupos de Whatsapp, Discord, ou mesmo buscando por solução em fóruns como StackOverflow.
Por mais que eventualmente se acabe chegando na solução do problema, a primeira atitude deve ser sempre recorrer à documentação oficial, especialmente quando se trata da documentação oficial do React Native.
A leitura da documentação não deve ser apenas o primeiro instinto ao se deparar com um problema, pelo contrário, é um recurso a ser usado antes de qualquer implementação. Por vezes, já me deparei com desenvolvedores implementando alguma lib, gastando bastante tempo para integrá-la ao projeto, para só mais tarde perceber que não é compatível com alguma outra dependência do projeto ou que não é o que ele imaginava inicialmente.
Tudo isso pode e deve ser evitado simplesmente lendo a documentação antes de tomar qualquer outra medida.
Há uns anos, eu já entendia que o inglês seria de extrema importância na programação. Porém, acreditava que o inglês técnico seria o suficiente, já que é o que utilizamos para codar em si. Entretanto, hoje entendo que vai muito além e, por isso, achei importante colocar como um ponto a se observar mesmo sendo um Dev Júnior.
Pra começar, por mais que tenhamos hoje excelentes produtores de conteúdos nacionais, isso ainda representa uma pequena fração no quesito conteúdos para React Native. Aprender inglês vai ajudar, e muito, a encontrar e consumir conteúdos mais atualizados sobre React Native, encontrar ajuda para solução de erros e interpretar melhor os trechos de códigos que se encontram na internet. Tudo isso é essencial para um Dev Júnior.
Quando falamos em pretensão de mudar de nível, isso se torna ainda mais importante, abrindo grandes possibilidades de assumir vagas internacionais trabalhando remotamente.
Uma dica extremamente importante é não fazer experiências em projetos da empresa.
Se você é um Dev Júnior, ainda tem muito a aprender, mas projetos da empresa não podem servir de cobaias, para testar novas libs e aplicar o conhecimento que está adquirindo. Por isso, crie projetos pessoais que, além de te darem um bom portfólio, deixarão os projetos da empresa em segurança.
Mesmo quando se trata de ambientes de homologação, projetos da empresa não devem ser usados para experimentos, já que isso vai causar sérios problemas de segurança e bugs na aplicação que eventualmente podem vazar para o ambiente de produção.