6.1 Carreira
Programadores também têm classificações de acordo com a qualificação. Antigamente, usavam termos como "coder", "programador" e "hacker", mas agora todo mundo usa os nomes em inglês do TI americano.
Para o desenvolvedor, existem 6 principais classificações:
- Intern Software Engineer
- Junior Software Engineer
- Middle Software Engineer
- Senior Software Engineer
- TechLead
- Principal Software Engineer
De país para país e até mesmo de empresa para empresa alguns parâmetros podem variar, mas a ideia é a seguinte:
Intern Software Engineer — são os estagiários. Eles estão no processo de aprendizado da programação, não têm experiência comercial nem experiência em grandes projetos. Normalmente trabalham sob a supervisão de colegas mais experientes. A principal tarefa deles no trabalho — explorar a base de código e fundamentos de desenvolvimento de software, realizando tarefas simples de codificação e participando de testes.
Junior Software Engineer — já são programadores, mas sem muita experiência comercial ou com menos de um ano de experiência. Trabalham sob a orientação de desenvolvedores mais experientes, implementando partes de projetos e participando em ciclos de code review. Essa fase da carreira se concentra em aprofundar habilidades técnicas e entender as demandas dos projetos.
Middle Software Engineer (ou apenas Software Engineer): têm mais autonomia para tomar decisões técnicas, são responsáveis por partes significativas do projeto, começam a orientar colegas menos experientes e participam ativamente nas discussões de arquitetura. Geralmente têm de 2 a 5 anos de experiência prática.
Senior Software Engineer: são responsáveis pelo design e implementação de sistemas complexos, oferecem mentoria e liderança dentro da equipe, participam do planejamento estratégico dos projetos e muitas vezes representam a equipe em reuniões com clientes e outras partes interessadas. Normalmente têm de 5 a 10 anos de experiência.
TechLead: é responsável pelo resultado técnico final do projeto, lidera o desenvolvimento, resolve as tarefas mais complexas, garante a conformidade com os padrões técnicos e coordena as atividades dos desenvolvedores.
Principal Software Engineer: trabalha no mais alto nível técnico, muitas vezes participa da formação da estratégia técnica da empresa, desenvolvimento de soluções inovadoras e estabelecimento de padrões técnicos, serve como principal mentor para líderes técnicos e é o especialista chave em questões técnicas complexas.
Isto é interessante. Em grandes empresas, podem haver papéis e subpapéis adicionais. Por exemplo, no Google existem papéis como:
- Staff Software Engineer (L6): tem influência significativa na política técnica do seu departamento.
- Senior Staff Software Engineer (L7): trabalha em projetos escaláveis e complexos, define a direção estratégica do desenvolvimento tecnológico na empresa.
6.2 Produtos Lego
Houve um tempo (em 1975) que Niklaus Wirth, criador da linguagem Pascal, escreveu um livro "Algoritmos + Estruturas de Dados = Programas". Desde então muita coisa mudou.
O produto de software moderno não é o que era 10 anos atrás, e muito menos o que foi há 20 anos. Sobre 1975 nem vale a pena comentar — já se passaram 50 anos desde então.
O programador moderno não escreve mais programas manualmente. Ele basicamente os monta a partir de partes prontas (bibliotecas) e escreve código que ajuda essas partes a interagirem.
Os produtos de software modernos podem consistir em dezenas e centenas de programas. Alguns deles rodam no computador do usuário, seus dispositivos móveis, enquanto a maioria roda em servidores nos data centers.
Muitos desses programas, como o servidor web ou o banco de dados, já estão escritos. Eles só precisam ser configurados corretamente, para que funcionem da maneira certa. Embora ao longo do tempo o processo de configuração possa se tornar tão complexo que acaba se transformando em desenvolvimento. (*facepalm*)
Programadores estão sempre lutando consigo mesmos. Em vez de escrever código similar novamente em diferentes programas, eles escrevem bibliotecas que podem ser configuradas (ajustadas) para suas necessidades, e depois simplesmente as conectam a todos os lugares necessários.
Nos últimos 20 anos, programadores escreveram muitas bibliotecas, frameworks e repositórios abertos. São literalmente milhões. E agora, escrever todo o código do zero é considerado um mau hábito. Em vez disso, é preciso montar o programa a partir de soluções de qualidade e comprovadas — bibliotecas, frameworks, pacotes e módulos.
Mas essa abordagem também já está ficando obsoleta. A tendência dos últimos 10 anos tem sido migrar para a nuvem, grandes data centers que fornecem tudo que seus programas precisam. Quer um banco de dados? Temos centenas à escolha. Quer um servidor web raro e único? Temos também! Qualquer capricho por seu dinheiro.
6.3 "Eu sou um Engenheiro" © Elon Musk
Não é mais necessário escrever coisas complicadas e chatas. Se você precisa de alguma funcionalidade complicada e bacana, já existe 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 novas funcionalidades ao produto 10 vezes mais rápido. Há 30 anos, se você precisava de um servidor web, precisava escrevê-lo. Há 20 anos — comprá-lo, instalá-lo e configurá-lo. Agora — basta entrar no painel de administração "da nuvem" e ativá-lo.
Isso, aliás, é uma das razões da popularidade da linguagem Python. Ela é muito adequada não para escrever grandes e complexas soluções, mas sim para "juntar" diferentes partes. E, a julgar por sua popularidade, ela faz isso muito bem.
Além disso, a profissão de desenvolvedor Python se transformou em Python Fullstack Software Engineer. O desenvolvedor Python moderno deve entender como funciona um banco de dados para trabalhar bem com ele. Entender HTML & JavaScript para configurar o trabalho do frontend com o backend em Python. E Docker é necessário — agora é o padrão da indústria.
O desenvolvimento moderno em geral é bem diferente do que era há 20 anos. O programador moderno escreve código em não mais que 50% do seu tempo. Todo o tempo restante ele lê documentações, estuda novas tecnologias e participa de reuniões. Programadores solitários ficaram no passado distante.
GO TO FULL VERSION