SlideShare ist ein Scribd-Unternehmen logo
1 von 3
Downloaden Sie, um offline zu lesen
sua organização ou estrutura de componentes
                                                         importantes interagindo através de interfaces, sendo
Quem precisa de um arquiteto? -                          estes componentes compostos por outros
Martin Fowler                                            componentes e interfaces sucessivamente menores”.
Passando pelo corredor um tempo atrás, vi meu
colega Dave Rice de mau humor. Minha pergunta            Johnson respondeu:
sobre o que está acontecendo trouxe uma resposta         “Eu era um revisor no padrão IEEE que dizia isso, e eu
violenta, “não devemos entrevistar ninguém que           reclamei inutilmente que isso era uma definição falsa.
tenha o título 'arquiteto' no seu currículo”. Naquele    Não existe um conceito de alto nível de um sistema.
momento, foi uma frase estranha, pois nós                Clientes tem um conceito diferente dos
normalmente apresentamos Dave como um dos                desenvolvedores. Clientes não se preocupam com a
nossos melhores arquitetos.                              estrutura dos componentes. Então, talvez a
A razão para o seu ódio a títulos é o fato de que,       arquitetura é o conceito de mais alto nível que os
mesmo para os padrões da nossa indústria,                desenvolvedores tem de um sistema em seu
“arquiteto” e “arquitetura” são palavras terrívelmente   ambiente. Vamos esquecer os desenvolvedores que
sobregarregadas. Para muitos, o termo “arquiteto de      conhecem apenas o seu pequeno pedaço. Arquitetura
software” cabe perfeitamente no personagem que           é o conceito de mais alto nível dos desenvolvedores
conhecemos no fim de Matrix Reloaded. Até mesmo          experientes. O que faz um componente importante?
em empresas que são contrárias a esta imagem, há         Ele é importante porque os desenvolvedores mais
uma necessidade vital para a liderança técnica que um    experientes dizem que é.
arquiteto como Dave desempenha.                          Então, uma definição melhor seria 'Na maior parte
                                                         dos projetos de software de sucesso, os
O que é arquitetura?
                                                         desenvolvedores mais experientes trabalhando
Quando eu estava avaliando o título para “Patterns of
                                                         naquele projeto tem um conhecimento compartilhado
Enterprise Application Architecture”, todos que
                                                         do design do sistema. Esse conhecimento
faziam a revisão do livro diziam que o termo
                                                         compartilhado é chamado 'arquitetura'. Esse
“arquitetura” cabia bem no título. Mas sentíamos
                                                         entendimento inclui como o sistema é dividido em
desconfortáveis ao definir a palavra. Como era me
                                                         componentes e como os componentes interagem
livro, senti que deveria tomar posição e defini-la eu
                                                         entre si através de interfaces. Estes componentes são
mesmo.
                                                         normalmente compostos de componentes menores,
Meu primeiro movimento foi evitar a complicação e        mas a arquitetura inclui apenas os componentes e
apenas deixar o meu cinismo falar. Aparentemente,        interfaces que são conhecidas por todos os
definimos “arquitetura” como a palavra que usamos        desenvolvedores.”
quando queremos falar do design de software mas
                                                         Isso seria uma definição melhor porque ela deixa claro
queremos que ele pareça mais importante do que é.
                                                         que arquitetura é uma construção social (assim como
(Sim, você pode imaginar que para “arquiteto” é a
                                                         o software em si) porque ela não depende do
mesma coisa). Entretanto, como acontece de forma
                                                         software, mas em qual parte do software é
tão comum, de dentro do cinismo existe um pedaço
                                                         considerada importante pelo grupo como um todo.
de verdade. O entendimento veio a mim após ler um
texto de Ralph Johnson na lista de Extreme               Há outro estilo de definição de arquitetura que é algo
Programming. É tão bom que vou citá-lo aqui por          como “arquitetura é o conjunto de decisões de design
completo.                                                que precisam ser feitas cedo em um projeto”. Talvez
                                                         essa ficasse melhor definida como sendo arquitetura é
Uma mensagem anterior dizia:
                                                         o conjunto de decisões que você gostaria de ter
“O RUP, vindo da definição do IEEE, define arquitetura   tomado cedo em um projeto, mas que você não tem
como “o conceito de mais alto nível de um sistema em     necessariamente condições de acertá-las no início de
seu ambiente. A arquitetura de um sistema de             qualquer forma.
software (ao um momento específico no tempo) é a
Assim, por esta segunda definição, a linguagem de        códigos parecidos. Na tarte, o arquiteto participa de
programação selecionada seria parte da arquitetura       sessões de requerimentos, ajudando a explicar ao
da maior parte dos projetos. Pela primeira, não seria.   pessoa dos requisitos as consequências técnicas das
                                                         duas ideias em termos não técnicos – como custos de
