Table Of Content© 2012,CasadoCódigo
TodososdireitosreservadoseprotegidospelaLeinº9.610,de10/02/1998.
Nenhumapartedestelivropoderáserreproduzida,nemtransmitida,semauto-
rizaçãopréviaporescritodaeditora,sejamquaisforemosmeios: fotográficos,
eletrônicos,mecânicos,gravaçãoouquaisqueroutros.
CasadoCódigo
Livrosparaoprogramador
RuaVergueiro,3185-8ºandar
04101-300–VilaMariana–SãoPaulo–SP–Brasil
CasadoCódigo
“AnossaavóCéres”
–PauloSilveiraeGuilhermeSilveira
“Aminhaesposa,meuspaisemeuirmão”
–SérgioLopes
“Ameuspaiseesposa”
–GuilhermeMoreira
“Ameusamadospais”
–NicoSteppat
“Aminhaamadaesposaefamília”
–FabioKung
i
CasadoCódigo
Agradecimentos
DepoisdedoisanosministrandoocursodeArquiteturaeDesignnaCaelum,além
decincoanoscomumblogdemaisdeduzentosartigostécnicos,pareciafácilescre-
versobreumassuntoquefazpartedonossodiaadia.
Terrívelengano.
Emvezdosseismesesprevistos,passaram-sedoisanos. Doisanostrabalhando
de forma a tornar acessível práticas e trade-offs que aparecem com frequência na
plataforma.Sãoproblemasqueosdesenvolvedorespassamaenfrentarrapidamente
aoganharmaisexperiênciaefamiliaridadecomJava.
Juntar esse conhecimento não seria possível sem a existência do GUJ.com.br,
criadoem2002,noqualosusuáriosjátrocarammaisdeummilhãodemensagens.
Nós,autores,participamosativamentedofórum,oqualnãoatingiriaessamagnitude
semaajudadoRafaelSteil.
Tambémnãoseriapossívelorganizaressasideiassemacolaboraçãodediversos
amigos que as revisaram e discutiram os temas conosco: Lucas Cavalcanti, David
Paniz,CeciliaFernandes,AlbertoSouza,BrunodeOliveira,FábioPimentel,Vinicius
RobertoeAdalbertoZanata.
Agradecemos aos que participaram e participam da elaboração do curso FJ-91
naCaelum:AdrianodeAlmeida,AndersonLeite,JoséDonizettieDouglasCampos.
UmaespecialmençãoaoMaurícioAniche,que,alémderealizarumaminuciosa
revisão,nosincentivouatodomomentoamelhorarotextoeacortaroquenãofosse
essencialparaolivro.
iii
CasadoCódigo
Sobre os autores
PauloSilveiraébacharelemestreemciênciadacomputaçãopelaUSPecofundador
daCaelum. PossuiexperiênciacomdesenvolvimentowebnaAlemanha,passando
peloIBOPEepordoisanoscomoinstrutordaSunMicrosystems.Éumdosfunda-
doresdoGUJ.com.br,editortécnicodarevistaMundoJecriadordoVRaptor.
GuilhermeSilveiraélídertécnicoecofundadordaCaelum.TrabalhoucomJava
eTibconaAlemanha,comitterdoXStreamecriadordoRestfulie. Concentraseus
estudosemserviçosREST.Programadorexperiente,participoudasfinaismundiais
deprogramaçãonoJapãoenoCanadádoICPCpelotimedaUSPeéarquitetoJava
certificado(SCEA5).
SérgioLopesécoordenadornaunidadeSãoPaulodaCaelum.Programadesde
2000 e desenvolve em Java desde 2003. É arquiteto Java certificado (SCEA5), mo-
derador do GUJ e participante ativo da comunidade através de palestras, projetos,
cursoseartigos.
GuilhermeMoreiraéinstrutoreconsultorpelaCaelum,ondefocaseutrabalho
principalmentecomJavadesde2005,comprojetosinternosetambémdiretamente
nosclientes.FormadoemProcessamentodeDadospelaFATEC-SPearquitetoJava
certificado(SCEA5),escreveartigosparaarevistaMundoJ,alémdeserresponsável
pelaunidadedeBrasíliadaCaelum.
NicoSteppatéengenheirodecomputaçãoaplicadapelaFachhochschuleBran-
denburg.Éinstrutor,consultoredesenvolvedorháseteanoscomJavanoBrasilena
Alemanha.AtuanaunidadeRiodeJaneirodaCaelumeéarquitetoJavacertificado
(SCEA5).
FabioKungéengenheirodacomputaçãopelaEscolaPolitécnicadaUSP.Passou
porweb,Java,Ruby,experiêncianaAlemanha,instrutornaCaelum,responsávelna
Locaweb por Cloud Computing e no Heroku em São Francisco. É arquiteto Java
certificado(SCEA5).
v
CasadoCódigo
Prefácio
PorJimWebber.
OArquiteto
Quando penso sobre o termo “arquiteto”, é sempre com sentimentos confusos,
como suspeito que seja o caso para muitos de nós que trabalham com desenvolvi-
mentodesoftwareatualmente.Duranteminhacarreira,ouvidiversasopiniõesdife-
rentesparaessetermo,mas,paramim,oqueéprincipalparaserumbomarquiteto
possobuscardosmeusprimeirosdiascomodesenvolvedorprofissional(outentando
serumprofissional).
Meuprimeiroempregopareciaserintimidador-apósdiversosanosdepesquisa
acadêmicadentrodeumdepartamentodeciênciadecomputaçãoemumauniver-
sidade, entrei em uma empresa que havia comprado recentemente uma startup de
middleware Java gerenciada por um grupo de amigos. Esses amigos trabalhavam
noramodemiddlewarepordécadase“hackeavam”emJavaatémesmoantesdeele
ter esse nome. Sair da zona de conforto da computação de alto desempenho, com
tecnologiasasquaiseuestavaacostumado, epularparaumdomínionovodepro-
cessamento de transações distribuídas com foco em CORBA e J2EE era realmente
intimidador. Apesardeterumsensorazoáveldeteoriadesistemasdistribuídos,eu
jamaishaviaescritoCORBAouJ2EEcomousuário, muitomenoscomodesenvol-
vedordemiddleware.Foramtemposcomplicados.
No laboratório onde comecei a trabalhar, meus colegas ostentavam nomes de
cargosbaseadosemsuascapacidades(e,suspeito,longevidade!). Possuíamosenge-
nheiros,engenheirossenioresearquitetos,todososquaistrabalhavamarduamente
em desenvolver um excelente middleware de transação, workflow e mensageria.
Comoumengenheirosênior, eueraumpoucomenosverdedoqueosapenasen-
genheiros,masambosrecebíamosordensdosarquitetos-umportime-queeram
oráculos.Osarquitetosquelideravamnossotimeconheciamocódigodetrásparaa
vii
CasadoCódigo
frente,mastambémconheciamseuscampos.Erasemprepossívelconfiarqueseriam
capazesdeexplicarmodelosdetransaçãodistribuídacomplexosemostrarcomodi-
versos padrões e abstrações do código os suportavam. Eles também conheciam as
armadilhaseconseguiamdetectarcedoescolhasdedesigneimplementaçãoruins,
umavezqueeramcapazesdeveràfrente,oupelomenosvermaislongedoqueeu
conseguia.
Não acho que disse algum dia para esses arquitetos - talvez por causa do meu
orgulhojuvenil-oquãoimportanteelesforamemdelinearmeupensamentoecom-
portamento. Entretanto,sempreaspirei(ealgumasvezessucedi)sercomoeles,co-
nheceratecnologiaprofundamente,entenderocontextonoqualelaestásendoem-
pregada,guiareserguiadopeloscolegasdemeutime. Essafoiumaaspiraçãoque
leveiparameupróximoempregoemumaempresaglobalmuitoconhecidaeadmi-
radanoramodeconsultoriadeTI.
Aoentraremminhanovaempresa,decidiquejáhaviavistobastantesoftwaree
erabomosuficienteemescrevercódigo,eentãomedeclareiumarquiteto. Aoen-
contraralgunsdemeusnovoscolegaspelaprimeiravez,fuicalorosamenterecebido
eperguntadosobrequalseriameupapel.Respondiqueeueraumarquiteto;algoque
penseiquedariaumsentidodecompetêncianonívelmicrodapilhadetecnologias,
enonívelmacroaoredordaconstruçãodesistemas.Fiqueiatônitoaodescobrirque
fuirepreendidoporessarespostaefiqueimeperguntandooqueacabaradeaconte-
cer,afinal,eunãohaviaentradoparatrabalharcomessaspessoasdevidoareputação
queelespossuíamnodesenvolvimentodesoftwareeAgile?
Nãodemoroumuitoparaqueeuentendesseocontexto.Meuscolegastrabalha-
vamcomconsultoriaháalgunsanoseconhecerammuitos“arquitetosexperientes”.
Mas esses não eram o mesmo tipo de pessoa que eu admirava em meu primeiro
trabalho; eram arquitetos perigosamente ultrapassados, com pouca habilidade em
entregarsoftware, eumtalentosemfimparacausarconfusãoecriarpolíticascor-
porativas. Eeu, aparentemente, tinhameapresentadocomoumdesses. Nãoeraa
melhormaneiradecausarumaboaimpressãoaosmeusnovoscolegas.
Ainda assim, durante os 6 anos e nos 10 países em que trabalhei, me descrevi
comoarquiteto.Euestavaemumamissãoderecuperarovalordessetítulo,ecomo
passardotempoobtivealgumsucesso. Começamosapensaremumarquitetonão
sócomoo“melhorprogramador”ouum“pesomorto”,massimcomoumpapelque
considera os detalhes de nível macro em um time que entrega software - como a
integraçãocomoutrossistemasfuncionará,comofalhaserecuperaçõesserãotraba-
lhadas,comoavazãoserámedidaegarantida.
viii