Tão logo começamos a trabalhar com determinada tecnologia, aprendemos seus objetivos, forças e fraquezas para, então, utilizá-la para resolver problemas. Com o passar do tempo, nos tornamos realmente fluentes naquela tecnologia e, consequentemente, eficientes ao utilizá-la em determinado caso de uso. Tão fluentes e eficientes, de fato, que acabamos vendo aquela tecnologia específica como a solução para aquele problema específico.
Não que seja ruim ser fluente numa tecnologia e eficiente na resolução de determinado problema. Ruim é quando enxergamos na tecnologia somente o problema, ou vice-versa. Quando isso ocorre, criamos um engessamento criativo. Nos tornamos especialistas somente na resolução de determinado problema com determinada ferramenta; entramos numa espécie de caixa.
Vamos fazer um rápido teste. Responda: qual o propósito da linguagem PHP? Se você disse que PHP é uma linguagem para web, bom, sinto lhe informar, mas você está em uma caixinha.
Não é que você esteja errado, mas está apenas parcialmente correto. O PHP também é uma linguagem para web, mas não se resume a isso – é uma linguagem de propósito geral, que pode ser utilizada para resolver n tipos de problemas, inclusive para o desenvolvimento para web.
Quando surgiu, o PHP vinha para resolver um problema: desenvolver páginas dinâmicas para web. Através de scripts que eram embutidos na marcação HTML, era possível adicionar tornar as páginas mais dinâmicas, permitindo que o conteúdo fosse gerado no momento do carregamento.
O tempo passou, as necessidades mudaram e, com isso, o PHP evoluiu. Hoje, temos uma gama enorme de possibilidades. É possível criar ferramentas de processamento de grandes volumes de dados, aplicações desktop com PHP-GTK, adicionar heurística a essas ferramentas para que sejam independam da intervenção humana. Podemos, também, utilizar o php-cli para criar daemons e serviços em background, ferramentas de automação de tarefas comuns – como a criação de esqueletos de novos projetos – análise de qualidade código, gestão de dependências. As possibilidades são tão grandes, que desenvolver para web deixa de ser a única possibilidade com PHP e passa a ser só mais uma.
Sucesso fora da caixa
Existem vários exemplos de uso do php-cli para a criação de ferramentas que utilizam web, mas que não são para web. O composer, por exemplo, é uma ferramenta para gestão de dependências em PHP que permite que o desenvolvedor declare quais bibliotecas precisa e as instale/atualize separadamente, sem que elas fiquem misturadas ao código:
[neto@localhost project]$ composer install Loading composer repositories with package information Installing dependencies (including require-dev) - Installing symfony/console (dev-master abb1308) Cloning abb13086ec995421b82de3a814c3d67075a93768 - Installing symfony/event-dispatcher (v2.6.5) Downloading: 100%
Outro caso interessante é o do sistema de controle de versão git. Antes de ser criado, os sistemas de controle de versão seguiam um mesmo padrão – eram praticamente variações uns dos outros. O kernel do Linux utilizava um sistema chamado BitKeeper, que, apesar de ser considerado bom, foi envolvido em alguns problemas e deixou de ser gratuito.
Linus Torvalds, ao desenvolver o novo sistema de controle de versão, sabia exatamente o que não queria. Todos os requisitos para o desenvolvimento do novo sistema eliminavam qualquer proximidade funcional com todos os outros sistemas existentes na época. Na prática, Linus tinha um único requisito: pensar fora da caixa.
Hoje, descentralizado e popularizado por ferramentas como Github, Bitbucket e outras, o sistema de controle de versão Git é um dos mais utilizados por desenvolvedores.
[neto@localhost git]$ git log --reverse commit e83c5163316f89bfbde7d9ab23ca2e25604af290 Author: Linus Torvalds <torvalds@ppc970.osdl.org> Date: Thu Apr 7 15:13:13 2005 -0700 Initial revision of "git", the information manager from hell commit 8bc9a0c769ac1df7820f2dbf8f7b7d64835e3c68 Author: Linus Torvalds <torvalds@ppc970.osdl.org> Date: Thu Apr 7 15:16:10 2005 -0700 Add copyright notices.
Mais um caso de pensamento fora da caixa ocorreu com JavaScript, que por muito tempo foi uma tecnologia utilizada no client side – navegador do usuário – para adicionar comportamentos à uma página. Porém, seu formato assíncrono, com uma boa orientação a eventos, se mostraram excelentes recursos para desenvolvimento em geral, inclusive no server-side. Com a engine v8 e a criação do Node.js, toda uma nova gama de possibilidades foram criadas – aplicações não bloqueantes, serviços de streaming de dados, análise em tempo real de grandes volumes de dados etc.
Ainda, podemos utilizar JavaScript para a criação de aplicações e ferramentas para desktop – no Gnome Shell –, serviços web com Node.js, entre vários outros casos. O próprio Node.js tem sido utilizado como infraestrutura para editores, como o Brackets, e tem se mostrado um excelente recurso para esses editores.
Falhas acontecem, e podem ser boas
Tendemos a ser conservadores no desenvolvimento de software, seguindo princípios que foram definidos, muitos deles, quando a web ainda era recém -nascida e não tínhamos coisas se conectando com outras. Temos essa tendência porque lidamos com problemas delicados e que, às vezes, podem causar prejuízos enormes, incluindo, até mesmo, a queda de um avião. Se tem algo que pode ser assustador na área de desenvolvimento de software, é a ideia de errar. Principalmente se as consequências desses erros forem tão graves.
Mas errar não é ruim. Pelo contrário, é bom. Se sempre seguimos pelo caminho comum, dificilmente erramos, mas também dificilmente criaremos algo novo. Sem contar, claro, que aprendemos muito mais com os erros do que seguindo os caminhos padrões já pré-estabelecidos.
O projeto Alky, por exemplo, é um caso de insucesso ao pensar fora da caixa. Muitos que convivem com o ambiente Linux às vezes precisam, por algum motivo, utilizar uma aplicação que simplesmente não existe para Linux, ou que as opções disponíveis para Linux são insuficientes para o propósito da pessoa. Para tentar contornar esse problema, é possível utilizar ferramentas como Wine, que permite simular o ambiente Windows no Linux e, com alguma configuração, executar determinados softwares no Linux.
A ideia do Alky era ir além. Eles queriam converter os executáveis Windows para que funcionassem nativamente no Linux. O projeto foi abandonado no mesmo ano em que foi lançado, assim como o canal no IRC, e o domínio do projeto está à venda por uma dessas empresas que vendem domínios.
E existem vários casos de projetos para Linux, inclusive distribuições malucas, que simplesmente não deram certo. Mas dar errado não pode ser motivo para não tentar novamente. Talvez uma falha de projeto, de planejamento ou até mesmo de definição de público comprometam o sucesso da ideia. Mas esses erros devem ser utilizados como aprendizado para que, na próxima tentativa, possam ser corrigidos.
Quebrando paradigmas
Para conseguir pensar fora da caixa, é necessário, primeiro, desconstruir a imagem formada sobre determinada tecnologia, derrubando todas as paredes que o impeçam de ver o que está do lado de fora. Já ouviu alguém dizer que quem está dentro da garrafa não consegue ler o rótulo?
Isso se torna especialmente complicado para linguagens, porque, na grande maioria das vezes, o estudo delas começa a partir de ideias que já estão dentro de uma caixa. Quanto mais vemos sobre essas ideias, mais acoplados a elas ficamos.
Quebrar paradigmas significa abrir mão dos conceitos já estabelecidos para, então, ser original. É tornar-se lúcido para tomar decisões. É escolher o caminho que se quer percorrer, em vez de simplesmente seguir o mesmo caminho que alguém começou há duas décadas. Se decidirmos ir por determinado caminho, que seja uma decisão consciente, e não porque todos estão neste mesmo caminho.
Algumas vezes, um bom caminho é aquele que foi seguido por Linus Torvalds: definir requisitos que eliminam todas as possibilidades existentes e, a partir daí, criar algo totalmente novo.
Como pensar fora da caixa
Existem várias listas sobre como pensar fora da caixa. A minha é bem simples:
- Não acredite em listas que mostram como pensar fora da caixa.
Nem nesta.
Seguir listas de como pensar fora da caixa irá, talvez, tirá-lo da sua caixa, mas muito provavelmente irá colocá-lo dentro da caixa do autor da lista. E a ideia é que você não esteja em caixa alguma.
Não é fácil pensar fora da caixa, e não existe uma fórmula mágica que vai ajudá-lo com isso. É um exercício mental que devemos fazer a todo instante e começa com um questionamento: por que estou fazendo isso dessa forma?
Compreender o porquê de aquilo estar sendo feito daquela forma funciona para mim pois me obriga a analisar minhas motivações e decisões. Essa análise me torna um pouco mais lúcido sobre o que estou fazendo.
E se eu errar, bom, pelo menos terei aprendido muito mais sobre o problema do que apenas estar seguindo pelo caminho de sempre.
***
Texto publicado originalmente na Revista iMasters.