Se algo é parte da arquitetura é completamente
                                                         desenvolvimento.
baseado no que os desenvolvedores acham que é
importante. Pessoas que constroem “aplicações            A atividade mais importante do Architetus Oryzus é
enterprise” tendem a pensar que persistência é           melhorar a equipe de desenvolvimento para que eles
crucial. Quando eles começam a preparar suas             possam resolver problemas mais complexos. Melhorar
arquiteturas, eles começam com 3 camadas. Eles vão       a habilidade da equipe dá ao arquiteto muito mais
mencionar “e nós usamos Oracle para o nosso banco        opções do que ser o único tomador de decisões e
de dados e temos a nossa própria camada de               correr o risco de ser um gargalo para a equipe. Isso
persistência para mapear os nossos objetos para ele”.    leva para a regra de que a importância de um
Mas uma aplicação de controle de imagens para            arquiteto é inversamente proporcional ao número de
médicos pode incluir o Oracle sem que ele seja           decisões que ele ou ela fazem.
considerado parte da arquitetura. Isso porque a maior
parte da aplicação é analisar imagens, não gravá-las.    Em uma reunião recente na ThoughtWorks, alguns
Receber e gravar imagens é feito por uma pequena         colegas e eu estávamos discutindo sobre o problema
parte da aplicação e a maior parte dos                   dos arquitetos. Achei interessante que nós
                                                         rapidamente chegamos ao consenso sobre a definição
desenvolvedores ignoram isso.
                                                         do Architectus Oryzus mas não conseguíamos
Então, isso faz com que seja difícil dizer as pessoas    encontrar um nome. Mike Two veio com o melhor
como descrever sua arquitetura. “Nos diga o que é        nome que eu já ouvi: guia, como em montanhismo.
importante”. Arquitetura é sobre a parte importante.     Um guia é um membro da equipe que tem mais
Seja lá o que isso for.                                  experiência e que ensina os outros membros a
                                                         resolverem seus problemas, mas sempre está lá
O Papel do Arquiteto                                     quando alguma coisa sai do controle.
Então se arquitetura é a parte importante, então o
arquiteto é a pessoa (ou pessoas) que se preocupam       Largando a arquitetura
com a parte importante. E aqui nós chegamos na           Eu adoro escrever um título chamativo, e o melhor,
essência da diferença entre o arquiteto de Matrix        como esse mesmo, tem um significado importante
Reloaded e o arquiteto que Dave Rice exeplifica.         que não é imediatamente óbvio. Lembre-se da
                                                         segunda definição de Johnson: “Arquitetura é as
Arquitectus Reloadus é a pessoa que faz todas as         decisões que você gostaria de ter feito cedo em um
decisões importantes. O arquiteto faz isso porque        projeto”. Por que as pessoas sentem a necessidade de
uma mente única é necessária para manter a               ter algumas coisas cedo no projeto? A resposta, claro,
integridade conceitual do sistema e talvez porque o      é porque eles percebem essas coisas como difíceis de
arquiteto não acha que os membros da equipe são          serem mudadas. Então você pode acabar por definir
suficientemente bons no trabalho para tomar aquelas      arquitetura como “coisas que as pessoas percebem
decisões. Frequentemente, tais decisões precisam ser     como difíceis de serem mudadas”.
feito no início para que todos tenham um plano a
seguir.                                                  É comummente entendido que se você está
                                                         construindo uma aplicação “enterprise”, você precisa
Architectus Oryzus é um animal diferente. Este tipo de   acertar no banco de dados desde o início porque é
arquiteto deve estar sempre a par do que está            difícil de mudar o banco de dados – especialmente
acontecendo no projeto, procurando por problemas         depois que o projeto vai ao ar. Um dos nossos
importantes e resolvendo-os antes que eles tornem-       projetos, o DBA Pramod Sadalage, desenvolveu um
se um problema sério. Quando eu vejo um arquiteto        sistema que nos permite alterar o schema do banco
como esse, a parte mais notável do trabalho é            de dados de forma simples. Ao fazer isso, ele fez com
colaboração intensa. Na manhã, o arquiteto programa      que o schema do banco não era mais arquitetural. I
com um desenvolvedor, procurando encontrar
vejo isso como uma coisa boa porque ele nos deixa
mais livres para lidar com mudanças.

