A Carreira de Desenvolvedor: Do Jr ao
Sênior
Workshop de Informática - IFSC - Canoinhas
Marcos Pereira
Ciência da Computação pela Universidade
Federal de Alagoas
Mercado de trabalho desde 2009 (Alagoas, São
Paulo, Rio de Janeiro, Santa Catarina)
Engenheiro de Software Sênior na Agriness
(Florianópolis/SC)
marcospereira.mpj@gmail.com
marcos.pereira@agriness.com
http://marcospereirajr.com.br
https://github.com/marcospereirampj
A Carreira de Desenvolvedor: Do Jr ao Sênior
O que veremos?
• O papel do desenvolvedor
• O que o mercado atual espera do
desenvolvedor
• Como o mercado atual classifica a
experiência desse profissional
• Por onde começar
O que não veremos?
• Fórmulas de como ser um bom profissional
• Definições de quais são as melhores
tecnologias
• O quer fazer na sua vida profissional
Qual o papel do desenvolvedor de software?
Desenvolvedor de Software
Desenvolver:
Adiantar, aumentar, melhorar,
aperfeiçoar, fazer progredir.
Desenvolvedor de Software
Compreender Construir Testar Implantar
Em todas as etapas, o
desenvolvedor nunca está só!
Desenvolvedor != Programador
Desenvolvedor
Analista de
Requisitos
Engenheiro,
Analista e/ou
Arquiteto
Analista de
Testes ou QA
Analista de
Infraestrutura
Desenvolvedor de Software
Compreender Construir Testar Implantar
Desenvolvedor
Desenvolvedor de Software
Analista de Requisitos
Engenheiro, Analista
e/ou Arquiteto
Analista de Testes ou
QA
Analista de
Infraestrutura
Elabora a documentação
técnica de especificação
de requisitos de softwares
e status report para
gestão de projetos.
Elaborar arquitetura
executável que suporte os
requisitos não-funcionais
de um sistema bem como
os requisitos funcionais
mais críticos.
Realizar a análise do
sistema, do ponto de vista
dos testes, a fim de
modelar e elaborar os
casos de testes.
Presta suporte e
manutenção de servidores
e data center, planeja
capacidade e desenvolve
projetos de melhorias dos
serviços corporativos.
Essas não são responsabilidade do desenvolvedor, mas ele deve saber
fazer e auxiliar quem faz.
Onde estamos?
1. Tente listar as atividades que você, como desenvolvedor, realiza
(trabalho ou projetos acadêmicos).
• Você participa de atividades de levantamento de requisitos?
• Você ajuda a definir a arquitetura da solução e as tecnologias
que serão utilizadas?
• Você ajuda a definir quais testes devem ser implementados e
qual o mínimo aceitável para garantir qualidade?
• Você ajuda a disponibilizar soluções desenvolvidas nos
ambiente finais?
O mercado de trabalho e experiência do
profissional
Experiência do Desenvolvedor
Tempo de Trabalho
Conhecimento (Stack)
X
Experiência do Desenvolvedor
Tempo de Trabalho Conhecimento (Stack)
• Trainee (até 2 anos)
• Junior ( 2 a 5 anos)
• Pleno (5 a 10 anos)
• Sênior (10 anos a 15 anos)
• Master (a partir de 15 anos)
Isso não uma é regra!!
• DevOps
• Back-end
• Front-end
• Mobile
• Full-stack
Esse é nosso foco!
Experiência do Desenvolvedor
Tempo
Conhecimento (Stack)
Sênior e
Full-stack
Onde estamos?
1. Tente listar as tecnologias que você domina e a quanto tempo
trabalha com ela.
Novos termos: Front-end, Back-end, DevOps…
DevOps
• Passagem de bastão (hand-off) entre desenvolvimento e infraestrutura
• Continuous Integration
• Continuous Delivery
• Automação de Atividades
• Testes automatizados, migração de dados, monitoramento, auditoria, segurança,
desempenho...
Desenvolvedor Front-end
• Relaciona diretamente com
o usuário
• User Interface
• User Experience
• Client-side
Desenvolvedor Back-end
• Regra de Negócio
• Banco de Dados
• Segurança
• REST API
Desenvolvedor Full-stack
Desenvolvedor full-stack é aquele que preenche todos os espaços da pilha:
consegue trabalhar bem com front-end e back-end.
Ser full-stack não significa ter experiência!
Onde estamos?
1. A partir da lista de habilidades que você montou, tente encontrar
onde você se encaixa (back-end, front-end, mobile, devOps, full-
stack).
Por onde começar?
Por onde começar?
• Guia de Desenvolvimento da ThoughtWorks:
• O guia oferece caminhos de aprendizado baseados nas experiências de
profissionais da área.
• Esse guia provê dicas e recursos para auxiliar no desenvolvimento das
habilidades técnicas através de recursos de aprendizagem já existentes.
Por onde começar?
Codificação Padrões Arquitetura Testes e QA Entrega
Entenda o todo processo:
Codificação
• Programe em (pelo menos) uma linguagem de programação orientada a objetos
• Programe em (pelo menos) uma linguagem de programação funcional
• Saiba testar seu código
• Saiba utilizar um sistema de controle de versão
• Conheça sua IDE e/ou editor de texto
• Utilize boas práticas de codificação
• Saiba como refatorar código
Padrões de Código
• Garantir extensibilidade, manutenibilidade, flexibilidade, fácil entendimento e
qualidade.
• Cada linguagem de programação é construída em cima de um paradigma diferente
que, muitas vezes, tenta resolver esse problema de formas distintas.
• Cabe ao desenvolvedor ter conhecimento desses conceitos para o bom uso dessas
ferramentas.
Arquitetura de Software
• Garantir se os requisitos de qualidade estabelecidos (como performance,
escalabilidade, segurança) e restrições impostas ao desenvolvimento (restrições
legais, de plataforma, etc) vão ser cumpridos.
• Todos os sistemas têm uma arquitetura de software, mas nem toda arquitetura é boa
ou sequer adequada ao problema que o sistema tenta resolver.
• Exemplos: 12 factor apps, Clean Architecture, Microserviços, Command-Query
Responsibility Separation (CQRS).
Processos de Desenvolvimento
• Construção do time; comunicação com cliente, usuário ou especialista de negócio;
gerenciamento das filas de tarefas; abordagem para descoberta de funcionalidade;
etc.
• Métodos Ágeis:
• Scrum; Extreme Programming; Dynamic System Development Model (DSDM); Microsoft
Solutions Framework (MSF),...
Testes e Qualidade
• Testes funcionais:
• Testes manuais; Testes automatizados de interface; Testes automatizados de
integração; Testes exploratórios; Testes de regressão; Testes de fumaça.
• Testes não funcionais:
• Testes de performance; Teste de segurança; Teste de usabilidade.
Testes e Qualidade
Testes de Interface
Testes de Integração
Testes Unitários
Testes e Qualidade
• Análise de Código:
• Code review e ”pull request”.
• Ferramentas Automatizadas (Sonarqube, Checkstyle, FindBugs, etc).
• Identificar pequenos problemas:
• Duplicações de código; Comentários desnecessários; Complexidade ciclomática;
Cobertura de testes inexistente.
Continuous Integration e Continuous
Delivery
• Continuous Integration:
• Integrar mudanças no mesmo repositório de forma frequente (várias vezes ao dia);
• Isso permite detectar erros mais rapidamente, aumentando a qualidade e trazendo
mais segurança para fazer uma entrega.
• Continuous Delivery:
• Continuous Delivery é o próximo passo após a Continuous Integration.
• Transformar o que já está integrado em valor para o usuário final.
Continuous Integration e Continuous
Delivery
Por onde começar?
Codificação Padrões Arquitetura Testes e QA Entrega
Ferramentas Amigas
Comunidade
Interaja com a comunidade:
Habilidades
Melhore suas habilidades:
Network
Esteja visível:
Candidate-se
Esteja disponível para empresas:
Empresa
Antes de aceitar, conheça a empresa:
A Carreira de Desenvolvedor: Do Jr ao Sênior
Referências:
• Guia de Desenvolvimento Técnico -
ThoughtWorks Brasil
• O Programador Apaixonado – Chad
Fowler
• The Pragmatic Programmer: From
Journeyman to Master - Andrew
Hunt & David Thomas
Marcos Pereira
marcospereira.mpj@gmail.com
marcos.pereira@agriness.com
http://marcospereirajr.com.br
https://github.com/marcospereirampj

