A Arte de Fabricar Software

A Arte de Fabricar Software

Construir software não é uma ciência, é uma arte. Tal afirmação à primeira vista pode soar um pouco estranha visto que a informática é considerada uma ciência, mas na realidade essa é apenas a parte técnica do trabalho.

Vários paradigmas e metáforas foram utilizados ao longo do tempo para tentar controlar a construção de software. O primeiro, o mais famoso, o mais usado e mais desastroso modo de controlar a criação de software é conhecido modelo waterfall (cascata). Este modelo, baseado em como carros, prédios e pontes são construídos, é o mais danoso ao processo de construir software, porque ele é baseado em conceitos de seqüência e dependência. Assim, tem-se que uma operação só pode ser feita se operação anterior necessária a esta foi completada. Isso faz sentido quando se constrói um prédio, já que ninguém quer morar num edifício em que as fundações não foram bem assentes. Mas na construção de software essa dependência e seqüência não existem e o dano advém justamente de querer incluí-las.

Por isso, criar um software não é como construir um edifício, é muito mais como montar um espetáculo – não se objetiva criar um objeto, mas se fornecer um serviço.

A Evolução da Arte

Qualquer arte parte de um talento. Pintura, escultura, música partem do talento de artistas. Artista é a pessoa que tem talento. Talento não se vende e não se compra. Tem-se e evolui-se.

No mundo até hoje não é possível sobreviver sem alguma fonte de rendimento, já que a pessoa, qualquer que seja a sua função na sociedade, precisa de rendimentos para se sustentar. Com o artista não é diferente. Ele obtém esses rendimentos de duas fontes principais: a venda de suas obras e/ou o ensino se suas técnicas.

Técnicas são ações que quando repetidas tornam mais simples o trabalho de produzir a obra. Elas podem ser consideradas derivações do talento, mas não o formam. Técnicas são regras que as pessoas comuns podem seguir, aprender e dominar para produzirem obras semelhantes às dos artistas sem que seja necessário talento. Claro que dominar as técnicas corretamente pode ser considerado um talento, mas que não se confunde com aquele necessário para as criar. Além do que, apenas manejando técnicas não é possível tornar-se um artista e, portanto, não é possível evoluir a arte.

Para que a arte evolua, é necessário deixar os artistas usarem seu talento.

A metáfora

Uma pequena metáfora. O oleiro produz seu pote de barro manualmente. Ele é um artista. A qualidade da obra é diretamente proporcional ao talento que ele tem e técnicas que desenvolveu. Suas obras são bonitas e caras, mas existe uma procura. O empresário encontra naquelas figuras de barro uma oportunidade de negócio. Ele financia melhores máquinas e mais pessoas para aprenderem a criar obras com aquelas: os aprendizes. Com o tempo os aprendizes aprendem técnicas e tecnologias que os ajudam a produzir obras cada vez mais idênticas a do artista, gastando cada vez menos tempo e matéria-prima. Alguns aprendizes são especializados em controlar os gastos e manter o padrão: os engenheiros. O artista não é mais relevante ao processo de criar a peça. A sua peça já foi copiada e as máquinas a produzem muitas vezes mais depressa. Por outro lado, as peças não são mais únicas. O interesse dos clientes nelas diminui. O empresário tem que pedir ao artista que crie uma nova obra. E o processo começa de novo.

A arte de comercializar

As obras são bens e como tal podem ser comercializadas. A comercialização de obras únicas (primas) auferem fama e prestígio a quem as possui. Felizmente, para os artistas fama e prestigio é possível comprar. Rapidamente outras pessoas entendem que existe lucro em comercializar as obras do artista: os empresários.

Conforme a comercialização das obras se torna comum, as obras se tornam menos valiosas. Algumas obras têm muito pouco valor. Tão pouco que para existir lucro é necessário produzir grandes quantidades delas.
No passado, artistas eram organizados por empresários para produzir obras idênticas de forma a aumentar a quantidade. Nasciam as fábricas. Isso funcionou por um bom tempo, mas de uma forma precária. Os empresários entendiam que não era perfeito, mas era a forma possível. Existiam muitas incongruências entre as obras. Não existia um padrão, apenas um modelo, e as cópias não eram todas exatamente iguais. Além disso, o espírito criativo dos artistas é difícil de se domar: não é fácil convencer um artista a copiar a obra de outro. Assim, é mais fácil empregar outras pessoas mais preocupadas em aprender a executar a técnica, não a criar. Rapidamente a técnica tornou-se mais importante que o talento, pois o objetivo não era criar obras únicas, mas apenas copiar algo que já tinha sido criado. Nasceram os aprendizes: pessoas com menos talento que o artista, mas que pelo domínio das técnicas esperavam alcançar sucesso. O uso da técnica foi um sucesso para os empresários, mas não era suficiente. Faltava padronização das obras, faltava homogenização.

Muitos milênios se passaram até que artistas de outros ramos alcançaram técnicas que qualquer um poderia adaptar para ver florescer seu negócio: as tecnologias.
Usando a tecnologia do papel, a arte da escrita evoluiu tanto a grafia como a sintaxe e a semântica.
Usando a tecnologia da máquina a vapor as fabricas evoluíram. As técnicas repetitivas (como sempre foram) poderiam ser feitas por máquinas. A arte foi abandonada pela técnica. A especialização nas técnicas e tecnologias era mais importante. Nasceram os Engenheiros.

Não toda a arte foi abandonada, e a indústria da moda, neste sentido, pode ser tomada como exemplo. Embora existam fábricas, aprendizes, técnicas e tecnologias, ainda é do criador o papel principal. Nela ainda ganha aquele que conseguir criar coisas únicas. A arquitetura é exemplo de outra arte em que o artista ainda é importante. Mas nem todas as artes tiveram a mesma sorte.

A Arte do Circo

Não temos como esconder que a base de criar um software é entender sobre computadores e informática tal como a escultura é baseada em conhecer os materiais a esculpir ou a pintura é baseada em conhecer as misturas que formam as tintas e telas. Mas isso é apenas a matéria-prima. A obra nasce do uso criativo dessa matéria.

Contudo, a arte de criar um software não é arte de criar um objeto. É a arte de prover um serviço. Esse simples diferença torna as técnicas de construir objetos inúteis para a construção de software. Técnicas de construção civil nunca funcionarão para construir um software, pois edifícios não são serviços, são objetos.

Se seguirmos a metáfora do oleiro iremos acabar num processo de produção em cascata, porque é assim que ele manufatura as peças. Uma metáfora mais aplicável à fabricação de software não é a da construção de um objeto, mas sim a da montagem de um espetáculo; como o Circo.

A atração do Circo é ter mais do que uma atração. O Circo não vende objetos, vende serviços – em particular vende entretenimento. O sucesso do Circo depende da interação de seus artistas. Cada artista tem talento em uma área. Um Circo de um artista só, embora possível, está votado ao fracasso. É pela constante alteração de artista no palco que o circo provê seu serviço, que ganha sua magia. A magia vem da ordem que é produzida pela alteração aparentemente aleatória do artista no palco. E quem disse que só tem que haver um palco? Você nunca ouviu falar dos circos de três pistas?

Software também pode prover entretenimento mas pode prover muitos mais serviços. E mais do que isso, pode provê-los a todos simultaneamente. É isso que o cliente quer. Para conseguir isso o software é o resultado do talento de vários artistas.

Da mesma forma que o talento dos montadores de tendas, criadores de animais e mecânicos dão estrutura e mantêm o circo funcionado também na fábrica de software são necessários talentos nos bastidores do espetáculo. É aí, e apenas aí, que o conhecimento de ciência e informática são necessários.

Se enumerar qual função é comparável com qual, ninguém irá querer ser o palhaço, mas provavelmente alguns irão querer ser os malabaristas, os trapezistas, os mágicos, os domadores, os gerentes e, sobretudo, os donos do circo. Ou seria o contrário: alguém quer ser dono de uma fábrica de software?

A arte de fabricar software

A fábrica de software não é como uma indústria de olaria ou um estaleiro de construção. Não há uma ordem no uso dos talentos dos artistas. Não há uma seqüência definida na apresentação dos artistas. Tudo o que é necessário é prover ao cliente o serviço que ele deseja.

Criar software de qualidade é como criar um espetáculo de qualidade. Sim, existem muitas plumas e lantejoulas, muitas luzes e efeitos especiais, mas também existe treino, técnica, tecnologia e criatividade. O objetivo não é vender um produto tangível, é vender uma sensação intangível.

Muitos criticam o conceito de “fábrica de software”, mas o fazem tendo como parâmetro a estrutura fabril do passado direcionada à criação de objetos, ou seja, na realidade é quanto aos “estaleiros de software” que essas críticas se insurgem. Apenas recentemente começa a ganhar forma a idéia de um “fábrica de software” como a montagem de um serviço.

Essa nova perspectiva tem muitas implicações. A mais evidente é abertura dos códigos produzidos: o segredo do circo não está na maquinaria que faz a roda gigante girar, nem na comida dos animais. Outros menos evidentes, como as plataformas de desenvolvimento: estruturas prontas como teatros que outros usarão para oferecer seu espetáculo. Por fim, o mais difícil de todos: destruir uma hirarquia sequencial entre o passos da construção e os respectivos artistas.

Aquele que trabalha com software deve estar cada dia mais consciente do que está fazendo para não cair na ilusão de que está construindo um edifício ou uma estátua.

Licença

Creative Commons License Sérgio Taborda
Este trabalho é licenciado sob a
Licença Creative Commons Atribuição-Uso Não-Comercial-Não a obras derivadas 3.0 Genérica .

