6.1 Carreira
Os próprios programadores também têm graduações dependendo da qualificação. Antigamente usavam-se termos como "coder", "programador" e "hacker", mas agora todos adotaram nomes do mercado de TI americano.
Para desenvolvedores, existem 6 graduações principais:
- Intern Software Engineer
- Junior Software Engineer
- Middle Software Engineer
- Senior Software Engineer
- Tech Lead
- Principal Software Engineer
De país para país, alguns parâmetros podem diferir, mas a ideia é basicamente essa:
Intern Software Engineer — são os estagiários. Estão no processo de aprendizado de programação, não têm experiência comercial nem participação em grandes projetos. Geralmente trabalham sob supervisão de colegas mais experientes. Sua principal tarefa no trabalho é estudar o código base e os fundamentos do desenvolvimento de software, realizando tarefas simples de codificação e participando de testes.
Junior Software Engineer — já são programadores, mas sem experiência comercial significativa ou com menos de um ano de experiência. Trabalham sob a orientação de desenvolvedores mais experientes, implementando partes de projetos e participando de ciclos de code review. Este estágio da carreira é focado no aprofundamento das habilidades técnicas e na compreensão das tarefas do projeto.
Middle Software Engineer (ou simplesmente Software Engineer): têm mais autonomia na tomada de decisões técnicas, são responsáveis por partes significativas do projeto, começam a mentorar colegas menos experientes e participam ativamente de discussões de arquitetura. Normalmente têm 2–5 anos de experiência prática.
Senior Software Engineer: são responsáveis pelo design e implementação de sistemas complexos, fornecem mentoria e liderança dentro da equipe, participam do planejamento estratégico dos projetos e frequentemente representam a equipe na comunicação com clientes e outras partes interessadas. Normalmente têm 5–10 anos de experiência.
TechLead: como líder técnico, é responsável pelo resultado técnico final do projeto, lidera o desenvolvimento, resolve os problemas mais complexos, garante a conformidade com os padrões técnicos e coordena as atividades dos desenvolvedores.
Principal Software Engineer: trabalha no nível técnico mais alto, frequentemente participando da formulação da estratégia técnica da empresa, desenvolvimento de soluções inovadoras e estabelecimento de padrões técnicos, atua como principal mentor para líderes técnicos e é o especialista principal em questões técnicas complexas.
Grandes empresas podem ter papéis adicionais e subpapéis. Por exemplo, no Google existem esses papéis:
- Staff Software Engineer (L6): tem influência significativa na política técnica de seu departamento.
- Senior Staff Software Engineer (L7): trabalha em projetos de grande escala e complexidade, define a direção estratégica do desenvolvimento tecnológico na empresa.
6.2 Produtos Lego
Há muito tempo (em 1975), Niklaus Wirth, criador da linguagem Pascal, escreveu um livro chamado "Algoritmos + Estruturas de Dados = Programas". Desde então, muita coisa mudou.
Um produto de software moderno não é mais o que era há 10 anos, e com certeza não é o que era há 20 anos. Sobre 1975, nem se fala: já se passaram 50 anos desde então.
Um programador moderno não escreve mais programas manualmente. Ele mais monta a partir de partes prontas (bibliotecas) e escreve o código que ajuda essas partes a interagirem.
Produtos de software modernos podem consistir em dezenas ou centenas de programas, alguns dos quais são executados no computador do usuário ou em seus dispositivos móveis, enquanto a maior parte roda em servidores de data centers.
Muitos desses programas, como servidores web ou bancos de dados, já estão escritos. Precisam ser apenas corretamente configurados, para que funcionem como deveriam. Embora, com o tempo, o processo de configuração possa se tornar tão complexo que praticamente se transforma em desenvolvimento. 🤦♂️
Os programadores estão constantemente lutando consigo mesmos. Ao invés de escrever código semelhante em diferentes programas, eles escrevem bibliotecas que podem ser configuradas para suas necessidades e simplesmente as conectam em todos os lugares necessários.
Nos últimos 20 anos, os programadores escreveram muitas bibliotecas, frameworks e repositórios abertos. São realmente milhões. E agora escrever todo o código do zero é considerado algo de mau gosto. Em vez disso, você deve montar o programa a partir de soluções de qualidade e comprovadas — bibliotecas, frameworks, pacotes e módulos.
Mas até essa abordagem já está se tornando obsoleta. A tendência dos últimos 10 anos é migrar para a nuvem — grandes data centers que oferecem tudo o que seus programas precisam. Quer um banco de dados? Temos centenas à disposição. Quer um servidor web raro e único? Eu tenho. Qualquer capricho pelo seu dinheiro.
6.3 "Eu sou engenheiro" (c) Elon Musk
Não há mais necessidade de escrever coisas complicadas e entediantes. Agora, se você precisar de uma funcionalidade complexa e legal, sempre há uma biblioteca para isso. Você só precisa: a) saber que ela existe, b) encontrar a certa (podem haver dezenas de análogos de diferentes qualidades), c) entender como integrá-la em seu projeto.
O trabalho com essa abordagem ficou ainda mais interessante. Agora você pode adicionar nova funcionalidade ao produto 10 vezes mais rápido. 30 anos atrás, se você precisava de um servidor web, tinha que escrevê-lo. 20 anos atrás — comprar, instalar e configurar. Agora — basta acessar o painel de controle da "nuvem" e ligar.
Isso, aliás, é uma das razões da popularidade do Frontend. O backend complexo agora pode ser escrito em JavaScript com Node.js, ou simplesmente "ligar" vários serviços em data centers na nuvem. O Frontend deixou de depender fortemente das restrições do backend e se desenvolveu plenamente. E a julgar por sua popularidade, ele cumpre muito bem seu papel.
E a própria profissão de desenvolvedor Frontend se transformou em Frontend Fullstack Software Engineer. O desenvolvedor Frontend moderno deve entender como funciona um banco de dados para lidar bem com ele. Entender HTML & JavaScript, NginX para configurar o funcionamento do frontend com o backend. E Docker é necessário — agora é apenas um padrão da indústria.
O desenvolvimento moderno em geral se parece pouco com o que era há 20 anos. O programador moderno escreve código não mais do que 50% do seu tempo. O resto do tempo ele passa lendo documentação, estudando novas tecnologias e participando de reuniões. Programadores solitários ficaram no passado.
GO TO FULL VERSION