Você que é uma pessoa que gosta de java e visa torná-lo sua carreira almeja ser algum dia um Arquiteto . Sim ? Afinal existe até uma certificação para isso, certo ? Mas já alguma vez pensou em ser um Designer ?
A palavra “Design” refere-se à moldagem de abstrações para alcançar um objetivo prático. Podem ser abstrações de textura e cor da roupa (Fashion Designer), as abstrações de formas de objetos (Car Designer) ou até de cabelos (Hair Designer) mas podem também ser as abstrações de construções mentais como aquelas usadas em Orientação a Objetos ou em código de programação. A palavra é de difícil tradução para o português já que não distinguimos desenho no sentido de “esboço” como “desenho animado” de desenho no sentido de plano ou projeção. O inglês e o espanhol são mais ricos com duas palavras diferentes (design/drawing e deseño/dibujo). É por isto que a expressão “design pattern” é em português “padrão de projeto“. Só que “projeto” pode significa outra coisa no mundo do software e se quisermos falar de “Project patterns” a tradução seria a mesma. Isto é um problema para os linguistas, mas nos deixa com um problema também: a falta de percepção da diferença entre fazer esboços e planejar.
Comumente ouvimos falar de arquitetos de software. Um cognome popularizado por Gates nos seus últimos momentos na microsoft e popularizado no mundo java pelo conceito de separação de papeis e com a famosa certificação. E por isso todos almejam ser arquitetos. E o que faz um arquiteto de software ?
Normalmente as pessoas ou dirão que um arquiteto faz diagramas (desenhos no sentido de esboços) ou que é responsável por decisões referentes a requisitos não-funcionais como segurança e performance. Alguns dirão ainda que são lideres ou responsáveis por equipes, mas isso não é verdade já que arquitetos normalmente atual como especialistas que finda sua contribuição ao projeto migram para outro. A visão tradicional do arquiteto como alguém que faz esboços em papel daquilo que será a realidade do software é uma imagem bem presente. Ouvimos, até, falar de “software blueprints” ou “plantas de software” no sentido de desenhos imensos que estabelecem o como as coisas serão. Esta comparação entre o arquiteto civil e o arquiteto de software é muito querida a aqueles que comparam fazer software com fazer pontes e edifícios.
No lingo do software falamos de andares e nodos que podemos comparar com edifícios , se realmente quisermos, mas essas abstrações estão muito longe daquilo que os programadores fazem no dia a dia: escrever software. São abstrações importantes para transmitir ideias como distribuição e organização de responsabilidades, mas muito pouco uteis no dia a dia. Se formos usar a comparar com edifícios temos que dizer que a planta é algo bem longe do trabalho do pedreiro que dia após dia ergue o edifício.
O Designer não está preocupado com esboços e bonecos em papel, está procurando uma harmonia entre as partes constituintes os materiais que tem à disposição e o objetivo ultimo do objeto que está desenhando. Está preocupado com um sentido estético que não apenas agradável à visão, mas principalmente à capacidade humana de entender o abstrato, as relações, e se maravilhar pela simplicidade de uma boa ideia. O objetivo do designer é que menos adições levem a mais efeitos. Em software isso significa menos código, menos classes, menos conceitos, levem aos mesmos resultados , ou a melhores resultados.
Da minha experiência projetos precisam de designers, pessoas que têm na cabeça como o software foi, é e será e como chegar lá. Arquitetos são apenas as pessoas de demonstram aos leigos como chegar lá, e programadores são quem chega lá. Sem designers na equipe os programadores não sabem que padrões seguir ou que código escrever, nem que objetivo estão tentando alcançar porque não ha um desenho, no sentido de ‘não ha um plano”. Por outro lado, muitos designers na mesma equipe pode ser problemático. Seria como dois pintores pintando o mesmo quadro ou dois escultores esculpindo a mesma pedra. Funciona se eles estiverem em sincronismo, mas se não, é um desastre.
Hoje se inventou o papel de Lider Tecnico e ha algumas coisas que esta pessoa deve alcançar, e muitas delas são as mesmas das que um Designer teria que alcançar, como derivar em termos tecnicos o significa dos requisitos e assegurar uma visão técnica clara do projeto , mas um Designer não tem atribuições de gerencia como ser responsável pelo o que a equipe é ou não capaz de fazer. Lider Tecnico é apenas uma expressão para “Responsável pelos resultados da equipe que sabe falar tecnikês com a equipe” e por isso é normalmente uma pessoa diferente do Gerente. No mundo ágil não ha tanto este sentido mais burucrático do termo, mas ainda fica a responsabilidade pelos resultados. Em termos ágeis o lider tecnico é responsável pelo débito tecnico da sua equipe. Ser um bom designer pode ajudar muito um lider tecnico, mas nem todo o lider tecnico precisa ser um designer. Pode, por exemplo, apenas ajudar a equipe a concretizar a visão do designer. Afinal estes são todos papeis, de que estamos falando, e não de pessoas. Portanto os papeis podem ser acumulados ou não.
Se um Arquiteto está para o modelo tradicional de fazer software e para as Fábricas de Software ( afinal só de pode produzir em massa o que está esquematizado em algum lugar) O Designer está para o modelo moderno de fazer software e para os Ateliês de Software. Talvez a analogia mais próxima seja a da fabricação de carros. Existe um fase de atelier onde o carro é desenhado, no sentido de conceptualizado e planejado. Isso é esquematizado em esboços e depois produzido em fábricas. A diferença é que em software só temos a parte da concepção porque o código que escrevemos para idealizar algo, já é o produto final e ‘produzir em massa” é apenas gravar mais CDs ou publicar para download. Algo que o mundo tradicional ainda não entendeu, já que continuam achando que fabricar software é um processo semelhante a uma linha de produção. Pobres coitados.
Bom, agora que sabe o que é um designer de software talvez queira reconsiderar se realmente você quer ser um arquiteto que fica escrevendo um monte de documentos e fazendo um monte de diagramas, ou se quer um de designer que sabe moldar o código à sua vontade. Afinal, a vantagem que o designer de software sobre os outros designers de outras áreas é que ele trabalha com material etéreo que ele mesmo pode criar, como, quando e quanto quiser. É muita liberdade criativa …
Ao contrário que podem lhe dizer, e podem lhe ensinar nas faculdades por ai, software não se faz em fábricas nem se planeja no papel. Se visiona e se molda, como um estilista que mentaliza o resultado que quer obter e molda o pano até que o resultado físico seja igual ao que ele mentalizou.
Bons desenhos.