Uma Pequena Provocação aos Arquitetos

Retirado do artigo Software Craftsmanship com Uncle Bob Martin
http://andrefaria.com/2009/11/30/software-craftsmanship-com-uncle-bob-martin/

[quote]Segundo Uncle Bob, pensar arquitetura e design vale muito a pena, porém, ele não gosta nada da idéia de se separar a arquitetura da codificação. Os melhores arquitetos são aqueles que codificam e vivem no ?mundo que constroem para os outros?, disse. Se um arquiteto não codifica ele fica desconectado das decisões que toma, porque não é afetado por elas, ele ?não tem que dormir na cama que faz?.
O importante é que arquitetos mantenham seus dedos no teclado, a final, você não pode liderar um time a menos que os conheça e entenda. Você tem que experiências o que o time está fazendo para saber o que ele realmente precisa.[/quote]

E aí galera, vocês concordam com isso?
Os que são arquitetos, põe realmente a mão na massa ou passam o dia fazendo diagramas?

Particularmente, corcordo com Uncle Bob!

Polemico este assunto.

Me faz lembrar um tema do mundo administração relacionado ao tipo de lider:

Tem aquele que nunca participou dos processos da empresa (traduzindo: meteu a mão na massa no amago da coisa) porem está na posição de liderança se valendo dos conceitos teóricos adquiridos nos livros e com os professores da universidade. Por outro lado existe outro tipo de lider que nasce dentro da organização passando pela maioria dos processos deixando seu suor em boa parte da empresa e que agora chegou na posição de lider.

Um ignora questões relacionadas a pratica em função da teoria; isto é bom? Acredito que nem sempre.

O outro ignora questões relaconadas a teoria em função da pratica; isto é bom? Acredito que nem sempre também.

Na minha opinião, para todos em tudo o que vale é o bom senso; saber desempenhar bem o papel no momento devido, não esquecendo que as coisas raramente estão totalmente desconectadas principalmente no tocante a sistemas (sistemas não é coisa só da computação).

Hoje penso que a arquitetura parte como sugestão de um profissional que chamam de arquiteto e como tal precisa ser avaliada pela equipe antes de ser instaurada. E que nada impede do “arquiteto” participar como desenvolvedor.

flws

Eu não consigo respeitar um arquiteto que não esteja engajado com o projeto.
Claro, existem níveis e níveis de arquitetura. Em mega-projetos, talvez a equipe arquitetural responsável não sente do teu lado e te ajude com um problema do framework, mas para todos os outros tipos de projetos, eu desprezo totalmente arquitetos-de-prateleira, que só sabem ficar falando asneiras, e dando pitaco no trabalho dos outros, sem se envolver e participar ativamente do desenvolvimento do projeto.

O fato de você ser um arquiteto não significa que você é programador; mas isso também não significa que você não pode programar.

@fantomas É verdade cara. Acho que o melhor é quanto se tem um equilíbrio entre a teoria e prática.

Exato. E não siginifica que você fica fazendo diagraminhas. Arquitetos são, na grande maioria das vezes, para tomada de decisões em relação a um sistema existente ou em fase de construção, considerando os “ilitys” que ele aprendeu nos anos de experência que tem.

Na maioria das vezes vejo o papel do arquiteto em decisões importantes mesmo, pq dificilmente trabalho com projetos novos. (So barco afundando rs). As vezes a necessidade de integrar alguns sistemas, ou a detecção de problemas futuros na arquitetura de sistemas legados.
Essas coisas. nesse caso as vezes o legal é ter um programador bom para visualizar a ideia do arquiteto com facilidade, liderar tecnicamente a equipe e meter a mão na massa.

Mas não quer dizer que o fato de tomar decisão seja apenas fazer docs e diagramas, as vezes e na maioria delas uma boa prova de conceito é uma forma de decisão

Esse bom é aquela mesma história de analista so faz diagrama.

Todo o profissional deve entender o todo, não somente a sua parte. Apartir do momento que um analista não codifica, ou um arquiteto, ele não conheçe o problema, nem sabe quais decisões tomar corretamente, ele toma baseado no achismo, no que ele acredita certo.

Pra mim quem não suja as mãos não mereçe meu reconhecimento.

não concordo com você Felagund, as vezes um arquiteto realmente bom e experiente não precisar codificar para saber o problema.
O cara tem que ser vivido o suficiente para entender problemas sem ter que debulhar códigos e códigos.
Mesmo porque entender o todo de um sistema de menor porte é ate possível, mais pensando em sistemas legados, e de grande porte acho que fica um pouco inviavél de ter esse conhecimento.

