CodeGym /Cursos /C++ SELF /Caminho do Programador

Caminho do Programador

C++ SELF
Nível 7, Lição 6
Disponível

Caminho do Programador

1. Escada de carreira

Programadores também têm gradações dependendo da qualificação. Antigamente eram usados termos como “coder”, “programmer” e “hacker”, mas hoje em dia todos adotaram as designações em inglês do mercado de TI americano.

Para o desenvolvedor existem 6 principais gradaçõ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é de empresa para empresa alguns parâmetros podem variar, mas a ideia é aproximadamente a seguinte:

🌱 Intern Software Engineer — são estagiários. Estão em processo de aprendizado de programação, não possuem experiência comercial nem participação em grandes projetos. Normalmente trabalham sob supervisão de colegas mais experientes. A principal tarefa deles é estudar a base de código e os fundamentos do desenvolvimento de software, realizando tarefas simples de codificação e participando de testes.

🐣 Junior Software Engineer — já são desenvolvedores, mas sem experiência comercial substancial ou com menos de um ano de experiência. Trabalham sob orientação de desenvolvedores mais experientes, implementando partes de projetos e participando de ciclos de code review. Esta fase da carreira foca em aprofundar habilidades técnicas e o entendimento 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 orientar colegas menos experientes e participam mais ativamente das discussões de arquitetura. Normalmente 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, fornecem mentoria e liderança dentro do time, participam do planejamento estratégico dos projetos e frequentemente representam o time em interaçõ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 os problemas mais difíceis, garante a conformidade com padrões técnicos e coordena as atividades dos desenvolvedores.

🏆 Principal Software Engineer: atua no mais alto nível técnico, frequentemente participa da formulação da estratégia técnica da empresa, do desenvolvimento de soluções inovadoras e do estabelecimento de padrões técnicos, serve como mentor principal para líderes técnicos e é um especialista-chave em questões técnicas complexas.

Isto é interessante. Grandes empresas podem ter 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 de sua área.
  • Senior Staff Software Engineer (L7): trabalha em projetos de grande escala e complexidade, definindo a direção estratégica do desenvolvimento tecnológico na empresa.

2. Produtos tipo Lego

Há muito tempo (em 1975) Niklaus Wirth, criador da linguagem Pascal, escreveu o livro “Algoritmos + Estruturas de Dados = Programas”. Desde então muita coisa mudou. O produto de software moderno não é o que era há 10 anos, e certamente não é o que era há 20 anos. Sobre 1975 nem vale a pena falar — já se passaram 50 anos ⏳

Hoje em dia o programador não escreve programas manualmente. Ele tende a montá-los a partir de partes prontas (bibliotecas) e escreve código que ajuda essas partes a interagir🧩. Produtos modernos podem consistir de dezenas e centenas de programas. Alguns deles rodam no computador do usuário, em seus dispositivos móveis, e a maior parte roda em servidores em data centers.

Muitos desses programas, como servidores web ou bancos de dados, já estão escritos. Basta configurá-los corretamente para que funcionem como esperado. Embora com o tempo o processo de configuração possa se tornar tão complexo que, na prática, vira desenvolvimento. 🤦‍♂️

Desenvolvedores constantemente lutam contra a repetição. Em vez de reescrever código semelhante em vários programas, eles criam bibliotecas configuráveis e então as conectam onde necessário.

Nos últimos 20 anos foram escritas muitíssimas bibliotecas, frameworks e repositórios open source. Existem milhões deles. Hoje em dia escrever todo o código do zero é mal visto. Em vez disso, deve-se montar um programa a partir de soluções testadas e de qualidade — bibliotecas, frameworks, packages e módulos 🧱

Mas essa abordagem também está envelhecendo. A tendência dos últimos 10 anos é a migração para a nuvem, grandes data centers que fornecem às suas aplicações tudo o que precisam. Quer um banco de dados? Temos centenas à disposição. Quer um servidor web raro e específico — também existe! Tudo depende do orçamento.

3. “Eu sou engenheiro” © Elon Musk

img

Não é mais necessário escrever coisas complexas e entediantes do zero. Se você precisa de alguma funcionalidade — já existem bibliotecas e frameworks prontos. Sua tarefa: a) saber que eles existem, b) encontrar a opção adequada (frequentemente há vários análogos com qualidade e nuances diferentes), c) entender como integrá-los ao seu projeto 🎓

O trabalho ficou mais interessante. Agora você pode adicionar funcionalidade ao produto 10 vezes mais rápido. Há 30 anos, se você precisava de um servidor web, você o escrevia do zero. Há 20 anos — comprava, instalava e configurava. Hoje — basta entrar no portal da nuvem Azure ou AWS e habilitar o serviço necessário 🌐

A propósito, essa é uma das razões da popularidade da linguagem C++. Ela é perfeitamente adequada para tarefas onde o desempenho é crítico: programação de sistemas, desenvolvimento de jogos, sistemas embarcados e serviços de alta carga. Ao mesmo tempo, C++ possui um rico ecossistema de bibliotecas e ferramentas — existem soluções prontas para trabalhar com redes, bancos de dados, gráficos, computação paralela e muito mais.

Consequentemente, a profissão de C++ Software Engineer ao longo do tempo passou a abranger um stack cada vez mais amplo. É importante para um desenvolvedor moderno entender como funciona um banco de dados para construir corretamente a interação com ele. É necessário ter noções sobre a arquitetura de sistemas distribuídos e comunicação de rede. E, claro, hoje em dia não se vai a lugar nenhum sem o Docker — a conteinerização há muito se tornou um padrão da indústria 🐳.

O desenvolvimento moderno difere muito do que era há 20 anos. O programador escreve código menos de 50% do tempo — o restante vai para leitura de documentação, estudo de novas tecnologias, design e trabalho em equipe em reuniões. Desenvolvedores solo já são mais a exceção do que a regra.

Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION