About

O framework jProton foi concebido em Setembro de 2007, a partir de reflexões a respeito do ensino de AJAX, na época em que eu preparava materiais para as atividades educacionais que desempenharei em 2008. As práticas educativas de uma maneira geral, sobretudo aquelas relacionadas às ciências exatas, seguem normalmente uma abordagem reducionista, dividindo o objeto de estudo em diversas “partes” menores que são estudadas separadamente. Essa abordagem é muito utilizada pois o foco restrito facilita o estudo, uma vez que objetos menores são mais fáceis de serem analisados. Porém, a própria restrição do foco é um problema, a medida em que ela ignora o meio em que se está inserido, ignorando portanto, a existência de um sistema.

Quando vamos estudar AJAX, por exemplo, normalmente nos preocupamos apenas com a manipulação de requisições assíncronas. Desse modo, questões pertinentes no desenvolvimento de aplicações web como manutenibilidade, eficiência, escalabilidade, e outras, são deixadas de lado uma vez que são consideradas um “capítulo à parte” do estudo. O problema é que essas questões estão todas relacionadas. A manutenibilidade, por exemplo, é essencial em praticamente todas as aplicações. Se uma aplicação deve ser manutenível, essa questão deve ser uma preocupação constante no projeto. Uma requisição assíncrona, mesmo não tendo relação direta com manutenibilidade, tem que ser manutenível. Não há como separá-las.

É claro que não é possível aprender tudo de uma só vez, e que, de algum modo, estaremos sempre estudando “partes” do “todo”, para que possamos analisá-las em detalhes. Mas o problema não é segmentar. O problema é ignorar a existência do “todo”. Ter consciência da existência do “todo” é fundamental para compreender o sistema em sua amplitude, e por consequência, ter maior controle sobre seu comportamento. Ignorar o “todo”, geralmente, leva a interpretações erradas. Muitos desenvolvedores só percebem que estão em apuros quando seu projeto já atingiu o patamar de milhares de linhas de código, e surge uma necessidade de alterar boa parte do código, seja porque seu cliente decidiu incluir algumas funcionalidades a mais, seja porque ocorreram mal-entendidos na especificação dos requisitos, ou por qualquer outro motivo que não cabe ao desenvolvedor enquanto profissional questionar. Para reparar tais problemas em um sistema mal construído pode custar muito mais do que o cliente esteja disposto a pagar. E nessas horas, pra não perder o cliente, quem acaba pagando a conta é o próprio desenvolvedor.

Além disso, as alterações são mais críticas ainda em aplicações AJAX devido as prórprias características do JavaScript, que é uma linguagem interpretada (a eficiência é portanto custosa), fracamente tipada (pode levar a erros mais facilmente), e usa herança por meio de prototipação (bem diferente da maneira usada nas linguagens C++ e Java). Além disso, a linguagem possui diferenças de sintaxe e semântica dependendo do navegador que estiver sendo executada (tornando custosa a escrita de códigos portáveis), existem problemas sérios de vazamento de memória (sobretudo no IE), restrições de segurança, e ainda existem diversos mal-entendidos sobre a linguagem (como os de que ela não possui orientação a objetos e/ou membros privados). Para completar, não existe ainda uma IDE para JavaScript completa, embora existam algumas em construção que já possuem as principais funcionalidades, como depurador de códigos, inspetores de DOM e CSS, e outras.

Criar aplicações em JavaScript é, portanto, uma questão delicada. Por consequência, o ensido de AJAX é igualmente delicado. Refletindo sobre essa problemática, percebi que seria benéfico para o aprendizado se existisse uma espécie de framework que englobasse diversos conceitos do desenvolvimento de aplicações AJAX, que pudesse ser usado tanto como modelo para o aprendizado, quanto como ferramenta de produção de aplicações reais. O objetivo é fazer com que o aprendiz esteja desde o início em contato com questões críticas no desenvolvimento de aplicações AJAX como manutenibilidade, portabilidade, extensibilidade e eficiência, entre outras. Com isso, procura-se incentivar boas práticas de programação desde os primeiros instantes do aprendizado, dimunuindo o abismo entre as teorias e suas aplicações em projetos reais.

Para que esse framework pudesse ser usado como base para várias aplicações, ele deveria ser manutenível e portável (cross-browser). Ele deveria ser também eficiente, para não impactar na performance das aplicações. Além disso, como as aplicações podem servir para os mais variados propósitos, o framework deveria ser flexível. Seria desejável também que ele fosse modular, para que facilitasse tanto o aprendizado, quanto a manutenção de seu código fonte. Para que esse framework fosse fácil de aprender, sua sintaxe deveria ser compacta e flexível, e uma vasta documentação deveria estar disponível. Igualmente importante seria se esse framework tivesse documentação em português, ou quem sabe até comentários em português no código-fonte. Melhor ainda seria se houvesse desenvolvedores brasileiros envolvidos no projeto, o que garantiria um melhor suporte para a comunidade brasileira.

Apesar dos frameworks existentes suprirem a maior parte desses requisitos, nenhum supre a todos. O maior problema é a carência de documentações e suporte em português, embora diversas comunidades de desenvolvedores ofereçam ajuda em seus fóruns e blogs. E esse não é um problema que afeta apenas os desenvolvedores que não sabem inglês, pois mesmo os que sabem poderiam ter discussões mais elevadas em português, afinal de contas, ela é nossa língua materna. Outro empecilho para o aprendizado existente nesses frameworks é que eles são demasiadamente extensos ou demasiadamente complexos. Melhor ainda seria se existisse um framework JavaScript brasileiro, pois traria uma série de outros benefícios para a comunidade brasileira, não só com relação à documentação e suporte, mas também com relação ao próprio envolvimento no projeto. O desenvolvimento em equipe, o uso de ferramentas de controle de versão, o uso de ferramentas de rastreamento de erros, e outras atividades do processo de desenvolvimento de aplicações, são atividades enriquecedoras para os próprios desenvoledores envolvidos.

Foi nesse momento que surgiu o jProton, inspirado nos frameworks jQuery, Ext, Prototype, Mootools, e nos artigos e códigos de Peter Paul Koch, Dean Edwards e Douglas Crockford, e nas boas práticas de programação apresentadas na quinta edição do livro “JavaScript - The Definitive Guide - 5th Edition” de David Flanagan.