Complementando meu comentário, quando digo que o arquiteto pode sim programar não falo de codificar regras de negócio, mas sim algum componente que faça parte da arquitetura do projeto.

É a velha história do DEPENDE.
Cada caso é um caso e acho que a maioria aqui pode dar exemplos e contra-exemplos.

[quote=andrefariagomes]Retirado do artigo Software Craftsmanship com Uncle Bob Martin
http://andrefaria.com/2009/11/30/software-craftsmanship-com-uncle-bob-martin/

[quote]Segundo Uncle Bob, pensar arquitetura e design vale muito a pena, porém, ele não gosta nada da idéia de se separar a arquitetura da codificação. Os melhores arquitetos são aqueles que codificam e vivem no ?mundo que constroem para os outros?, disse. Se um arquiteto não codifica ele fica desconectado das decisões que toma, porque não é afetado por elas, ele ?não tem que dormir na cama que faz?.
O importante é que arquitetos mantenham seus dedos no teclado, a final, você não pode liderar um time a menos que os conheça e entenda. Você tem que experiências o que o time está fazendo para saber o que ele realmente precisa.[/quote]

E aí galera, vocês concordam com isso?
Os que são arquitetos, põe realmente a mão na massa ou passam o dia fazendo diagramas?
[/quote]

Tecnicamente arquitetura de um sistema não se programa, se escolhe. O que se programa é o design.
Como eu ainda não vi os videos vou me abster de mais comentários porque não sei se ele diz “architecture” ou “design”.
Se for design ele tem razão. Se for arquitetura ele não sabe do que fala.

Um exemplo interessante que conta como ponto positivo aos arquitetos “que ficam dando pitaco no código dos outros”, é quando você possui uma equipe muito grande (não quero dizer que isso seja uma coisa boa), e precisa manter certa “homogenidade” na base de código.

Minha visão é que o arquiteto de software deve prover ferramentas pra facilitar a vida dos desenvolvedores, e matar 3 aliens e um predador por semana :mrgreen:

Fantástico - queria que todos gerentes de projetos da face da terra (que aplicam waterfall) percebessem isso - nossa vida seria muito mais fácil :slight_smile:

[quote=sergiotaborda]
Tecnicamente arquitetura de um sistema não se programa, se escolhe. O que se programa é o design.
Como eu ainda não vi os videos vou me abster de mais comentários porque não sei se ele diz “architecture” ou “design”.
Se for design ele tem razão. Se for arquitetura ele não sabe do que fala.[/quote]

Sérgio, como assim? O que é arquitetura para você? Escolher o que? Liguagens? Frameworks? Se você acha que o Robert Martin não sabe do que fala seria legal vc escrever um artigo, citando fontes e provando isso…

A todos…Desde o método Objectory, pré RUP, nosso amigo Jacobson já falava que arquitetura é EXECUTÁVEL (e isso nos anos 70 e 80). Nenhum autor, diz que arquitetura são diagramas. O RUP que geralmente é o culpado pelas aberrações do mercado desde sempre disse que o fruto da elaboração é uma arquitetura provada com software funcionando (geralmente implementando alguns cenários complexos dos casos de uso mais importantes). E acredite, há projetos que você PRECISA provar a arquitetura antes de começar a entregar kilos de funcionalidades. Foco em arquitetura: uma das bases do RUP, resolva a arquitetura primeiro e você não terá problemas no futuro. Isso é válido para sistemas mais complexos, se você só usa arquitetura Toddinho (de caixinha), você nunca fez um software com riscos arquiteturais significativos…

Se um arquiteto não sabe codar ele não serve para nada. #ivory_tower

[quote=rodrigoy][quote=sergiotaborda]
Tecnicamente arquitetura de um sistema não se programa, se escolhe. O que se programa é o design.
Como eu ainda não vi os videos vou me abster de mais comentários porque não sei se ele diz “architecture” ou “design”.
Se for design ele tem razão. Se for arquitetura ele não sabe do que fala.[/quote]

Sérgio, como assim? O que é arquitetura para você? Escolher o que? Liguagens? Frameworks? Se você acha que o Robert Martin não sabe do que fala seria legal vc escrever um artigo, citando fontes e provando isso…