Em uma apresentação fascinante na conferência
XP2002, Enrico Zaninotto, um econonista, analisou o
pensamento por trás das ideias ágeis na manufatura e
desenvolvimento de software. Um aspecto que eu
achei particularmente interessante foi seu comentário
de que a irreversibilidade era um dos maiores
motores da complexidade. Ele via métodos ágeis, em
manufatura e desenvolvimento de software, como
uma mudança que procura conter a complexidade ao
reduzir a irreversibilidade – ao contrário de atacar as
outras fontes de complexidade. Eu acredito que que
um dos trabalhos mais importantes de um arquiteto é
encontrar meios de remover a irreversibilidade nos
designs de software.

Segue um e-mail de Johnson em resposta a um e-mail
que o enviei:

“Uma da diferenças entre a arquitetura de construção
civil e de software é que várias decisões de uma
construção são difíceis de serem mudadas. É difícil
voltar e alterar o seu porão, mesmo que seja possível.

Não há uma razão teórica que diga que alguma coisa é
difícil de ser mudada em software. Se você pega um
aspecto do software você pode então fazê-lo fácil de
ser mudado, mas nós não sabemos como fazer tudo
fácil de mudar. Fazer algo fácil de mudar faz com que
o sistema seja mais complexo e fazer tudo fácil de
mudar faz todo o sistema muito complexo.
Complexidade é o que faz software ser difícil de
mudar. Isso e duplicação.

Minha reserva quanto a programação orientada a
aspectos é que nós já vemos técnicas relativamente
boas para separar os aspectos dos programas e nós
não as usamos. Eu não acho que o problema real vai
ser resolvido por melhores técnicas na separação de
aspectos. Nós não sabemos o quais aspectos devem
ser separados e não sabemos quando é válido separá-
los o não.

Software não é limitado por física como construções
são. Ele é limitado pela imaginação, design,
organização. Ele é limitado pelas propriedades das
pessoas, não pelo mundo. “Nós encontramos o
inimigo, e ele somos nós mesmos”.

Weitere ähnliche Inhalte

Andere mochten auch

Samba enredo concorrente n°5 DRAGÃO IMPERIAL
Samba  enredo concorrente  n°5 DRAGÃO IMPERIALSamba  enredo concorrente  n°5 DRAGÃO IMPERIAL
Samba enredo concorrente n°5 DRAGÃO IMPERIALTim Maia
 
RT Tim Maia - Projeto Cinematográfico
RT Tim Maia - Projeto CinematográficoRT Tim Maia - Projeto Cinematográfico
RT Tim Maia - Projeto CinematográficoConté Studio
 
Letras cifras musicais
Letras cifras musicaisLetras cifras musicais
Letras cifras musicaisNome Sobrenome
 

Andere mochten auch (8)

ApresentaçãO1
ApresentaçãO1ApresentaçãO1
ApresentaçãO1
 
Caricaturas 70-a
Caricaturas   70-aCaricaturas   70-a
Caricaturas 70-a
 
Minissérie tim maia
Minissérie tim maiaMinissérie tim maia
Minissérie tim maia
 
Samba enredo concorrente n°5 DRAGÃO IMPERIAL
Samba  enredo concorrente  n°5 DRAGÃO IMPERIALSamba  enredo concorrente  n°5 DRAGÃO IMPERIAL
Samba enredo concorrente n°5 DRAGÃO IMPERIAL
 
Cada Música tem UMA HISTÓRIA
Cada Música tem UMA HISTÓRIACada Música tem UMA HISTÓRIA
Cada Música tem UMA HISTÓRIA
 
RT Tim Maia - Projeto Cinematográfico
RT Tim Maia - Projeto CinematográficoRT Tim Maia - Projeto Cinematográfico
RT Tim Maia - Projeto Cinematográfico
 
Eu Gostava
Eu GostavaEu Gostava
Eu Gostava
 
Letras cifras musicais
Letras cifras musicaisLetras cifras musicais
Letras cifras musicais
 

Ähnlich wie Quem Precisa De Um Arquiteto

Arquitetura de Software 101
Arquitetura de Software 101Arquitetura de Software 101
Arquitetura de Software 101Leandro Silva
 
Soujavarj 12 habitos de arquitetos altamente eficazes
Soujavarj 12 habitos de arquitetos altamente eficazesSoujavarj 12 habitos de arquitetos altamente eficazes
Soujavarj 12 habitos de arquitetos altamente eficazesRaphael Rodrigues
 
O Arquiteto da Informacao
O Arquiteto da Informacao O Arquiteto da Informacao
O Arquiteto da Informacao Carlos Franco
 
Arquitetura de Software Visão Geral
Arquitetura de Software Visão GeralArquitetura de Software Visão Geral
Arquitetura de Software Visão Geralsergiocrespo
 
