Um compilado para quem está dando os primeiros passos em tecnologia/programação
Eu confesso que fiquei relutante em escrever esse compilado mas como ele é uma junção de dois posts já escritos no meu perfil do LinkedIn com dicas para as novas pessoas aspirantes a desenvolvedoras de software, vale o registro. Antes de prosseguir, três avisos:
1 — O que funciona para uma pessoa, não será 100% aplicável para você: o mercado de tecnologia é (e sempre foi) extremamente duro com novas pessoas em níveis de carreira júnior.
2 — Muito do que estou colocando aqui é baseado em experiências pessoais seja como líder, na cadeira de recrutador, seja como uma pessoa que também faz/fez processos seletivos como candidato.
3 — Por mais que possa ser ruim, o mercado tem diferentes percepções sobre o que é uma pessoa júnior: de 0 a 2 anos de mercado pode ser júnior, ou uma pessoa que não trabalha em uma empresa com orientação a produtos digitais pode ser considerada júnior por uma softwarehouse, por exemplo. E não estou aqui neste post para fazer júizo de valor.
Dito isso, vamos lá?
Parte 1: organização:
Seu currículo é sua porta de entrada para as oportunidades. Hoje eu aconselho pessoas de tecnologia dividir seu currículo em três partes: perfil do LinkedIn, um documento otimizado para plataformas de ATS (Applicant Tracking Systems — tipo Gupy) e algum tipo de portfólio com projetos como Github. Eles devem estar atualizados e otimizados: existem alguns lugares onde você pode pesquisar como otimizar seus perfis para serem "ats friendly". Por fim, uma coisa importante é deixar explícito o que você faz e como é feito! Para as pessoas que são júnior e tem ali tempo de 6 meses a 2 anos de experiência é importante você colocar no seu perfil com o que você trabalha:
“Na empresa z, meu trabalho consiste em desenvolver atividades/tasks/histórias usando as tecnologias A e B. O time se organiza usando o método W, onde participo dos eventos Q, Y P…”
Sem uma descrição é complicado saber qual é seu dia a dia. Se não engajar [chamar a atenção] da pessoa recrutadora, ela vai te abordar com um “oi, queria saber o que você faz ai na empresa z”. Nem preciso dizer quem um perfil vazio também vai ser péssimo, certo?
Para os que ainda estão na universidade ou na busca de primeiro emprego migrando de área: projetos “clone do site x” de bootcamps não contam muito. Invista seu tempo fazendo projetos mais simples aplicando o que você está vendo nestes lugares! [vou evocar a carta do velho] Na minha época era comum fazer CRUD (Create, Read, Update e Delete) usando Java, depois .NET e PHP. Você fazia o básico, depois ia evoluíndo (falaremos mais sobre CRUD em frente). Contribuições em projetos Open Source, projetos menores autorais resolvendo problemas reais (mesmo que batidos como sistemas para a cafeteria do vizinho, por exemplo) rodando no mundo real tem mais impacto que o bootcamp que clona o Twitter usando nem 0,05% do que o Twitter usa de verdade.
Ah, estou migrando de área! Além das dicas acima, você precisa deixar isso bem explícito: sua experiência passada pode ser útil para a próxima vaga.
“sou uma pessoa que atualmente trabalho com X, mas estou estudando tecnologia Y e quero oportunidades em Y para me desenvolver profissionalmente! Tenho feito projetos usando tecnologia Y, que estão ajudando clientes do estabelicemento W. Acredito que somadas minhas experiências podem ser muito úteis para a empresa A”.
Entenda os níveis/ladder das empresas: geralmente as empresas tem níveis diferentes entre si: IC3, Junior Developer, E1… e cada uma delas seta uma expectativa sobre o que é esperado de um júnior — “fazer o que é demandandado, com algum apoio de pessoas mais sênior” por exemplo. Para o mercado, de 0 a 3 anos de experiência pode ser considerado júnior, mas para algumas empresas, pode ser menos tempo e tudo depende da ladder adotada. Existe o outro lado: tem empresas que não tem sistema de ladder! Vale MUITO uma pesquisa com pessoas da organização na qual você está aplicando para entender o que uma pessoa júnior ou associate/trainee faz! O LinkedIn é seu aliado, pesquise… O não você já tem!
Por fim: mantenha sempre organizada uma lista de onde, como e qual currículo você usou para aplicar nas vagas! Com sistemas de ATS hoje sendo a norma, é necessário um número grande de customização de dados para "chamar a atenção das IAs" durante o processo de triagem. Entender quais são as versões do seu CV que estão avançando nos processos pode ser um ponto de partida para otimização de palavras chave, etc..
Parte 2: parte técnica
Sobre CRUD: Para juniores, é fundamental entender cada aspecto desse acrônimo bem, e saber reproduzir isso de maneira estruturada. Antes de dar um pulo em um framework, faça uma decoposição e crie CRUDs do zero para entender a didática: O que é um Model View Controller? O que faz uma query no banco? Como abro uma conexão com um banco de dados relacional? Como pagino um set de resultados? Como trato os dados de um formulário de cadastro? Como testo minhas funcionalidades? Vai entendendo isso, depois passando para para conceitos mais complexos. Frameworks abstraem MUITA coisa disso tudo e certamente por mais simples que seja um teste, vão te cobrar essa lógica de design de aplicação sem o uso de frameworks. E um ponto de observação importante: não são todas as empresas que vão te cobrar para uma vaga de júnior uma prova de design system elegante, onde você vai precisar fazer uma linked list na mão, mas é esperado em qualquer processo seletivo em níveis mais iniciais que você apresente seu código após fazer um mini projetinho, resolver um problema dado pela empresa… então entender os conceitos básicos se torna vital antes de pular para frameworks, por exemplo.
Entenda: no mundo de tecnologia, estamos sempre desatualizados: é normal e você não vai conseguir estudar TUDO que vê por ai. Se tem uma coisa que acho covardia dos ditos “vendedores de curso” é implantar o falso pensamento que basta aprender uma stack, fazer um projetinho ou dois e pronto… não é! O melhor remédio para fugir dessa armadilha é ter foco: escolha uma área de atuação e foque nela: backend, frontend… aqui uma opinião pessoal minha é: fullstack júnior é enganação do mercado de curso, pois profissionais fullstack dominam todo o ciclo de vida de uma aplicação. Preste atenção na palavra “dominam”.
Sobre ser júnior ou estar júnior? Seu nível para a empresa geralmente é definido pelo seu desempenho em uma entrevista técnica, mas isso não define o quão competente você é. Faz parte do jogo, e saber negociar é a parte mais complicada para quem não tem experiência: muitas vezes deixamos o ego falar mais alto que a razão e não concordamos que o avaliador disse que não estou no nível júnior, mas sou um associate, por exemplo! Aqui uma história pessoal: meu primeiro emprego real na área foi CLT em um órgão público através de uma empresa tercerizadora de serviços, mas depois de 3 meses apareceu uma oportunidade de estágio em uma softwarehouse em Recife e o que fiz? Aceitei virar estagiário! CLT pagava mais, porém não iria aprender muito ali, pesei a oportunidade e fui virar estagiário.
Por fim: se mostre aberto a feedbacks e observações durante as entrevistas técnicas: geralmente uma entrevista técnica para pessoas júnior vai exigir um CRUD e uma explicação sobre o que foi desenvolvido (dai a importância do item 2 dessa lista). Você vai receber feedbacks, e o que vai ser avaliado ali não é apenas seu código e sim o quão legal seria trabalhar com você! Lembre-se que as pessoas ali serão suas futuras colegas de trabalho e ninguém quer trabalhar com um idiota por mais brilhante que seja, certo?
Parte 3: soft skills
Desenvolvimento de software em sua grande maioria é um esporte em equipe que requer grande talento individual. Eu sempre faço essa analogia com a Fórmula 1: uma equipe é formada por engenheiros mecânicos, aeroespaciais e afins, estrategistas, fornecedores que se concentram em criar dentro das limitações que a regra impõe o melhor carro, que por sua vez vai precisar do melhor piloto para guiar o carro na pista! O piloto não vence sozinho, mas é parte importante do processo… e isso requer comunicação fina entre quem guia o carro e quem desenvolve o carro.
Em desenvolvimento de produtos digitais, soft skills são, diagmos, as joias da coroa, pois melhoram a colaboração, a comunicação e a adaptabilidade no ambiente de trabalho. Por exemplo, um desenvolvedor júnior com boas habilidades de comunicação pode explicar claramente suas ideias e problemas para colegas e gerentes, facilitando a colaboração e a resolução de problemas, o que aumenta a eficiência da equipe e reduz mal-entendidos. Mas quais seriam os pontos para desenvolver como júnior?
Comunicação Eficaz:
Um desenvolvedor júnior com boas habilidades de comunicação pode explicar claramente suas ideias e problemas para colegas de equipe e gerentes. Isso facilita a colaboração e a resolução de problemas, além de garantir que todos estejam alinhados quanto aos objetivos do projeto. Comunicação async, poder de síntese e estruturação são seus amigos!
Trabalho em Equipe:
Em projetos de software, a capacidade de trabalhar bem em equipe é crucial. Um desenvolvedor júnior que sabe colaborar com outros, aceitar feedback construtivo e contribuir com ideias ajuda a criar um ambiente de trabalho harmonioso e produtivo. Linhas acima citei o exemplo do "idiota brilhante" que é aquela pessoa que é capaz de resolver muitos problemas na parte técnica mas é simplesmente horrível de se trabalhar em equipe, pois ele/ela não agrega em NADA: só critica, nada está bom… Por experiência própria, muitas empresas preferem ter pessoas boas de trabalhar com habilidades medianas/boas que possam ser treinadas do que um novo gênio da computação destruidor de ambientes.
Adaptabilidade e Resiliência:
Eu disse linhas acima e repito: estamos sempre desatualizados! O campo da tecnologia está em constante mudança. Um desenvolvedor júnior com alta adaptabilidade pode aprender rapidamente novas tecnologias e metodologias, enquanto a resiliência permite que ele lide bem com falhas e desafios inesperados: você vai errar, não tem como… esteja preparado para entender rapidamente seus erros e melhorar com eles. Uma coisa que nenhuma pessoa curte comentar é sobre falhas e te garanto que TODO desenvolvedor já fez bobagem em produção mas aqueles que conseguem iterar rápido e seguir em frente, aprendendo com as falhas são os que mais conseguem sucesso.
Para encerrar, um tópico sobre Inteligência Artificial: muito se fala sobre como a IA vai mudar o jogo do mercado de desenvolvimento de software nos próximos meses/anos mas o que muitos não comentam é que desenvolvimento de software requer um trabalho enorme para combater o crescimento da complexidade e o aumento da dívida técnica em um sistema e muito do trabalho das equipes de desenvolvimento é comparado ao artesanato, como descrito aqui no manifesto do software craftmanship e os profissionais que vão se manter a longo prazo no mercado são aqueles que conseguem adicionar valor com essa capacidade de pensamento crítico avançado aliado a capacidade de execução técnica, essa que vai ser amplamente apoiada em IA nos próximos anos. Então, sei que é dificil ouvir falar que a barra para profissionais júnior vai ficar ainda mais alta mas na real? Ela sempre foi! Agora o jogo com IA você tem um aliado que pode lhe dar um boost de produtividade.
Links úteis: nos quais estou ganhando ZERO reais indicando!
Quer entender quais são os níveis/ladders de uma empresa? O levels.fyi pode lhe ajudar: https://www.levels.fyi/
Quer começar a estudar para um caminho específico e não tem ideia de onde começar? O Roadmap.sh com certeza é o melhor lugar: https://roadmap.sh/
Sim, você vai precisar estudar sobre design patterns, existem vários livros sobre o assunto mas esse site é de graça: https://refactoring.guru/ e um excelente começo (o site vende um ebook, mas eu nunca comprei então não posso indicar)
O que é a tão falada System Design Interview? Esse mini curso 0800, sem pegadinha, ensina o básico do básico: https://www.educative.io/courses/system-design-interview-handbook
Qual livro eu indico para todos os júniores que passam sob minha gestão? Construindo uma carreira em software: https://www.amazon.com.br/Construindo-uma-Carreira-Software-completo-ebook/dp/B09DRGXMKB/
Vai trabalhar em uma startup? Você deve entender o que raios é uma startup especialmente se o negócio que ela está tentando criar ainda não tem mercado, o famoso "de 0 para 1", então leia esse livro do Peter Thiel: https://www.amazon.com.br/zero-um-Peter-Thiel/dp/8539006200/
Você FINALMENTE conseguiu um emprego na área de tecnologia? Parabéns, agora você tem bastante trabalho para se manter atualizado! Mini projetos são o melhor caminho e talvez a abordagem do Ultra Aprendizado lhe ajude a organizar as ideias: https://www.amazon.com.br/Ultra-aprendizado-habilidades-valiosas-competi%C3%A7%C3%A3o-carreira/dp/6555110058/
E não esqueça de alinhar as coisas com seu novo líder, certo? Para isso os primeiros 90 dias são primordiais: https://www.amazon.com.br/Os-Primeiros-90-Dias-Estrat%C3%A9gias/dp/8550807346/
Esses dois últimos links são sobre algorítimos, muito para você quando ouvir falar em alguma coisa que os mais experientes falarem, você ficar ligado e vir pesquisar aqui, com ótimos exemplos visuais!
https://visualgo.net/en e https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
É isso, comenta aqui o que você adicionaria para um júnior!?