SlideShare une entreprise Scribd logo
1  sur  79
Télécharger pour lire hors ligne
Se tornando um
Desenvolvedor Java
“NINJA”
13 de Setembro de 2017
UM POUCO
+
SOBRE OS
PALESTRANTES
Cesar A. Nogueira
• Engenheiro de Software na Indra;
• Trabalhou em grandes empresas como
Instituto de Pesquisas Eldorado,
IBM (USA), Fundação CPqD
trabalhando diretamente com Java e suas tecnologias;
• Atual organizador do @SouJavaCampinas;
@cesarnogcps
26 anos
Hivison do Nascimento Moura
• Analista de sistemas na Matera;
• Trabalhou em grandes empresas como CPFL e Indra
• Trabalha diretamente com Java e suas tecnologias;
• Membro do @SouJavaCampinas;
@hivison_moura
25 anos
ATENÇÃO
http://tiny.cc/AndroidQR http://tiny.cc/AppleQR
ESTA APRESENTAÇÃO
É DINÂMICA
E INCLUI VÁRIOS
QR CODES
• Boas práticas de codificação em Java
• Exemplo de diferenças entre String e StringBuffer (Cesar)
• Exemplo Garbage Collector (Hivison)
• Open-Source Java para futuros desenvolvedores NINJAS
• Iniciativas Adopt-a-JSR e OpenJDK
• Como um NINJA se destaca em uma comunidade Java
• 5 dicas de como ser tornar um desenvolvedor Java NINJA
• O que são JUGs e como fazer parte de um grupo NINJA de Java
Agenda
http://tiny.cc/ieeeJava
Spectrum IEEE | Jobs em 18/07/2017
Boas práticas
de codificação em Java
Strings são IMUTÁVEIS
Então você se pergunta
se Strings são imutáveis,
então porque eu consigo concatenar
vários valores a uma String, tornando-a
diferente da original?
Você está criando um novo objeto em memória!
Cada vez que você acha que está
concatenando uma String com
outra, você está criando diversos
objetos distintos em memória, e
as Strings “antigas” perdem
referência, mas continuam lá.
public class ConcatenaString {
public static void main (String[] args){
//Cria um objeto em memória
String str = "hello";
/*
* Sabemos que nossa string agora será: "hello world".
*
* Ocorre que é criada a String "world" em memória,
* depois a JVM cria um outro objeto "hello world".
* No total vão ser 3 objetos para que essa 'concatenação'
* ocorra.
* */
str = str.concat(" world");
/*
* O mesmo conceito é aplicado acima. É criada uma string
* "from java" em memória, depois é criada uma
* nova juntando "hello world from java".
* No total temos agora 5 objetos em memória,
* sendo que apenas 1 estamos utilizando,
* veja que desperdício.
* */
str += " from Java";
}
}
StringBuilder vs String
“A performance do StringBuilder
em detrimento do String comum é
exponencialmente melhor quando
precisamos concatenar valores.”
Exemplo rodando em:
https://is.gd/KnVUuV
Evite code smells no dia a dia
SOLID Principles
São chamados de SOLID após a popularização dos mesmos por meio do
Uncle Bob (os 5 princípios fazem parte do famoso livro “Agile Principles, Patterns and Practices”).
Por que CINCO princípios?
É um acrônimo – onde cada letra corresponde a um princípio:
[S]ingle Responsability Principle
[O]pen/Closed Principle
[L]iskov Substitution Principle
[I]nterface Segregation Principle
[D]ependency Inversion Principle
SRP, ou Princípio da Responsabilidade Única
Este princípio nada mais é do que uma perspectiva diferente para um dos mais fundamentais
princípios da orientação a objetos: a coesão.
Sua definição diz que: “Uma classe deve ter somente uma razão para mudar”.
O SRP é um dos princípios mais importantes que existe
na orientação a objetos. Lembrando-se dele, você
poderá projetar classes menores, mais coesas e de
mais fácil entendimento.
Legibilidade
• Nomes claros
• Nomes que revelem seu propósito
• Nomes pronunciáveis
• Nomes passíveis de busca
Leitura do Código
BigDecimal valor = BigDecimal.ZERO;
for(Conta x : lista) {
for(ItemConta y : x.getItens()) {
if (y.getValor() != null) {
valor = valor.add(y.getValor());
}
}
BigDecimal media =
valor.divide(BigDecimal.valueOf(lista.size()));
Leitura do Código
BigDecimal valorTotal = BigDecimal.ZERO;
for(Conta conta : contas) {
for(ItemConta itemConta : conta.getItens()) {
if (itemConta.getValor() != null) {
valorTotal = valorTotal.add(itemConta.getValor());
}
}
BigDecimal quantidadeDeContas =
valor.divide(BigDecimal.valueOf(contas.size()));
BigDecimal media = valor.divide(quantidadeDeContas);
Extraindo em Métodos
Tamanho de Código
Divida em mais classes!
Duplicação de Código
Duplicação de Código
Duplicação de Código
Excesso de Complexidade
Excesso de Complexidade
Excesso de Complexidade
Principio de Aberto / Fechado
Nível de Método
Nível de Método
Outros…
Ferramentas
Dashboard Sonar
Usando o SONAR
“VOCÊ SEMPRE DEVE DEIXAR O LUGAR MAIS
LIMPO DO QUE ENCONTROU”
Open-Source Java para
futuros desenvolvedores
NINJAS
• Importante iniciativa para os Devs
NINJAS aprimorarem os padrões da linguagem Java;
• Grupos globais de membros de JUGs trabalham em JSRs;
• Receba olhares de empresas de tecnologia locais que procuram NINJAS;
• Te ajuda a ser tornar um profissional NINJA, que ajuda seu grupo local;
• Atraia mais desenvolvedores NINJAS para sua comunidade;
Adopt-a-JSR
Mas o que é essa tal de JSR?
• Java Specification Requests (JSRs)
são descrições reais de especificações propostas para a plataforma Java.
• Existem inúmeras JSRs que são criadas a todo momento e são discutidas
pela comunidade, através do processo de análise e aprovação.
• Comunidade de desenvolvimento das especificações da tecnologia Java
O Java Community Process (JCP) convida TODOS a moldar as
especificações Java através do programa Adopt-a-JSR,
ENCORAJANDO a comunidade global de Java a se envolver
com as Java Specification Requests (JSRs).
Como você,
dev NINJA pode então moldar
o Java NESTE MOMENTO?
JUG: O que é e como participar de um??
365 Grupos de Usuários Java no mundo
~ 894.000 membros
Existem em 88 Países
O Brasil está em 2º lugar no ranking de membros,
estando na frente da Alemanha que está em 3º lugar
Brazil 7 x 1 Alemanha ??
5 dicas para carreira
que ajudará você a se tornar
um desenvolvedor Java NINJA
1. Contribua sempre que possível
2. Dev Ninja, precisa estudar!
Há sempre novidades no mundo
Java
3. Compartilhe conhecimento
por onde for!
“Ninguém é tão sábio suficiente que não tenha algo a aprender.
DEVs NINJAs sempre estão aprendendo algo novo.”
4. Seja presente online,
tenha Twitter, LinkedIn, Github...
5. Entre para a comunidade
Java de sua cidade ou região!
CERTIFICAÇÕES JAVA
VALE A PENA TER UMA?
Ser certificado te
torna um bom
profissional?
Não!
Ter uma
certificação é
importante?
Sim!
Java Programming and Application Development
Java Enterprise Application Development
Java EE 6
Java Enterprise Architecture
Entre para a Comunidade Java Brasileira em total
crescimento> JavaDevBR no Slack
http://tiny.cc/javadevbr
Garbage Collector
• O que é o garbage collector ?
• Qual a sua importância ?
• Como funciona ?
Garbage Collector
• O que é o garbage collector ?
• Qual a sua importância ?
• Como funciona ?
Garbage Collector
• O que é o garbage collector ?
• Qual a sua importância ?
• Como funciona ?
Garbage Collector
• O que é o garbage collector ?
• Qual a sua importância ?
• Como funciona ?
Garbage Collector
• O que é o garbage collector ?
• Qual a sua importância ?
• Como funciona ?
Garbage Collector
• O que é o garbage collector ?
• Qual a sua importância ?
• Como funciona ?
Garbage Collector
• Como funciona ?
Garbage Collector
• Como funciona ?
Garbage Collector
Faça parte do
SouJava Campinas
meetup.com/
SouJavaCampinas
NoTwitter:@soujavacampinas
Obrigado e bons códigos em Java
@cesarnogcps | @hivison_moura
SouJava Campinas JUG
para todos nós,
desenvolvedores NINJA

Contenu connexe

Similaire à "Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas 2017

Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerCriando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerGiovanni Kenji Shiroma
 
Aula 1 - Introdução a linguagem JAVA SE
Aula 1 - Introdução a linguagem JAVA SEAula 1 - Introdução a linguagem JAVA SE
Aula 1 - Introdução a linguagem JAVA SEEvandro Júnior
 
Carreira de Desenvolvimento
Carreira de DesenvolvimentoCarreira de Desenvolvimento
Carreira de DesenvolvimentoAlvaro Viebrantz
 
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014Gilmar PSL
 
Projeto de API, por Gilmar P.S
Projeto de API, por Gilmar P.SProjeto de API, por Gilmar P.S
Projeto de API, por Gilmar P.SThoughtworks
 
Revolucao Agile - UFSCar
Revolucao Agile - UFSCarRevolucao Agile - UFSCar
Revolucao Agile - UFSCarLuiz Ribeiro
 
Tdc2015 bigdata-mpias-final-pdf
Tdc2015 bigdata-mpias-final-pdfTdc2015 bigdata-mpias-final-pdf
Tdc2015 bigdata-mpias-final-pdfMinistry of Data
 
TDD para "meros mortais"
TDD para "meros mortais"TDD para "meros mortais"
TDD para "meros mortais"thiagobapt
 
O que vi na QCon 2012 São Paulo
O que vi na QCon 2012 São PauloO que vi na QCon 2012 São Paulo
O que vi na QCon 2012 São PauloIsmael
 
DrupalCamp SP 2015 - DevOps, por onde começar? Por Sebastian Ferrari
DrupalCamp SP 2015 - DevOps, por onde começar? Por Sebastian FerrariDrupalCamp SP 2015 - DevOps, por onde começar? Por Sebastian Ferrari
DrupalCamp SP 2015 - DevOps, por onde começar? Por Sebastian FerrariTaller Negócio Digitais
 
TDD: A Essência do Mantra
TDD: A Essência do MantraTDD: A Essência do Mantra
TDD: A Essência do MantraDionatan default
 
Clean Code - Boas práticas para desenvolvimento
Clean Code - Boas práticas para desenvolvimentoClean Code - Boas práticas para desenvolvimento
Clean Code - Boas práticas para desenvolvimentoPaulo Henrique da Silva
 
Sistemas para o Mundo Real
Sistemas para o Mundo RealSistemas para o Mundo Real
Sistemas para o Mundo RealLeandro Silva
 
Desenvolvimento Client-Side 2016 (BrazilJS)
Desenvolvimento Client-Side 2016 (BrazilJS)Desenvolvimento Client-Side 2016 (BrazilJS)
Desenvolvimento Client-Side 2016 (BrazilJS)Huge
 

Similaire à "Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas 2017 (20)

Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerCriando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & Docker
 
Aula 1 - Introdução a linguagem JAVA SE
Aula 1 - Introdução a linguagem JAVA SEAula 1 - Introdução a linguagem JAVA SE
Aula 1 - Introdução a linguagem JAVA SE
 
Carreira de Desenvolvimento
Carreira de DesenvolvimentoCarreira de Desenvolvimento
Carreira de Desenvolvimento
 
Mergulhando no ecossistema .NET
Mergulhando no ecossistema .NETMergulhando no ecossistema .NET
Mergulhando no ecossistema .NET
 
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
 
Projeto de API, por Gilmar P.S
Projeto de API, por Gilmar P.SProjeto de API, por Gilmar P.S
Projeto de API, por Gilmar P.S
 
Revolucao Agile - UFSCar
Revolucao Agile - UFSCarRevolucao Agile - UFSCar
Revolucao Agile - UFSCar
 
.NET e C# - Introdução Geral
.NET e C# - Introdução Geral.NET e C# - Introdução Geral
.NET e C# - Introdução Geral
 
Tdc2015 bigdata-mpias-final-pdf
Tdc2015 bigdata-mpias-final-pdfTdc2015 bigdata-mpias-final-pdf
Tdc2015 bigdata-mpias-final-pdf
 
TDD para "meros mortais"
TDD para "meros mortais"TDD para "meros mortais"
TDD para "meros mortais"
 
O que vi na QCon 2012 São Paulo
O que vi na QCon 2012 São PauloO que vi na QCon 2012 São Paulo
O que vi na QCon 2012 São Paulo
 
Conhecendo Java
Conhecendo JavaConhecendo Java
Conhecendo Java
 
DrupalCamp SP 2015 - DevOps, por onde começar? Por Sebastian Ferrari
DrupalCamp SP 2015 - DevOps, por onde começar? Por Sebastian FerrariDrupalCamp SP 2015 - DevOps, por onde começar? Por Sebastian Ferrari
DrupalCamp SP 2015 - DevOps, por onde começar? Por Sebastian Ferrari
 
#Moving br workshop
#Moving br workshop#Moving br workshop
#Moving br workshop
 
TDD: A Essência do Mantra
TDD: A Essência do MantraTDD: A Essência do Mantra
TDD: A Essência do Mantra
 
Debugging node
Debugging nodeDebugging node
Debugging node
 
Clean Code - Boas práticas para desenvolvimento
Clean Code - Boas práticas para desenvolvimentoClean Code - Boas práticas para desenvolvimento
Clean Code - Boas práticas para desenvolvimento
 
Sistemas para o Mundo Real
Sistemas para o Mundo RealSistemas para o Mundo Real
Sistemas para o Mundo Real
 
Desenvolvimento Client-Side 2016 (BrazilJS)
Desenvolvimento Client-Side 2016 (BrazilJS)Desenvolvimento Client-Side 2016 (BrazilJS)
Desenvolvimento Client-Side 2016 (BrazilJS)
 
Por que Java?
Por que Java?Por que Java?
Por que Java?
 

Plus de Cesar Augusto Nogueira

Programa LeadingMyself - Accenture 2021
Programa LeadingMyself - Accenture 2021Programa LeadingMyself - Accenture 2021
Programa LeadingMyself - Accenture 2021Cesar Augusto Nogueira
 
Minando dados de sua cidade para sua comunidade
Minando dados de sua cidade para sua comunidadeMinando dados de sua cidade para sua comunidade
Minando dados de sua cidade para sua comunidadeCesar Augusto Nogueira
 
Se tornando um desenvolvedor Java Ninja - Trilha Java - TDC2017
Se tornando um desenvolvedor Java Ninja - Trilha Java - TDC2017Se tornando um desenvolvedor Java Ninja - Trilha Java - TDC2017
Se tornando um desenvolvedor Java Ninja - Trilha Java - TDC2017Cesar Augusto Nogueira
 
Treinamento: SAP Management 4.0 (Fundamentos em SAP nas principais transações...
Treinamento: SAP Management 4.0 (Fundamentos em SAP nas principais transações...Treinamento: SAP Management 4.0 (Fundamentos em SAP nas principais transações...
Treinamento: SAP Management 4.0 (Fundamentos em SAP nas principais transações...Cesar Augusto Nogueira
 
Palestrante OpenSource Java na Semana de Tecnologia da Informação da UFLA 2016
Palestrante OpenSource Java na Semana de Tecnologia da Informação da UFLA 2016Palestrante OpenSource Java na Semana de Tecnologia da Informação da UFLA 2016
Palestrante OpenSource Java na Semana de Tecnologia da Informação da UFLA 2016Cesar Augusto Nogueira
 
OpenSource Java - Adopt a JDK e OpenJDK
OpenSource Java - Adopt a JDK e OpenJDKOpenSource Java - Adopt a JDK e OpenJDK
OpenSource Java - Adopt a JDK e OpenJDKCesar Augusto Nogueira
 
Android Wear - Workshop por @cesarnogcps
Android Wear - Workshop por @cesarnogcpsAndroid Wear - Workshop por @cesarnogcps
Android Wear - Workshop por @cesarnogcpsCesar Augusto Nogueira
 
Certificado de participação - Trilha Python - The Developers Conference 2016 SP
Certificado de participação - Trilha Python - The Developers Conference 2016 SPCertificado de participação - Trilha Python - The Developers Conference 2016 SP
Certificado de participação - Trilha Python - The Developers Conference 2016 SPCesar Augusto Nogueira
 
Docker e suas tecnologias por @cesarnog
Docker e suas tecnologias por @cesarnogDocker e suas tecnologias por @cesarnog
Docker e suas tecnologias por @cesarnogCesar Augusto Nogueira
 
Certificado de participação no Hackathon Globo 2016 - Cesar A. Nogueira
Certificado de participação no Hackathon Globo 2016 - Cesar A. NogueiraCertificado de participação no Hackathon Globo 2016 - Cesar A. Nogueira
Certificado de participação no Hackathon Globo 2016 - Cesar A. NogueiraCesar Augusto Nogueira
 
Certificado_Python_Brasil_11_Cesar Augusto Nogueira
Certificado_Python_Brasil_11_Cesar Augusto NogueiraCertificado_Python_Brasil_11_Cesar Augusto Nogueira
Certificado_Python_Brasil_11_Cesar Augusto NogueiraCesar Augusto Nogueira
 
First Steps with Android - An Exciting Introduction
First Steps with Android - An Exciting IntroductionFirst Steps with Android - An Exciting Introduction
First Steps with Android - An Exciting IntroductionCesar Augusto Nogueira
 
Brazil Scientific Mobility Program guide 2013/2014
Brazil Scientific Mobility Program guide 2013/2014Brazil Scientific Mobility Program guide 2013/2014
Brazil Scientific Mobility Program guide 2013/2014Cesar Augusto Nogueira
 
[BRAZIL] Science without Borders program description
[BRAZIL] Science without Borders program description[BRAZIL] Science without Borders program description
[BRAZIL] Science without Borders program descriptionCesar Augusto Nogueira
 
Colégio Técnico de Campinas (COTUCA) 2013/2014
Colégio Técnico de Campinas (COTUCA) 2013/2014Colégio Técnico de Campinas (COTUCA) 2013/2014
Colégio Técnico de Campinas (COTUCA) 2013/2014Cesar Augusto Nogueira
 

Plus de Cesar Augusto Nogueira (20)

TI para o Sucesso nos Negócios
TI para o Sucesso nos NegóciosTI para o Sucesso nos Negócios
TI para o Sucesso nos Negócios
 
Programa LeadingMyself - Accenture 2021
Programa LeadingMyself - Accenture 2021Programa LeadingMyself - Accenture 2021
Programa LeadingMyself - Accenture 2021
 
Professional Google Cloud Architect
Professional Google Cloud ArchitectProfessional Google Cloud Architect
Professional Google Cloud Architect
 
Minando dados de sua cidade para sua comunidade
Minando dados de sua cidade para sua comunidadeMinando dados de sua cidade para sua comunidade
Minando dados de sua cidade para sua comunidade
 
Se tornando um desenvolvedor Java Ninja - Trilha Java - TDC2017
Se tornando um desenvolvedor Java Ninja - Trilha Java - TDC2017Se tornando um desenvolvedor Java Ninja - Trilha Java - TDC2017
Se tornando um desenvolvedor Java Ninja - Trilha Java - TDC2017
 
Treinamento: SAP Management 4.0 (Fundamentos em SAP nas principais transações...
Treinamento: SAP Management 4.0 (Fundamentos em SAP nas principais transações...Treinamento: SAP Management 4.0 (Fundamentos em SAP nas principais transações...
Treinamento: SAP Management 4.0 (Fundamentos em SAP nas principais transações...
 
Palestrante OpenSource Java na Semana de Tecnologia da Informação da UFLA 2016
Palestrante OpenSource Java na Semana de Tecnologia da Informação da UFLA 2016Palestrante OpenSource Java na Semana de Tecnologia da Informação da UFLA 2016
Palestrante OpenSource Java na Semana de Tecnologia da Informação da UFLA 2016
 
OpenSource Java - Adopt a JDK e OpenJDK
OpenSource Java - Adopt a JDK e OpenJDKOpenSource Java - Adopt a JDK e OpenJDK
OpenSource Java - Adopt a JDK e OpenJDK
 
Android Wear - Workshop por @cesarnogcps
Android Wear - Workshop por @cesarnogcpsAndroid Wear - Workshop por @cesarnogcps
Android Wear - Workshop por @cesarnogcps
 
Certificado de participação - Trilha Python - The Developers Conference 2016 SP
Certificado de participação - Trilha Python - The Developers Conference 2016 SPCertificado de participação - Trilha Python - The Developers Conference 2016 SP
Certificado de participação - Trilha Python - The Developers Conference 2016 SP
 
Docker e suas tecnologias
Docker e suas tecnologiasDocker e suas tecnologias
Docker e suas tecnologias
 
Docker e suas tecnologias por @cesarnog
Docker e suas tecnologias por @cesarnogDocker e suas tecnologias por @cesarnog
Docker e suas tecnologias por @cesarnog
 
Certificado de participação no Hackathon Globo 2016 - Cesar A. Nogueira
Certificado de participação no Hackathon Globo 2016 - Cesar A. NogueiraCertificado de participação no Hackathon Globo 2016 - Cesar A. Nogueira
Certificado de participação no Hackathon Globo 2016 - Cesar A. Nogueira
 
Certificado_Python_Brasil_11_Cesar Augusto Nogueira
Certificado_Python_Brasil_11_Cesar Augusto NogueiraCertificado_Python_Brasil_11_Cesar Augusto Nogueira
Certificado_Python_Brasil_11_Cesar Augusto Nogueira
 
First Steps with Android - An Exciting Introduction
First Steps with Android - An Exciting IntroductionFirst Steps with Android - An Exciting Introduction
First Steps with Android - An Exciting Introduction
 
Introduction to RDF Data Model
Introduction to RDF Data ModelIntroduction to RDF Data Model
Introduction to RDF Data Model
 
Brazil Scientific Mobility Program guide 2013/2014
Brazil Scientific Mobility Program guide 2013/2014Brazil Scientific Mobility Program guide 2013/2014
Brazil Scientific Mobility Program guide 2013/2014
 
[BRAZIL] Science without Borders program description
[BRAZIL] Science without Borders program description[BRAZIL] Science without Borders program description
[BRAZIL] Science without Borders program description
 
Colégio Técnico de Campinas (COTUCA) 2013/2014
Colégio Técnico de Campinas (COTUCA) 2013/2014Colégio Técnico de Campinas (COTUCA) 2013/2014
Colégio Técnico de Campinas (COTUCA) 2013/2014
 
The Software Development Process
The Software Development ProcessThe Software Development Process
The Software Development Process
 

"Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas 2017

  • 1. Se tornando um Desenvolvedor Java “NINJA” 13 de Setembro de 2017
  • 3. Cesar A. Nogueira • Engenheiro de Software na Indra; • Trabalhou em grandes empresas como Instituto de Pesquisas Eldorado, IBM (USA), Fundação CPqD trabalhando diretamente com Java e suas tecnologias; • Atual organizador do @SouJavaCampinas; @cesarnogcps 26 anos
  • 4. Hivison do Nascimento Moura • Analista de sistemas na Matera; • Trabalhou em grandes empresas como CPFL e Indra • Trabalha diretamente com Java e suas tecnologias; • Membro do @SouJavaCampinas; @hivison_moura 25 anos
  • 6. • Boas práticas de codificação em Java • Exemplo de diferenças entre String e StringBuffer (Cesar) • Exemplo Garbage Collector (Hivison) • Open-Source Java para futuros desenvolvedores NINJAS • Iniciativas Adopt-a-JSR e OpenJDK • Como um NINJA se destaca em uma comunidade Java • 5 dicas de como ser tornar um desenvolvedor Java NINJA • O que são JUGs e como fazer parte de um grupo NINJA de Java Agenda
  • 9. Strings são IMUTÁVEIS Então você se pergunta se Strings são imutáveis, então porque eu consigo concatenar vários valores a uma String, tornando-a diferente da original?
  • 10. Você está criando um novo objeto em memória! Cada vez que você acha que está concatenando uma String com outra, você está criando diversos objetos distintos em memória, e as Strings “antigas” perdem referência, mas continuam lá.
  • 11. public class ConcatenaString { public static void main (String[] args){ //Cria um objeto em memória String str = "hello"; /* * Sabemos que nossa string agora será: "hello world". * * Ocorre que é criada a String "world" em memória, * depois a JVM cria um outro objeto "hello world". * No total vão ser 3 objetos para que essa 'concatenação' * ocorra. * */ str = str.concat(" world"); /* * O mesmo conceito é aplicado acima. É criada uma string * "from java" em memória, depois é criada uma * nova juntando "hello world from java". * No total temos agora 5 objetos em memória, * sendo que apenas 1 estamos utilizando, * veja que desperdício. * */ str += " from Java"; } }
  • 12. StringBuilder vs String “A performance do StringBuilder em detrimento do String comum é exponencialmente melhor quando precisamos concatenar valores.” Exemplo rodando em: https://is.gd/KnVUuV
  • 13.
  • 14.
  • 15. Evite code smells no dia a dia
  • 16.
  • 17. SOLID Principles São chamados de SOLID após a popularização dos mesmos por meio do Uncle Bob (os 5 princípios fazem parte do famoso livro “Agile Principles, Patterns and Practices”). Por que CINCO princípios?
  • 18. É um acrônimo – onde cada letra corresponde a um princípio: [S]ingle Responsability Principle [O]pen/Closed Principle [L]iskov Substitution Principle [I]nterface Segregation Principle [D]ependency Inversion Principle
  • 19. SRP, ou Princípio da Responsabilidade Única Este princípio nada mais é do que uma perspectiva diferente para um dos mais fundamentais princípios da orientação a objetos: a coesão. Sua definição diz que: “Uma classe deve ter somente uma razão para mudar”.
  • 20.
  • 21. O SRP é um dos princípios mais importantes que existe na orientação a objetos. Lembrando-se dele, você poderá projetar classes menores, mais coesas e de mais fácil entendimento.
  • 22. Legibilidade • Nomes claros • Nomes que revelem seu propósito • Nomes pronunciáveis • Nomes passíveis de busca
  • 23. Leitura do Código BigDecimal valor = BigDecimal.ZERO; for(Conta x : lista) { for(ItemConta y : x.getItens()) { if (y.getValor() != null) { valor = valor.add(y.getValor()); } } BigDecimal media = valor.divide(BigDecimal.valueOf(lista.size()));
  • 24. Leitura do Código BigDecimal valorTotal = BigDecimal.ZERO; for(Conta conta : contas) { for(ItemConta itemConta : conta.getItens()) { if (itemConta.getValor() != null) { valorTotal = valorTotal.add(itemConta.getValor()); } } BigDecimal quantidadeDeContas = valor.divide(BigDecimal.valueOf(contas.size())); BigDecimal media = valor.divide(quantidadeDeContas);
  • 26. Tamanho de Código Divida em mais classes!
  • 33. Principio de Aberto / Fechado
  • 40. “VOCÊ SEMPRE DEVE DEIXAR O LUGAR MAIS LIMPO DO QUE ENCONTROU”
  • 41. Open-Source Java para futuros desenvolvedores NINJAS
  • 42. • Importante iniciativa para os Devs NINJAS aprimorarem os padrões da linguagem Java; • Grupos globais de membros de JUGs trabalham em JSRs; • Receba olhares de empresas de tecnologia locais que procuram NINJAS; • Te ajuda a ser tornar um profissional NINJA, que ajuda seu grupo local; • Atraia mais desenvolvedores NINJAS para sua comunidade; Adopt-a-JSR
  • 43. Mas o que é essa tal de JSR?
  • 44. • Java Specification Requests (JSRs) são descrições reais de especificações propostas para a plataforma Java. • Existem inúmeras JSRs que são criadas a todo momento e são discutidas pela comunidade, através do processo de análise e aprovação. • Comunidade de desenvolvimento das especificações da tecnologia Java
  • 45. O Java Community Process (JCP) convida TODOS a moldar as especificações Java através do programa Adopt-a-JSR, ENCORAJANDO a comunidade global de Java a se envolver com as Java Specification Requests (JSRs). Como você, dev NINJA pode então moldar o Java NESTE MOMENTO?
  • 46. JUG: O que é e como participar de um?? 365 Grupos de Usuários Java no mundo ~ 894.000 membros Existem em 88 Países O Brasil está em 2º lugar no ranking de membros, estando na frente da Alemanha que está em 3º lugar
  • 47. Brazil 7 x 1 Alemanha ??
  • 48. 5 dicas para carreira que ajudará você a se tornar um desenvolvedor Java NINJA
  • 49. 1. Contribua sempre que possível
  • 50. 2. Dev Ninja, precisa estudar! Há sempre novidades no mundo Java
  • 51. 3. Compartilhe conhecimento por onde for! “Ninguém é tão sábio suficiente que não tenha algo a aprender. DEVs NINJAs sempre estão aprendendo algo novo.”
  • 52. 4. Seja presente online, tenha Twitter, LinkedIn, Github...
  • 53. 5. Entre para a comunidade Java de sua cidade ou região!
  • 55.
  • 56. Ser certificado te torna um bom profissional?
  • 57. Não!
  • 59. Sim!
  • 60.
  • 61.
  • 62. Java Programming and Application Development Java Enterprise Application Development Java EE 6 Java Enterprise Architecture
  • 63.
  • 64.
  • 65.
  • 66. Entre para a Comunidade Java Brasileira em total crescimento> JavaDevBR no Slack http://tiny.cc/javadevbr
  • 67. Garbage Collector • O que é o garbage collector ? • Qual a sua importância ? • Como funciona ?
  • 68. Garbage Collector • O que é o garbage collector ? • Qual a sua importância ? • Como funciona ?
  • 69. Garbage Collector • O que é o garbage collector ? • Qual a sua importância ? • Como funciona ?
  • 70. Garbage Collector • O que é o garbage collector ? • Qual a sua importância ? • Como funciona ?
  • 71. Garbage Collector • O que é o garbage collector ? • Qual a sua importância ? • Como funciona ?
  • 72. Garbage Collector • O que é o garbage collector ? • Qual a sua importância ? • Como funciona ?
  • 78.
  • 79. Obrigado e bons códigos em Java @cesarnogcps | @hivison_moura SouJava Campinas JUG para todos nós, desenvolvedores NINJA