Visão Geral Arquiteturade Software
Visão Geral Arquiteturade SoftwareVisão Geral Arquiteturade Software
Visão Geral Arquiteturade Softwareelliando dias
 
FIT e IFSP - Arquitetura (evolucionária) e o papel do arquiteto
FIT e IFSP - Arquitetura (evolucionária) e o papel do arquitetoFIT e IFSP - Arquitetura (evolucionária) e o papel do arquiteto
FIT e IFSP - Arquitetura (evolucionária) e o papel do arquitetoLeandro Daniel
 
Modulo ii arquiteturainformacaousabilidade_thaiscampas
Modulo ii arquiteturainformacaousabilidade_thaiscampasModulo ii arquiteturainformacaousabilidade_thaiscampas
Modulo ii arquiteturainformacaousabilidade_thaiscampasThais Campas
 
Arquitetura Limpa @ 32º CocoaTalks BH
Arquitetura Limpa @ 32º CocoaTalks BHArquitetura Limpa @ 32º CocoaTalks BH
Arquitetura Limpa @ 32º CocoaTalks BHHugo Ferreira
 
TDC 2012 - Fishbowl conversation sobre Arquitetura
TDC 2012 - Fishbowl conversation sobre ArquiteturaTDC 2012 - Fishbowl conversation sobre Arquitetura
TDC 2012 - Fishbowl conversation sobre ArquiteturaLeandro Daniel
 
APSI 2 aulas - padroes arquiteturais - camadas PROF.TARCIANE
APSI 2   aulas  - padroes arquiteturais - camadas PROF.TARCIANEAPSI 2   aulas  - padroes arquiteturais - camadas PROF.TARCIANE
APSI 2 aulas - padroes arquiteturais - camadas PROF.TARCIANEFco Edilson Nascimento
 
Design Pattern MVC – Arquitetura de Software Coesa e Flexível
Design Pattern MVC – Arquitetura de Software Coesa e FlexívelDesign Pattern MVC – Arquitetura de Software Coesa e Flexível
Design Pattern MVC – Arquitetura de Software Coesa e FlexívelRyan Padilha
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de SoftwareAricelio Souza
 
Technology Radar_ThoughtWorks_Vol_22
Technology Radar_ThoughtWorks_Vol_22Technology Radar_ThoughtWorks_Vol_22
Technology Radar_ThoughtWorks_Vol_22Hudson Augusto
 
Arquitetura da informação slides
Arquitetura da informação   slidesArquitetura da informação   slides
Arquitetura da informação slidesAllan Barros
 
Introdução ao Domain-Driven Design
Introdução ao Domain-Driven DesignIntrodução ao Domain-Driven Design
Introdução ao Domain-Driven DesignAndré Borgonovo
 
Infraestrutura como código Terraform aws openshift Ansible
Infraestrutura como código Terraform aws openshift AnsibleInfraestrutura como código Terraform aws openshift Ansible
Infraestrutura como código Terraform aws openshift AnsibleClaudemir de Almeida Rosa
 
Arquitetura_de_software_e_como_descreve-la_v2
Arquitetura_de_software_e_como_descreve-la_v2Arquitetura_de_software_e_como_descreve-la_v2
Arquitetura_de_software_e_como_descreve-la_v2Diogo Soares Moreira
 

Ähnlich wie Quem Precisa De Um Arquiteto (20)

Arquitetura de Software 101
Arquitetura de Software 101Arquitetura de Software 101
Arquitetura de Software 101
 
Soujavarj 12 habitos de arquitetos altamente eficazes
Soujavarj 12 habitos de arquitetos altamente eficazesSoujavarj 12 habitos de arquitetos altamente eficazes
Soujavarj 12 habitos de arquitetos altamente eficazes
 
O Arquiteto da Informacao
O Arquiteto da Informacao O Arquiteto da Informacao
O Arquiteto da Informacao
 
Arquitetura de Software Visão Geral
Arquitetura de Software Visão GeralArquitetura de Software Visão Geral
Arquitetura de Software Visão Geral
 
Visão Geral Arquiteturade Software
Visão Geral Arquiteturade SoftwareVisão Geral Arquiteturade Software
Visão Geral Arquiteturade Software
 
FIT e IFSP - Arquitetura (evolucionária) e o papel do arquiteto
FIT e IFSP - Arquitetura (evolucionária) e o papel do arquitetoFIT e IFSP - Arquitetura (evolucionária) e o papel do arquiteto
FIT e IFSP - Arquitetura (evolucionária) e o papel do arquiteto
 