A Carreira de Desenvolvedor: do Jr ao Sênior

  • 1.
    A Carreira deDesenvolvedor: Do Jr ao Sênior Workshop de Informática - IFSC - Canoinhas
  • 2.
    Marcos Pereira Ciência daComputação pela Universidade Federal de Alagoas Mercado de trabalho desde 2009 (Alagoas, São Paulo, Rio de Janeiro, Santa Catarina) Engenheiro de Software Sênior na Agriness (Florianópolis/SC) marcospereira.mpj@gmail.com marcos.pereira@agriness.com http://marcospereirajr.com.br https://github.com/marcospereirampj
  • 3.
    A Carreira deDesenvolvedor: Do Jr ao Sênior O que veremos? • O papel do desenvolvedor • O que o mercado atual espera do desenvolvedor • Como o mercado atual classifica a experiência desse profissional • Por onde começar O que não veremos? • Fórmulas de como ser um bom profissional • Definições de quais são as melhores tecnologias • O quer fazer na sua vida profissional
  • 4.
    Qual o papeldo desenvolvedor de software?
  • 5.
    Desenvolvedor de Software Desenvolver: Adiantar,aumentar, melhorar, aperfeiçoar, fazer progredir.
  • 6.
    Desenvolvedor de Software CompreenderConstruir Testar Implantar Em todas as etapas, o desenvolvedor nunca está só! Desenvolvedor != Programador Desenvolvedor
  • 7.
    Analista de Requisitos Engenheiro, Analista e/ou Arquiteto Analistade Testes ou QA Analista de Infraestrutura Desenvolvedor de Software Compreender Construir Testar Implantar Desenvolvedor
  • 8.
    Desenvolvedor de Software Analistade Requisitos Engenheiro, Analista e/ou Arquiteto Analista de Testes ou QA Analista de Infraestrutura Elabora a documentação técnica de especificação de requisitos de softwares e status report para gestão de projetos. Elaborar arquitetura executável que suporte os requisitos não-funcionais de um sistema bem como os requisitos funcionais mais críticos. Realizar a análise do sistema, do ponto de vista dos testes, a fim de modelar e elaborar os casos de testes. Presta suporte e manutenção de servidores e data center, planeja capacidade e desenvolve projetos de melhorias dos serviços corporativos. Essas não são responsabilidade do desenvolvedor, mas ele deve saber fazer e auxiliar quem faz.
  • 9.
    Onde estamos? 1. Tentelistar as atividades que você, como desenvolvedor, realiza (trabalho ou projetos acadêmicos). • Você participa de atividades de levantamento de requisitos? • Você ajuda a definir a arquitetura da solução e as tecnologias que serão utilizadas? • Você ajuda a definir quais testes devem ser implementados e qual o mínimo aceitável para garantir qualidade? • Você ajuda a disponibilizar soluções desenvolvidas nos ambiente finais?
  • 10.
    O mercado detrabalho e experiência do profissional
  • 11.
    Experiência do Desenvolvedor Tempode Trabalho Conhecimento (Stack) X
  • 12.
    Experiência do Desenvolvedor Tempode Trabalho Conhecimento (Stack) • Trainee (até 2 anos) • Junior ( 2 a 5 anos) • Pleno (5 a 10 anos) • Sênior (10 anos a 15 anos) • Master (a partir de 15 anos) Isso não uma é regra!! • DevOps • Back-end • Front-end • Mobile • Full-stack Esse é nosso foco!
  • 13.
  • 14.
    Onde estamos? 1. Tentelistar as tecnologias que você domina e a quanto tempo trabalha com ela.
  • 15.
    Novos termos: Front-end,Back-end, DevOps…
  • 16.
    DevOps • Passagem debastão (hand-off) entre desenvolvimento e infraestrutura • Continuous Integration • Continuous Delivery • Automação de Atividades • Testes automatizados, migração de dados, monitoramento, auditoria, segurança, desempenho...
  • 17.
    Desenvolvedor Front-end • Relacionadiretamente com o usuário • User Interface • User Experience • Client-side
  • 18.
    Desenvolvedor Back-end • Regrade Negócio • Banco de Dados • Segurança • REST API
  • 19.
    Desenvolvedor Full-stack Desenvolvedor full-stacké aquele que preenche todos os espaços da pilha: consegue trabalhar bem com front-end e back-end. Ser full-stack não significa ter experiência!
  • 20.
    Onde estamos? 1. Apartir da lista de habilidades que você montou, tente encontrar onde você se encaixa (back-end, front-end, mobile, devOps, full- stack).
  • 22.
  • 23.
    Por onde começar? •Guia de Desenvolvimento da ThoughtWorks: • O guia oferece caminhos de aprendizado baseados nas experiências de profissionais da área. • Esse guia provê dicas e recursos para auxiliar no desenvolvimento das habilidades técnicas através de recursos de aprendizagem já existentes.
  • 24.
    Por onde começar? CodificaçãoPadrões Arquitetura Testes e QA Entrega Entenda o todo processo:
  • 25.
    Codificação • Programe em(pelo menos) uma linguagem de programação orientada a objetos • Programe em (pelo menos) uma linguagem de programação funcional • Saiba testar seu código • Saiba utilizar um sistema de controle de versão • Conheça sua IDE e/ou editor de texto • Utilize boas práticas de codificação • Saiba como refatorar código
  • 26.
    Padrões de Código •Garantir extensibilidade, manutenibilidade, flexibilidade, fácil entendimento e qualidade. • Cada linguagem de programação é construída em cima de um paradigma diferente que, muitas vezes, tenta resolver esse problema de formas distintas. • Cabe ao desenvolvedor ter conhecimento desses conceitos para o bom uso dessas ferramentas.
  • 27.
    Arquitetura de Software •Garantir se os requisitos de qualidade estabelecidos (como performance, escalabilidade, segurança) e restrições impostas ao desenvolvimento (restrições legais, de plataforma, etc) vão ser cumpridos. • Todos os sistemas têm uma arquitetura de software, mas nem toda arquitetura é boa ou sequer adequada ao problema que o sistema tenta resolver. • Exemplos: 12 factor apps, Clean Architecture, Microserviços, Command-Query Responsibility Separation (CQRS).
  • 28.
    Processos de Desenvolvimento •Construção do time; comunicação com cliente, usuário ou especialista de negócio; gerenciamento das filas de tarefas; abordagem para descoberta de funcionalidade; etc. • Métodos Ágeis: • Scrum; Extreme Programming; Dynamic System Development Model (DSDM); Microsoft Solutions Framework (MSF),...
  • 29.
    Testes e Qualidade •Testes funcionais: • Testes manuais; Testes automatizados de interface; Testes automatizados de integração; Testes exploratórios; Testes de regressão; Testes de fumaça. • Testes não funcionais: • Testes de performance; Teste de segurança; Teste de usabilidade.
  • 30.
    Testes e Qualidade Testesde Interface Testes de Integração Testes Unitários
  • 31.
    Testes e Qualidade •Análise de Código: • Code review e ”pull request”. • Ferramentas Automatizadas (Sonarqube, Checkstyle, FindBugs, etc). • Identificar pequenos problemas: • Duplicações de código; Comentários desnecessários; Complexidade ciclomática; Cobertura de testes inexistente.
  • 32.
    Continuous Integration eContinuous Delivery • Continuous Integration: • Integrar mudanças no mesmo repositório de forma frequente (várias vezes ao dia); • Isso permite detectar erros mais rapidamente, aumentando a qualidade e trazendo mais segurança para fazer uma entrega. • Continuous Delivery: • Continuous Delivery é o próximo passo após a Continuous Integration. • Transformar o que já está integrado em valor para o usuário final.
  • 33.
    Continuous Integration eContinuous Delivery
  • 34.
    Por onde começar? CodificaçãoPadrões Arquitetura Testes e QA Entrega
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
    Empresa Antes de aceitar,conheça a empresa:
  • 41.
    A Carreira deDesenvolvedor: Do Jr ao Sênior Referências: • Guia de Desenvolvimento Técnico - ThoughtWorks Brasil • O Programador Apaixonado – Chad Fowler • The Pragmatic Programmer: From Journeyman to Master - Andrew Hunt & David Thomas Marcos Pereira marcospereira.mpj@gmail.com marcos.pereira@agriness.com http://marcospereirajr.com.br https://github.com/marcospereirampj