Guidelines para Carreira de Engenharia de software
Importante
Estas guidelines são baseadas na experiência do autor e não necessariamente representam o consenso de um grande grupo de pessoas da área de engenharia de software.
tl;dr
Seja você o dono e condutor da sua carreira, invista continuamente em você, compreenda os conceitos fundamentais, trabalhe em projetos pessoais, identifique seu valor de mercado, desenvolva habilidades de comunicação, e siga um plano de médio e longo prazo.
Sumário
- Formação
- Níveis da carreira
- Salário e mercado
- Especialização e certificações
- Comunicação e softskills
- Preparação para entrevistas
Formação
As 3 questões fundamentais:
- Por onde devo começar?
- No que investir ao longo da jornada?
- Quais conhecimentos vão durar mais tempo e quais irão se tornar obsoletos mais rapidamente?
Fontes de conhecimento
Não é necessário fazer uma graduação para aprender a desenvolver software ou entrar no mercado de trabalho.
- Se o objetivo é iniciar rapidamente no mercado ou em uma determinada área nova, uma ótima opção é um bootcamp de programação. Estes são programas intensivos de treinamento que geralmente duram de algumas semanas a alguns meses e são focados em habilidades necessárias para um determinado mercado.
- Sugestão grátis: Um excelente e completo é o freecodecamp.org.
- Sugestão paga: Um dos melhores de 2023, pela Forbes: altcademy.com.
- Se o objetivo é ter uma formação mais abrangente que facilite a entrada no mercado por meio de estágio, mas não seja tão longa quanto uma graduação, um curso técnico é uma ótima opção, pois geralmente dura de 1 a 2 anos e fornece uma base prática e focada no mercado além de um diploma reconhecido na área.
- Se o objetivo é o aprendizado continuo, complementar um curso em andamento ou aprender uma ferramenta ou framework, existem uma ampla variedade de cursos online disponíveis em grandes plataformas.
- Sugestão grátis/paga: Com 100 milhões de alunos é a Coursera.org.
- Sugestão grátis/paga: Fundada pelo MIT e Harvard é a edx.org.
- Sugestão grátis/paga: Para quem prefere um caminho estruturado codecademy.com.
- Sugestão grátis/paga: Para quem prefere economizar Udemy.com.
- Sugestão paga: Para empresas oferecer aos colaboradores Pluralsight.com.
- Se o objetivo é entender, de maneira estruturada, o que o mercado espera do profissional juntamente com o caminho do que aprender para se tornar um profissional capacitado, uma ótima opção é o roadmap.sh. É um dos 10 repositórios com mais estrelas no Github e consultado por centenas de milhares de pessoas todos os meses. Possui roadmaps para papéos, habilidades e boas práticas.
- Se o objetivo é complementar um curso em andamento por meio de leitura, livros e documentações são excelentes opções.
- Sugestão grátis/paga: Mais de 35 mil livros em Oreilly.com.
- Sugestão grátis: Artigos e guias em mozilla.org.
- Sugestão grátis: Aprender por meio de exemplos em w3schools.com.
- Se o objetivo é treinar ou demonstrar habilidades, crie uma conta no Github.com com projetos públicos, onde pode expressar como você gosta de codificar ou soluções para problemas que você já enfrentou.
Porque fazer uma graduação
Uma vez que você já está no mercado de trabalho ou deseja seguir a carreira de engenharia de software, é altamente recomendável fazer uma graduação. Existem várias razões pelas quais essa decisão pode ser benéfica, pois ela oferece:
- Uma base sólida em ciência da computação, preparando a pessoa para uma ampla gama de desafios na carreira de engenharia de software. Ela também amplia sua visão sobre as diversas oportunidades dentro deste campo dinâmico.
- A oportunidade de construir uma valiosa rede de contatos profissionais, que pode ser fundamental para iniciar e avançar na carreira.
- Um aumento significativamente na sua credibilidade perante o mercado, pois em geral, os empregadores valorizam a dedicação e o comprometimento necessários para concluir uma graduação, o que pode ser um diferencial competitivo a longo prazo.
- Programas de estágio para estudantes e assim facilitar a entrada no mercado de trabalho para quem ainda não ingressou.
- Uma mobilidade internacional, pois em alguns casos, um diploma de graduação pode ser um requisito para a obtenção de um visto de trabalho altamente qualificado em outro país, o que pode abrir portas para oportunidades de carreira no exterior.
Pirâmide de conhecimento
Para orientar em qual aspecto do conhecimento focar, existe uma abordagem chamada popularmente de pirâmide de conhecimento. Essa estrutura hierárquica representa uma base sólida de conhecimentos duradouros na parte inferior e conhecimentos mais voláteis no topo. À medida que você avança na pirâmide, o conhecimento tende a ser mais específico e sujeito a mudanças rápidas.
No início da carreira, é crucial concentrar os esforços nos níveis mais fundamentais da pirâmide, uma vez que eles estabelecem uma base sólida para o seu desenvolvimento como engenheiro de software. Esses níveis incluem:
Fundamentos (Base, nível 0):
- Lógica de programação
- Estruturas de dados
- Algoritmos
- Princípios de design e arquitetura de software
- Teoria da computação
Princípios de Engenharia de Software (nível 1)
- Gerenciamento de projetos
- Desenvolvimento de software orientado a objetos
- Princípios de desenvolvimento ágil
- Teste de software e qualidade de código
- Padrões de projeto
- Pipelines
Tecnologias e Linguagens de Programação (nível 2)
- Linguagens de programação (ex: Java, Python, JavaScript)
- Frameworks (ex: Spring, React, Django)
- Bancos de dados (ex: MySQL, PostgreSQL, MongoDB)
- Ferramentas de desenvolvimento
Conhecimento de Domínio Específico (nível 3)
- Conhecimento relacionado à indústria ou ao domínio em que você está trabalhando (por exemplo, saúde, finanças, jogos, etc.).
- Regras de negócios específicas.
Tecnologias Específicas do Projeto (Topo, nível 4)
- Tecnologias e ferramentas específicas que são usadas em um projeto em particular
- Isso pode incluir versões específicas de linguagens, bibliotecas e ferramentas
Níveis da carreira
As 3 questões fundamentais:
- Quantos níveis existem?
- Como eu sei qual meu nível?
- O que devo fazer para ir para o próximo nível?
Organização dos níveis
Não existe uma única regra no mercado para definir quantas etapas ou níveis existem, pois cada empresa tem suas próprias regras, mas é possível identificar um padrão no mercado. Os níveis mais comuns identificados são 5:
- Estagiário: são geralmente estudantes ou recém-formados que estão em seus primeiros passos na área de TI. Têm responsabilidades limitadas ou inexistentes.
- Júnior: têm alguma experiência prática em TI, mas ainda estão desenvolvendo suas habilidades. Têm poucas responsabilidades, geralmente em rotinas do dia-a-dia.
- Pleno: têm experiência sólida em sua área de atuação e podem até mesmo orientar membros da equipe menos experientes. Trabalham de forma autônoma e possui responsabilidade compartilhada ou autônoma dos sistemas desenvolvidos pela equipe.
- Sênior: têm uma vasta experiência e conhecimento técnico em sua área além de mentorar os níveis anteriores. São responsáveis pelos sistemas desenvolvidos pela equipe ou área e tomam decisões estratégicas relacionadas.
- Principal ou especialista sênior: são altamente experientes, possuem profundo conhecimento técnico e são frequentemente líderes em sua área. Podem liderar projetos de grande escala e influenciar a direção da tecnologia na organização.
Acima destes níveis geralmente encontraremos diretores, mas algumas empresas possuem níveis intermediários e ao invés de chamar por nomes chamam por números. A Amazon, por exemplo, possui 6 níveis, já a Google e Facebook possuem 7 níveis. É possível verificar os níveis das empresas grandes e seus respectivos salários em levels.fyi.
Empresas grandes possuem uma forma clara de identificar qual seu nível dentro da organização e quais as expectativas para você subir ao próximo nível, mas existem 2 pontos aqui:
- Empresas que não são de TI ou empresas menores terão pouco ou nenhum guia de carreira e você precisará se basear no mercado.
- Muitas das empresas que possuem estes planos definidos focam em sua organização e nem sempre estão conectadas ao mercado.
Portanto, é importante examinar o mercado e compreender as progressões de carreira típicas na área de engenharia, a fim de estar pronto não para a empresa que você trabalha hoje, mas para o mercado de trabalho.
Escadas de engenharia
Existem vários frameworks de escadas de engenharia; de maneira geral, eles cobrem itens similares, com mais ou menos detalhes. Essas escadas servem como um roadmap de carreira, ajudando a direcionar a carreira de maneira mais eficiente.
Um eficiente framework é o engineeringladders criado por Jorge Fioranelli, hoje diretor de engenharia na Amazon Web Services (AWS). Este framework é dividido em 7 níveis e 4 papéis: Developer, Tech Lead, Technical Program Manager e Enginnering Manager. Cada nível é formado por um pentágono com os vértices, com 5 níveis cada um. Desta forma é possível identificar, de maneira visual, quais os vértices são importantes investir para seguir ao próximo nível e quais níveis requeridos para cada papel. Veja o exemplo do que é esperado do nível 5, sênior, do papel Developer.
- Masters: possui conhecimento muito profundo sobre toda a stack de tecnologia do sistema
- Evolves: evolui a arquitetura para suportar requisitos futuros e define seus SLAs
- Mentors: orienta outros para acelerar o crescimento de suas carreiras e os encoraja a participar
- Adjusts: ajusta os processos da equipe, ouvindo feedbacks e guiando a equipe através das mudanças
- Multiple Teams: causa impacto não apenas em toda a equipe, mas também em outras equipes
É claro que isto não é uma matemática exata, mas ajuda e muito na progressão de carreira. Depois de ler os 7 níveis, identifique onde você se encontra e veja as recomendações para ir ao próximo nível.
Para uma visão mais detalhada com expectativas claras para cada nível e com mais papéis além de Software Enginner, um framework eficiente é do Dropbox. Este framework possui uma maior gama de papéis como engenheiro de qualidade, segurança e até machine learning, cada um com seus respectivos níveis. Para engenharia de software, segue o mesmo padrão de 7 níveis. Aqui vais encontrar o que é esperado de cada nível desde impacto, tomadas de decisão, colaboração até fluência no código.
Depois de identificar qual o seu nível dentro destes frameworks, você pode verificar o que é esperado do nível seguinte e então definir um caminho claro de para onde ir.
Salário e mercado
As 3 questões fundamentais:
- O que constitui o salário para o mercado?
- Como definir o salário ideal para mim alinhado com mercado?
- Quais são as formas mais comuns de aumento salarial?
Especialização e certificações
As 3 questões fundamentais:
- Quais são as formas mais comuns de especializações?
- Porque me especializar?
- Vale a pena investir em certificações?
Comunicação e softskills
As 3 questões fundamentais:
- Quais são as softskills mais necessárias para a área de engenharia de software?
- Como desenvolver estas softskills?
- No que consiste desenvolver a habilidade de comunicação?
Preparação para entrevistas
As 3 questões fundamentais:
- Quais tipos de entrevistas geralmente são feitas?
- O que fazer para se preparar para uma entrevista?
- Quais os principais pontos durante uma entrevista?