Modulo ii arquiteturainformacaousabilidade_thaiscampas
Modulo ii arquiteturainformacaousabilidade_thaiscampasModulo ii arquiteturainformacaousabilidade_thaiscampas
Modulo ii arquiteturainformacaousabilidade_thaiscampas
 
Arquitetura Limpa @ 32º CocoaTalks BH
Arquitetura Limpa @ 32º CocoaTalks BHArquitetura Limpa @ 32º CocoaTalks BH
Arquitetura Limpa @ 32º CocoaTalks BH
 
TDC 2012 - Fishbowl conversation sobre Arquitetura
TDC 2012 - Fishbowl conversation sobre ArquiteturaTDC 2012 - Fishbowl conversation sobre Arquitetura
TDC 2012 - Fishbowl conversation sobre Arquitetura
 
Arquitetura de Software em Equipes Ágeis
Arquitetura de Software em Equipes ÁgeisArquitetura de Software em Equipes Ágeis
Arquitetura de Software em Equipes Ágeis
 
APSI 2 aulas - padroes arquiteturais - camadas PROF.TARCIANE
APSI 2   aulas  - padroes arquiteturais - camadas PROF.TARCIANEAPSI 2   aulas  - padroes arquiteturais - camadas PROF.TARCIANE
APSI 2 aulas - padroes arquiteturais - camadas PROF.TARCIANE
 
DDD - Step by Step
DDD - Step by StepDDD - Step by Step
DDD - Step by Step
 
Design Pattern MVC – Arquitetura de Software Coesa e Flexível
Design Pattern MVC – Arquitetura de Software Coesa e FlexívelDesign Pattern MVC – Arquitetura de Software Coesa e Flexível
Design Pattern MVC – Arquitetura de Software Coesa e Flexível
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Software
 
Technology Radar_ThoughtWorks_Vol_22
Technology Radar_ThoughtWorks_Vol_22Technology Radar_ThoughtWorks_Vol_22
Technology Radar_ThoughtWorks_Vol_22
 
Arquitetura da informação slides
Arquitetura da informação   slidesArquitetura da informação   slides
Arquitetura da informação slides
 
Introdução ao Domain-Driven Design
Introdução ao Domain-Driven DesignIntrodução ao Domain-Driven Design
Introdução ao Domain-Driven Design
 
Infraestrutura como código Terraform aws openshift Ansible
Infraestrutura como código Terraform aws openshift AnsibleInfraestrutura como código Terraform aws openshift Ansible
Infraestrutura como código Terraform aws openshift Ansible
 
Arquitetura software
Arquitetura softwareArquitetura software
Arquitetura software
 
Arquitetura_de_software_e_como_descreve-la_v2
Arquitetura_de_software_e_como_descreve-la_v2Arquitetura_de_software_e_como_descreve-la_v2
Arquitetura_de_software_e_como_descreve-la_v2
 

Mehr von Maurício Linhares

Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop
Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDropUnindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop
Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDropMaurício Linhares
 
Mixing Ruby and Java in a Service Oriented Architecture at OfficeDrop
Mixing Ruby and Java in a Service Oriented Architecture at OfficeDropMixing Ruby and Java in a Service Oriented Architecture at OfficeDrop
Mixing Ruby and Java in a Service Oriented Architecture at OfficeDropMaurício Linhares
 
Curso java 08 - mais sobre coleções
Curso java   08 - mais sobre coleçõesCurso java   08 - mais sobre coleções
Curso java 08 - mais sobre coleçõesMaurício Linhares
 
Curso java 06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismoCurso java   06 - mais construtores, interfaces e polimorfismo
Curso java 06 - mais construtores, interfaces e polimorfismoMaurício Linhares
 
Curso java 05 - herança, classes e métodos abstratos
Curso java   05 - herança, classes e métodos abstratosCurso java   05 - herança, classes e métodos abstratos
Curso java 05 - herança, classes e métodos abstratosMaurício Linhares
 
Curso java 04 - ap is e bibliotecas
Curso java   04 - ap is e bibliotecasCurso java   04 - ap is e bibliotecas
Curso java 04 - ap is e bibliotecasMaurício Linhares
 
Curso java 01 - molhando os pés com java
Curso java   01 - molhando os pés com javaCurso java   01 - molhando os pés com java
Curso java 01 - molhando os pés com javaMaurício Linhares
 
Curso java 03 - métodos e parâmetros
Curso java   03 - métodos e parâmetrosCurso java   03 - métodos e parâmetros
Curso java 03 - métodos e parâmetrosMaurício Linhares
 