A todos…Desde o método Objectory, pré RUP, nosso amigo Jacobson já falava que arquitetura é EXECUTÁVEL (e isso nos anos 70 e 80). Nenhum autor, diz que arquitetura são diagramas. O RUP que geralmente é o culpado pelas aberrações do mercado desde sempre disse que o fruto da elaboração é uma arquitetura provada com software funcionando (geralmente implementando alguns cenários complexos dos casos de uso mais importantes). E acredite, há projetos que você PRECISA provar a arquitetura antes de começar a entregar kilos de funcionalidades. Foco em arquitetura: uma das bases do RUP, resolva a arquitetura primeiro e você não terá problemas no futuro. Isso é válido para sistemas mais complexos, se você só usa arquitetura Toddinho (de caixinha), você nunca fez um software com riscos arquiteturais significativos…

Se um arquiteto não sabe codar ele não serve para nada. #ivory_tower

[/quote]

O que o Robert Martin fala na referencia citada é que um arquiteto deve ser uma pessoa que também codifica. a palavra chave aqui é “também”. Em nenhum ponto ele fala que arquitetura é codificada. O que ele diz é que o arquiteto deve pertencer À equipa, codificar com ela, e estar a par dos problemas.

Nos EUA o arquiteto é uma especie de lider. Lider Tecnico e Arquiteto são sinonimos. Eu não acho que isso tenha que ser assim. Eu acho que arquiteto é um role, não uma pessoa.
Numa equipe multifuncional alguem tem que fazer o papel do arquiteto. Isso não significa que ele não faça outros papeis, inclusive o de lider e o de programador.

Arquitetura , por definição, é diferente de design. A arquitetura atente a requisitos não funcionais de comunicação e deploy das aplicações que formam o sistema. O papel de um arquiteto é saber conjugar aplicações, não fazer aplicações. Escolher protocolos , escolher plataformas. No cubo arquitetural ele é responsável pela escolha das plataformas que sustentarão a aplicação e de manter algumas qualidades do sistema como a disponibilidade. O papel do arquiteto não é escrever codigo, ele pode escrever , mas não é a sua principal preocupação. A sua principal preocupação é entender as tecnologias, e como elas atuam para um determinado fim. Por exemplo, escolher entre EJB e ESB , entre Java o .NET etc… pode chegar no nivel de escolher a linguagem conforme a equipe (java ou ruby ) e por isso ele pode se confundir com o lider tecnico. O arquiteto escolhe quantos e quais os componentes da aplicação. De quantos e quais jars a aplicação será formada e dependencias de outas bibliotecas.
Em resumo, o arquiteto cuida de todo o ambiente externo ao codigo mas que o influencia ou é influenciado por ele.

O designer cuida dos andares ( camadas) ele cuida de como montar cada componente da arquitetura baseado nas tecnologias, plataformas e protocolos escolhidos pelo arquiteto. Ele escolhe entre frameworks que fazem o mesmo na arquitetura, por exemplo, o arquiteto define o uso de java e um servlet container. o designer escolhe entre o tomcat e o jetty (ou outros). Ele escolhe e aplica padrões de design , ele define práticas de programação, ele define estilo de programação ( checkstyle) . Em resumo, ele cuida do codigo que constroi cada componente da arquitetura.

A arquitetura é executável ? sim. Podemos fazer provas de conceito de arquitetura? sim. Mas isso não significa que o arquiteto escreve codigo ou que a arquitetura é algo codificável.
A decisão de um designer é facilmente refactorada a de um arquiteto não. Mudar de webservice para JMS representa mudar o como o sistema se comporta no ambiente, e suas dependências com esse ambiente e o como as outras aplicações enxergam esse sistema, ou seja, é mudar superficie de contato do sistema. Isso torna-o em outro sistema, mesmo que ele faça o mesmo.

Em nenhum momento o Robert fala que arquitetura é programável ou codificável. Ou que teria que ser. Ele fala que: arquitetura é sobre tomar decisões e que o arquiteto deve pertencer à equipa e que ele deve codificar a aplicação como qq outro membro da equipa. Tudo isto é verdade. E em nenhum momento ele afirma que arquitetura é algo que se codifica.

Como nota devo acrescentar que o que se fazia ou se achava ou não nos anos 70 e 80 não é relevante. Muitas das assunções feitas nesse tempo se mostram completamente irreais agora e o proprio Robert cita as ferramentas CASE como um exemplo de algo que não deu certo.

