Quando penso em praticamente qualquer linguagem de programação - como C, C ++, PHP, SQL, JavaScript, Python, ActionScript, Haskell, Lua, Lisp, Java, etc. - fico impressionado: adoraria desenvolver um aplicativo de computador usando qualquer desses idiomas.
Mas quando penso em frameworks web (eu faço principalmente PHP) - como Cake, CI, Symfony, Laravel, Zend, Drupal, Joomla, Wordpress, Rails, Django, etc - sou como Deus não.
Por que não existem estruturas da web que me fornecem construções simples, divertidas e poderosas, como uma linguagem de programação?
Respostas:
Eu também tinha essa pergunta há anos, mesmo estando do lado do Python. Não tenho uma explicação única para esse fenômeno, mas aqui estão meus pensamentos sobre o assunto:
As estruturas da Web devem lidar com a linguagem de marcação XMLish - HTML, parte da tríade da Web atual HTML-CSS-JavaScript de uma maneira cliente-servidor. Significa três idiomas, que interagem entre si, um DOM do navegador e um modelo de execução (e modelo de segurança). Com efeito, cada parte da funcionalidade (um "módulo") deve ter seu código nos três idiomas. Para adicionar a isso, o idioma seletor do jQuery está se tornando mais um idioma para cuidar.
O HTML + CSS não possui um modelo intuitivo e matematicamente sólido para colocar objetos. Até Tcl / Tk é IMHO melhor na definição de gerenciadores de geometria. Isso impede que o programador defina a renderização HTML em termos estritos e confie na sorte: "talvez essa div funcione a maior parte do tempo na maioria dos navegadores". Existem alguns desenvolvimentos positivos neste lado, por exemplo, HTML5 e Twitter Bootstrap.
A tecnologia da Web cresceu organicamente e as estruturas cresceram com ela, portanto, sua forma não é necessária elegante. Isso significa que o programador deve lembrar as APIs, que são abaixo do ideal, ficarão obsoletas e assim por diante
Os navegadores da Web ainda têm pequenas incompatibilidades e adicionam complexidade desnecessária às estruturas da Web
A arquitetura geral está uma bagunça. É um pensamento dividido em back-end e front-end, vinculado à solicitação / resposta no lado de back-end e renderização orientada por dados no lado de front-end. A ordem de execução não é muito bem definida (a sincronização requer esforço) e a colocação de estilos, scripts em slots apropriados é necessária (quase todos os scripts js precisam ser colocados antes do final da tag body, e assim por diante). O armazenamento em cache é outro aspecto, que abrange de back-end para proxy (s) e front-end. E eu nem mencionei a manipulação de formulários!
A estrutura da Web necessariamente lida com a maioria dessas complexidades, adicionando muitos conceitos e canais de processamento.
Na indústria da web, o trabalho geralmente é dividido entre designer gráfico, web designer / programador da web e programador de back-end como um conjunto mínimo de funções. Os dois primeiros não têm necessariamente habilidades de programação; portanto, precisam de abstrações e ferramentas diferentes, e as estruturas também devem facilitar
Em resumo, as estruturas da Web tentam abstrair muita complexidade (elas mesmas são complexas), mas é muito difícil de obter devido ao rápido desenvolvimento de padrões e outras partes móveis. As linguagens de programação são muito mais maduras, porque geralmente não é um problema não usar novos recursos.
Penso que tornar a estrutura da Web conveniente só será possível depois que os padrões da GUI estiverem em vigor (cobrindo diferentes modos de operação, como dispositivos móveis) e as tecnologias subjacentes sejam suficientemente estáveis.
As estruturas da Web carecem de construções simples porque não existem no domínio da tecnologia da Web. Abstrações de nível inferior necessariamente vazam para um nível superior.
fonte
Eu acho que muito disso tem a ver com as limitações da WWW. Especificamente, não há uma maneira integrada de armazenar estado entre o servidor e o cliente. Um cliente solicita alguns dados, o servidor os fornece e a conexão é fechada. Como tal, todas essas plataformas da web precisam montar seu próprio método de manter o estado entre as chamadas do servidor.
Eu tive que fazer um pequeno aplicativo da Web uma vez e nunca havia feito nenhuma programação de servidor / cliente. Demorei algumas semanas para descobrir tudo, e a parte mais difícil foi tentar entender onde estavam o cliente e o servidor.
Isso nunca vai mudar? Eu duvido. Isso exigiria uma mudança fundamental na arquitetura da web.
fonte
De um modo geral, as causas podem ser múltiplas:
fonte
Ah, mas você vê que é exatamente o problema. Estruturas não deveriam estar completas de Turing. Eles deveriam ser compostos de abstrações mais restritas que podem ser compostas em conjunto para executar um conjunto específico de tarefas de maneira sucinta. Portanto, todas essas estruturas mencionadas não são divertidas exatamente porque elas não fornecem um conjunto restrito de abstrações. Eles fornecem abstrações com vazamentos do que, por si mesmas, compõem uma máquina abstrata que é mais do que provável que Turing esteja completa. O conceito de " máquinas estranhas " é a coisa mais próxima em que estou pensando. Todas essas estruturas são "máquinas estranhas" para aplicativos da Web e uma "máquina estranha" é o oposto do que uma estrutura deveria ser.
fonte