Outsourcing e trabalho remoto para a nuvem
Outsourcing e trabalho remoto para a nuvemOutsourcing e trabalho remoto para a nuvem
Outsourcing e trabalho remoto para a nuvemMaurício Linhares
 
Aulas de Java Avançado 2- Faculdade iDez 2010
Aulas de Java Avançado 2- Faculdade iDez 2010Aulas de Java Avançado 2- Faculdade iDez 2010
Aulas de Java Avançado 2- Faculdade iDez 2010Maurício Linhares
 

Mehr von Maurício Linhares (20)

Mercado de TI
Mercado de TIMercado de TI
Mercado de TI
 
Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop
Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDropUnindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop
Unindo Ruby e Java através de uma arquitetura orientada a serviços na OfficeDrop
 
Mixing Ruby and Java in a Service Oriented Architecture at OfficeDrop
Mixing Ruby and Java in a Service Oriented Architecture at OfficeDropMixing Ruby and Java in a Service Oriented Architecture at OfficeDrop
Mixing Ruby and Java in a Service Oriented Architecture at OfficeDrop
 
Aprendendo ruby
Aprendendo rubyAprendendo ruby
Aprendendo ruby
 
Curso java 07 - exceções
Curso java   07 - exceçõesCurso java   07 - exceções
Curso java 07 - exceções
 
Curso java 08 - mais sobre coleções
Curso java   08 - mais sobre coleçõesCurso java   08 - mais sobre coleções
Curso java 08 - mais sobre coleções
 
Curso java 06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismoCurso java   06 - mais construtores, interfaces e polimorfismo
Curso java 06 - mais construtores, interfaces e polimorfismo
 
Curso java 05 - herança, classes e métodos abstratos
Curso java   05 - herança, classes e métodos abstratosCurso java   05 - herança, classes e métodos abstratos
Curso java 05 - herança, classes e métodos abstratos
 
Curso java 04 - ap is e bibliotecas
Curso java   04 - ap is e bibliotecasCurso java   04 - ap is e bibliotecas
Curso java 04 - ap is e bibliotecas
 
Curso java 01 - molhando os pés com java
Curso java   01 - molhando os pés com javaCurso java   01 - molhando os pés com java
Curso java 01 - molhando os pés com java
 
Curso java 02 - variáveis
Curso java   02 - variáveisCurso java   02 - variáveis
Curso java 02 - variáveis
 
Curso java 03 - métodos e parâmetros
Curso java   03 - métodos e parâmetrosCurso java   03 - métodos e parâmetros
Curso java 03 - métodos e parâmetros
 
Extreme programming
Extreme programmingExtreme programming
Extreme programming
 
Feature Driven Development
Feature Driven DevelopmentFeature Driven Development
Feature Driven Development
 
Migrando pra Scala
Migrando pra ScalaMigrando pra Scala
Migrando pra Scala
 
Outsourcing e trabalho remoto para a nuvem
Outsourcing e trabalho remoto para a nuvemOutsourcing e trabalho remoto para a nuvem
Outsourcing e trabalho remoto para a nuvem
 
Mercado hoje
Mercado hojeMercado hoje
Mercado hoje
 
Análise de sistemas oo 1
Análise de sistemas oo   1Análise de sistemas oo   1
Análise de sistemas oo 1
 
Revisão html e java script
Revisão html e java scriptRevisão html e java script
Revisão html e java script
 
Aulas de Java Avançado 2- Faculdade iDez 2010
Aulas de Java Avançado 2- Faculdade iDez 2010Aulas de Java Avançado 2- Faculdade iDez 2010
Aulas de Java Avançado 2- Faculdade iDez 2010
 