Eu tb sou defensor de uma aproximação arquitetura primeiro e já vi muitos sistemas falharem por terem uma arquitetura mais desenvolvida e desorganizada. Nem sei o que seria uma arquitetura de caixinha. You are overreacting.


Resumindo o assunto, depois que ouvi o que o Robert tinha a dizer eu achei extremamente válido e aprendi o nome de algo que já conhecia da prática,mas não conhecia o nome, nem sabia que era algo “institucionalizado” : software craftmanship. Acho que isto sim é a mensagem mais importante do dialogo e que tanto agilistas como tradicionalistas deveriam entender. A parte sobre robotizar o desenvolvimento teve um saida inteligente - dizendo que os IDE e as ferramentas são esses robots - mas quando apertado pelo entrevistador ele voltou um pouco atrás na ideia de um modelo executável que ele tinha começado por ser contra (CASE, MDA). Não acho que o dialogo se resume a uma provocação aos arquitetos mas sim um apelo a todos os desenvolvedores sérios a acordarem para a qualidade e orgulho na qualidade do software que produzem.

[quote=Felagund]Esse bom é aquela mesma história de analista so faz diagrama.

Todo o profissional deve entender o todo, não somente a sua parte. Apartir do momento que um analista não codifica, ou um arquiteto, ele não conheçe o problema, nem sabe quais decisões tomar corretamente, ele toma baseado no achismo, no que ele acredita certo.

Pra mim quem não suja as mãos não mereçe meu reconhecimento.[/quote]

eu concordo… para mim um arquiteto deve conhecer muito da tecnologia, ja inclusive ter mechido com ela (por que certas coisas, certos conhecimentos só vem com a prática) e conhecer da regra de negocio também, apesar de considerar que o conhecimento da regra de negócio é um pouco menos importante que da tecnologia e da forma utilizada para transformar essa regra de negócio em software, isso qu o arquiteto deve ser mais voltado.

opinião.

concordo em genero, numero e grau!!!

Quem escolhe ou é o Miguéteto ou é o vendedorzinho de ferramentas Java EE (normalmente com o pomposo nome de Solutions Architect).

Arquiteto de verdade é Programador Jedy, e põe a mão na massa, e desenvolve, e testa e valida a Arquitetura de acordo com requisitos fornecidos pelo cliente. E ainda define padrões e práticas e orienta e garante que o time esteja desenvolvendo de acordo com esses padrões. Por isso ele deve trabalhar lada a lado com desenvolvedores e não em uma torre de marfim onde só seres semelhantes a ele podem se elevar.

Ahhh, e não existe Arquiteturinha receita-de-bolo como muitos acreditam. :wink:

[quote=rodrigoy][quote=sergiotaborda]
Tecnicamente arquitetura de um sistema não se programa, se escolhe. O que se programa é o design.
Como eu ainda não vi os videos vou me abster de mais comentários porque não sei se ele diz “architecture” ou “design”.
Se for design ele tem razão. Se for arquitetura ele não sabe do que fala.[/quote]

Sérgio, como assim? O que é arquitetura para você? Escolher o que? Liguagens? Frameworks? Se você acha que o Robert Martin não sabe do que fala seria legal vc escrever um artigo, citando fontes e provando isso…

A todos…Desde o método Objectory, pré RUP, nosso amigo Jacobson já falava que arquitetura é EXECUTÁVEL (e isso nos anos 70 e 80). Nenhum autor, diz que arquitetura são diagramas. O RUP que geralmente é o culpado pelas aberrações do mercado desde sempre disse que o fruto da elaboração é uma arquitetura provada com software funcionando (geralmente implementando alguns cenários complexos dos casos de uso mais importantes). E acredite, há projetos que você PRECISA provar a arquitetura antes de começar a entregar kilos de funcionalidades. Foco em arquitetura: uma das bases do RUP, resolva a arquitetura primeiro e você não terá problemas no futuro. Isso é válido para sistemas mais complexos, se você só usa arquitetura Toddinho (de caixinha), você nunca fez um software com riscos arquiteturais significativos…

Se um arquiteto não sabe codar ele não serve para nada. #ivory_tower

[/quote]

Ter uma arquitetira executavel não faz sentido pra mim. Eu concordo com o Sergio, ninguém descobre uma arquitetura a ser utilizada no decorrer do projeto (pelo menos não deveria). Na verdade o termo arquitetura de caixinha se refere a utilizar a mesma arquitetura em todos os projetos, como se ela fosse algo executavel.