14 opiniões sobre “A Arte de Fabricar Software”

  1. Muito bom o seu texto. Sintetiza exatamente a idéia que tenho sobre desenvolvimento de software. Parabéns pela clareza de idéias e o uso inteligente de metáforas.

  2. Olá,, existe uma técnica mais fácil para se aprender a projetar um software?; Sem precisar fazer Faculdade e etc…?? Aprender a Ultilizar as Metáforas e assim dependendo de minha precisão projetar meu próprio Sóftware??? OBS: Não sei se formuilei bem a minha pergunta peço para que perdoem se eu errei em alguma coisa,mas e que quero muito aprender,,,,hehe mas sem precisar fazer faculdade etc… Muito obrigado e aguardo respostas….ass;Robson

    1. Existe uma forma de desenvolver software sem fazer faculdade : já ter desenvolvido muitos softwares antes e ter muito mais talento que a pessoa média ( aka, ser um gênio da informática)
      Se vc não tem experiência ou talento suficiente – como a maioria de nós- é bom que faça uma faculdade. A faculdade, se for bem aproveitada, vai-lhe ensinar várias coisas que à partida parecem completamente irrelevantes, mas que se vc tiver um pouco de talento para a coisa, vc vai compreender para que podem ser uteis depois.
      Projetar software é diferente de escrever programas. Escrever programas é uma das coisas necessárias, mas ha outras. Algumas bem abstratas como orientação a objetos. Não estou dizendo que vc não poderia criar um software sem fazer faculdade, mas isso não significa que vc possa construir-lo sem aprender o que aprenderia na faculdade. Se vc dispõe de outra forma de aprendizado, vc pode tentar. O que lhe posso dizer é que vai ser muito mais difícil e demorado. Tentativa e erro não é uma boa.

  3. Só seria bom acrescentar algo que faltou a texto e é bastante relevante, talento além de já nascer também pode ser conquistado, o talento não vem do nada, mas vem da prática e o prazer exaustivo de fazer tal ato, seja qual for, do qual se tira a experiência para únicas obras.

    Muito mais do que um artista é a determinação em atingir tal conquista, muito mais do que arte é o prazer de criar seus próprios programas e os achar ótimos diante dos outros e achar que ainda pode ser melhor diante de ti.

    A arte tão pejorativa e tão abstrata, mal consegue definir a si próprio, muito menos consegue ser tão inteligênte.

    1. O talento, por definição do conceito, não se pode aprender ou adquirir de qualqer forma. Ou você tem, ou você não tem.
      Se não tem, não ha nada que lho otorgue. Se tem, existem muitas formas de o evoluir. Para evoluir o talento é preciso que ele exista para começo de conversa. O ponto é que talento não se cria, não se conquista, não se compra. É por isso que ele é tão valioso.

      A arte não consegue ser inteligente ( afinal, se pudesse, nao seria arte). Contudo o artista pode ser inteligente. E de artistas que se fala. É o artista que tem talento.

  4. Primeiramente gostaria de dizer que cheguei até aqui através do blog do Igor Musardo.

    Não irei comentar o post pois creio que não seja necessário devido a excelência.

    Gostaria de deixar aqui apenas uma pergunta:

    Seria possível utilizar a idéia/framework pulpcore para criar uma “tecnologia”/ferramenta java para camada view similar ao Flex?

    Pois se tratando de Arte a camada view do java é a única parte que deixa a desejar e, um front-end java similar ao flex baseado na idéia do pulpcore teria um grande impacto no mertcado das rias web/desktop.

    1. Essa tecnologia de que fala já existe e se chama JavaFX. O JavaFX é o melhor de 3 mundos: java, photoshop e arquivo de mídia.
      Você pode programa em JavaFX com um editor de texto ou pode criar o look com uma ferramenta visual. O arquivo é semelhante em conceito a SVG , mas com código.
      O JavaFX permite criar interfaces mais ricas em menos tempo. Com animações e tudo o mais. Ele corre em cima do Swing e por isso tanto serve para web (via applet) como para desktop.
      A ideia tradicional é que o designer desenha e o programador programa, agora essa divisão não existe mais. Ambos podem fazer ambas as coisas. E isso é o mais perto da realidade. Quero crer que isso trará novo folgo à aplicações web e especialmente às desktop. Você poderá ter uma aplicação desktop muito rica que não passa de uma cara mais bonita para um browser sofisticado.

  5. Há um livro que eu li a algum tempo cujo título é “O que é Arte?”. Claro q o tema central do livro é justamente a discussão sobre o que é arte e, dentre vários pontos, resumidamente senti q o livro conclui q arte, de uma forma bem sucinta, é uma obra onde o artista teve a intenção em expressar algum sentimento na mesma e os “consumidores” desta obra podem “sentir”, perceber esta mesma sensação, ou seja a obra proporciona o sentimento que o artista quis expressar … Dentro desta definição desenvolvimento de software não é arte. Ninguém escreve um software pq estava angustiado, ou esperançoso, ou qualquer outra coisa, e expressa através do software desenvolvido este sentimento … bem como nenhum software proporciona sensações como obras de arte proporcionam … Desenvolvimento de software é ciência sim, Ciência da Computação, com tds suas especialidades …Arte é emoção, sentimento. Desenvolvimento de software é algo racional, é ciência.

    1. Por essa definição do livro cinema de hollywood tb não seria arte já que os sentimentos passados não são realmente sentidos pelos atores, autores, directores, cameramen, etc… Se vc leu o texto com atenção, que julgo que não o fez, vai entender que o uso da palavra arte se opoe ao uso da palavra indústria na raiz de palavras como artesão e é usado no sentido de “feito peça por peça” ao contrário de “feito em serie”.
      Além disso recorrer ao que um outro autor acha sobre o que é arte, em um contexto totalmente diferente, não justifica a diferença apontada por si.
      Quando ao post que citou ele é no , mínimo, ingênuo. A criação de software precisa de conhecimento técnico, sem duvida, mas precisa também de manejo inter-pessoal com os clientes. Sobre tudo software on demand – que parece que o autor tem pouco contato – onde o cliente tem expectativas independentes da tecnologia. Além disso existe a gerência do projeto de software (e se vc não entendeu era a isso que o meu texto se refere) – e esssa não tem como se encarada como ciencia exacta. Aliás, esse é o problema das gerencias desde os anos 70 quando o computador se popularizou.

      1. Na verdade eu acredito q atores d verdade devem encarnar seus personagens e consequentemente acabam vivendo na atuação as emoções q a história contada propõe. Claro q o cameramen fica d fora pq o trabalho dele é técnico, ele não é o artista. Eu li sim o texto com atenção e tbm não concordo com o termo indústria (fábrica d software é totalmente errôneo), mas acredito q não seria ‘arte’ o termo correto para ser o oponente do termo ‘indústria’, e sim ‘ciência’, ou até ‘engenharia’ … Gerência de projetos seria quase q humanas correto? tbm vejo q não é mto correto taxá-la d exatas … é, em algumas coisas a gente concorda, hehe …

  6. Estava lendo essa conversa toda e me chamou a atenção os comentários do autor e do Marco. Assim, gostaria de registrar o que percebo sobre as opiniões em relação ao desenvolvimento de software. Acredito que a emoção possui diversos prismas, podendo ser emoção por sentimentos como a angústia, a raiva, e emoção por respeito ao seu cliente final, emoção por metas atingidas por vc e pela sua equipe, por exemplo.
    Trabalho como analista de negócios e arquitetura de componentes de informação e sinto muita emoção em poder ajudar as pessoas a estarem informadas, bem atendidas e satisfeitas com o produto e/ou serviço que compraram. E vc conseguir uma arquitetura flexível, robusta, segura e com interfaces atrativas, dinâmicas e de fácil navegação, com certeza é uma arte!!!! Abs…Márcia

    1. Márcia, interessante ponto d vista …

      neste sentido então na verdade qualquer profissão seria uma arte, dependendo, vamos dizer assim, do grau de paixão com q c desempenha tal atividade, correto? … profissional de qualquer área d atuação qdo trabalha por amor ao seu ofício seria um artista … Seria a arte então a concretização de nossos sentimentos … ??? …

      Segundo Wikipedia (td bem q não é a melhor das fontes, mas ninguém aqui ta elaborando nenhuma tese científica, hehe) Arte geralmente é entendida como a atividade humana ligada a manifestações de ordem estética, feita por artistas a partir de percepção, emoções e ideias, com o objetivo de estimular essas instâncias de consciência em um ou mais espectadores …

      A bem da verdade acho q ainda há mta polêmica sobre o q é Arte. Sua definição tbm variou d época para época.

      Mas nunca tinha pensado pelo ponto d vista colocado em seu comentário … não deixa d ser interessante …

  7. Muito bom artigo, pois mostra que desenvolvedores não são apenas técnicos, mas também artistas.

    Desenvolvi software por muitos anos, tive duas empresas de Desenvolvimento de Software e posso dizer com conhecimento e muita experiência que desenvolver software é Arte – pois exige criatividade, mas também é Ciência e Técnica: Metodologia, melhores práticas, algorítmos, plataforma de desenvolvimento, compatibilidade com os recursos de hardware, etc. Atualmente sou admirador das metodologias ágeis e plataformas atuais de desenvolvimento .Net e Java. vide artigo: Metodologias Ágeis no Desenvolvimento de Projetos de Software: http://wp.me/pMSqs-L

    Nei Grando

Deixe um comentário