Quem Precisa De Um Arquiteto

  • 1. sua organização ou estrutura de componentes importantes interagindo através de interfaces, sendo Quem precisa de um arquiteto? - estes componentes compostos por outros Martin Fowler componentes e interfaces sucessivamente menores”. Passando pelo corredor um tempo atrás, vi meu colega Dave Rice de mau humor. Minha pergunta Johnson respondeu: sobre o que está acontecendo trouxe uma resposta “Eu era um revisor no padrão IEEE que dizia isso, e eu violenta, “não devemos entrevistar ninguém que reclamei inutilmente que isso era uma definição falsa. tenha o título 'arquiteto' no seu currículo”. Naquele Não existe um conceito de alto nível de um sistema. momento, foi uma frase estranha, pois nós Clientes tem um conceito diferente dos normalmente apresentamos Dave como um dos desenvolvedores. Clientes não se preocupam com a nossos melhores arquitetos. estrutura dos componentes. Então, talvez a A razão para o seu ódio a títulos é o fato de que, arquitetura é o conceito de mais alto nível que os mesmo para os padrões da nossa indústria, desenvolvedores tem de um sistema em seu “arquiteto” e “arquitetura” são palavras terrívelmente ambiente. Vamos esquecer os desenvolvedores que sobregarregadas. Para muitos, o termo “arquiteto de conhecem apenas o seu pequeno pedaço. Arquitetura software” cabe perfeitamente no personagem que é o conceito de mais alto nível dos desenvolvedores conhecemos no fim de Matrix Reloaded. Até mesmo experientes. O que faz um componente importante? em empresas que são contrárias a esta imagem, há Ele é importante porque os desenvolvedores mais uma necessidade vital para a liderança técnica que um experientes dizem que é. arquiteto como Dave desempenha. Então, uma definição melhor seria 'Na maior parte dos projetos de software de sucesso, os O que é arquitetura? desenvolvedores mais experientes trabalhando Quando eu estava avaliando o título para “Patterns of naquele projeto tem um conhecimento compartilhado Enterprise Application Architecture”, todos que do design do sistema. Esse conhecimento faziam a revisão do livro diziam que o termo compartilhado é chamado 'arquitetura'. Esse “arquitetura” cabia bem no título. Mas sentíamos entendimento inclui como o sistema é dividido em desconfortáveis ao definir a palavra. Como era me componentes e como os componentes interagem livro, senti que deveria tomar posição e defini-la eu entre si através de interfaces. Estes componentes são mesmo. normalmente compostos de componentes menores, Meu primeiro movimento foi evitar a complicação e mas a arquitetura inclui apenas os componentes e apenas deixar o meu cinismo falar. Aparentemente, interfaces que são conhecidas por todos os definimos “arquitetura” como a palavra que usamos desenvolvedores.” quando queremos falar do design de software mas Isso seria uma definição melhor porque ela deixa claro queremos que ele pareça mais importante do que é. que arquitetura é uma construção social (assim como (Sim, você pode imaginar que para “arquiteto” é a o software em si) porque ela não depende do mesma coisa). Entretanto, como acontece de forma software, mas em qual parte do software é tão comum, de dentro do cinismo existe um pedaço considerada importante pelo grupo como um todo. de verdade. O entendimento veio a mim após ler um texto de Ralph Johnson na lista de Extreme Há outro estilo de definição de arquitetura que é algo Programming. É tão bom que vou citá-lo aqui por como “arquitetura é o conjunto de decisões de design completo. que precisam ser feitas cedo em um projeto”. Talvez essa ficasse melhor definida como sendo arquitetura é Uma mensagem anterior dizia: o conjunto de decisões que você gostaria de ter “O RUP, vindo da definição do IEEE, define arquitetura tomado cedo em um projeto, mas que você não tem como “o conceito de mais alto nível de um sistema em necessariamente condições de acertá-las no início de seu ambiente. A arquitetura de um sistema de qualquer forma. software (ao um momento específico no tempo) é a
  • 2. Assim, por esta segunda definição, a linguagem de códigos parecidos. Na tarte, o arquiteto participa de programação selecionada seria parte da arquitetura sessões de requerimentos, ajudando a explicar ao da maior parte dos projetos. Pela primeira, não seria. pessoa dos requisitos as consequências técnicas das duas ideias em termos não técnicos – como custos de Se algo é parte da arquitetura é completamente desenvolvimento. baseado no que os desenvolvedores acham que é importante. Pessoas que constroem “aplicações A atividade mais importante do Architetus Oryzus é enterprise” tendem a pensar que persistência é melhorar a equipe de desenvolvimento para que eles crucial. Quando eles começam a preparar suas possam resolver problemas mais complexos. Melhorar arquiteturas, eles começam com 3 camadas. Eles vão a habilidade da equipe dá ao arquiteto muito mais mencionar “e nós usamos Oracle para o nosso banco opções do que ser o único tomador de decisões e de dados e temos a nossa própria camada de correr o risco de ser um gargalo para a equipe. Isso persistência para mapear os nossos objetos para ele”. leva para a regra de que a importância de um Mas uma aplicação de controle de imagens para arquiteto é inversamente proporcional ao número de médicos pode incluir o Oracle sem que ele seja decisões que ele ou ela fazem. considerado parte da arquitetura. Isso porque a maior parte da aplicação é analisar imagens, não gravá-las. Em uma reunião recente na ThoughtWorks, alguns Receber e gravar imagens é feito por uma pequena colegas e eu estávamos discutindo sobre o problema parte da aplicação e a maior parte dos dos arquitetos. Achei interessante que nós rapidamente chegamos ao consenso sobre a definição desenvolvedores ignoram isso. do Architectus Oryzus mas não conseguíamos Então, isso faz com que seja difícil dizer as pessoas encontrar um nome. Mike Two veio com o melhor como descrever sua arquitetura. “Nos diga o que é nome que eu já ouvi: guia, como em montanhismo. importante”. Arquitetura é sobre a parte importante. Um guia é um membro da equipe que tem mais Seja lá o que isso for. experiência e que ensina os outros membros a resolverem seus problemas, mas sempre está lá O Papel do Arquiteto quando alguma coisa sai do controle. Então se arquitetura é a parte importante, então o arquiteto é a pessoa (ou pessoas) que se preocupam Largando a arquitetura com a parte importante. E aqui nós chegamos na Eu adoro escrever um título chamativo, e o melhor, essência da diferença entre o arquiteto de Matrix como esse mesmo, tem um significado importante Reloaded e o arquiteto que Dave Rice exeplifica. que não é imediatamente óbvio. Lembre-se da segunda definição de Johnson: “Arquitetura é as Arquitectus Reloadus é a pessoa que faz todas as decisões que você gostaria de ter feito cedo em um decisões importantes. O arquiteto faz isso porque projeto”. Por que as pessoas sentem a necessidade de uma mente única é necessária para manter a ter algumas coisas cedo no projeto? A resposta, claro, integridade conceitual do sistema e talvez porque o é porque eles percebem essas coisas como difíceis de arquiteto não acha que os membros da equipe são serem mudadas. Então você pode acabar por definir suficientemente bons no trabalho para tomar aquelas arquitetura como “coisas que as pessoas percebem decisões. Frequentemente, tais decisões precisam ser como difíceis de serem mudadas”. feito no início para que todos tenham um plano a seguir. É comummente entendido que se você está construindo uma aplicação “enterprise”, você precisa Architectus Oryzus é um animal diferente. Este tipo de acertar no banco de dados desde o início porque é arquiteto deve estar sempre a par do que está difícil de mudar o banco de dados – especialmente acontecendo no projeto, procurando por problemas depois que o projeto vai ao ar. Um dos nossos importantes e resolvendo-os antes que eles tornem- projetos, o DBA Pramod Sadalage, desenvolveu um se um problema sério. Quando eu vejo um arquiteto sistema que nos permite alterar o schema do banco como esse, a parte mais notável do trabalho é de dados de forma simples. Ao fazer isso, ele fez com colaboração intensa. Na manhã, o arquiteto programa que o schema do banco não era mais arquitetural. I com um desenvolvedor, procurando encontrar
  • 3. vejo isso como uma coisa boa porque ele nos deixa mais livres para lidar com mudanças. Em uma apresentação fascinante na conferência XP2002, Enrico Zaninotto, um econonista, analisou o pensamento por trás das ideias ágeis na manufatura e desenvolvimento de software. Um aspecto que eu achei particularmente interessante foi seu comentário de que a irreversibilidade era um dos maiores motores da complexidade. Ele via métodos ágeis, em manufatura e desenvolvimento de software, como uma mudança que procura conter a complexidade ao reduzir a irreversibilidade – ao contrário de atacar as outras fontes de complexidade. Eu acredito que que um dos trabalhos mais importantes de um arquiteto é encontrar meios de remover a irreversibilidade nos designs de software. Segue um e-mail de Johnson em resposta a um e-mail que o enviei: “Uma da diferenças entre a arquitetura de construção civil e de software é que várias decisões de uma construção são difíceis de serem mudadas. É difícil voltar e alterar o seu porão, mesmo que seja possível. Não há uma razão teórica que diga que alguma coisa é difícil de ser mudada em software. Se você pega um aspecto do software você pode então fazê-lo fácil de ser mudado, mas nós não sabemos como fazer tudo fácil de mudar. Fazer algo fácil de mudar faz com que o sistema seja mais complexo e fazer tudo fácil de mudar faz todo o sistema muito complexo. Complexidade é o que faz software ser difícil de mudar. Isso e duplicação. Minha reserva quanto a programação orientada a aspectos é que nós já vemos técnicas relativamente boas para separar os aspectos dos programas e nós não as usamos. Eu não acho que o problema real vai ser resolvido por melhores técnicas na separação de aspectos. Nós não sabemos o quais aspectos devem ser separados e não sabemos quando é válido separá- los o não. Software não é limitado por física como construções são. Ele é limitado pela imaginação, design, organização. Ele é limitado pelas propriedades das pessoas, não pelo mundo. “Nós encontramos o inimigo, e ele somos nós mesmos”.