Por que os frameworks da web não são simples, elegantes e divertidos como linguagens de programação? [fechadas]


10

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?


2
"Eu sou incrível, eu adoraria desenvolver um aplicativo de computador usando qualquer uma dessas linguagens." E você é dono de alguma dessas línguas? Porque quem sabe o que está fazendo lhe dirá que nenhum idioma é elegante ou divertido. Eles são apenas ferramentas para alcançar seus objetivos e, como as ferramentas, têm seus problemas e falhas.
Euphoric

14
@Euphoric Com 10 anos de experiência, discordo. É divertido trabalhar com alguns idiomas ; outros são uma dor. E existem alguns bem projetados que também são elegantes. No entanto, concordo que todos eles têm seus próprios problemas.
Izkata

@ Izkata 10 anos com cada um deles?
Euphoric

5
@Euphoric Cerca de 10 anos em várias línguas, mas todos de tipos bastante diferentes (da ordem de C versus Javascript), e cerca de 3 anos de muito mais. Eu usei um terço dos mencionados na pergunta e muitos outros não mencionados (incluindo o meu favorito, Rebol). Para mim, por exemplo, Javascript e Rebol são linguagens "divertidas", enquanto Rebol e Lisp são "elegantes" (e ouvi dizer que Haskell também é, mas não sei). Se você usa uma linguagem o suficiente e se depara com seus pontos fortes e fracos, essas opiniões "divertidas" e "elegantes" se formam rapidamente por conta própria.
Izkata

4
O número de conceitos atômicos fundamentais em uma linguagem de programação é pequeno e fácil de entender; portanto, é fácil criar ferramentas elegantes em torno desses conceitos. O número de conceitos irredutíveis necessários para operar a interação mais simples da Web é muito maior. Problemas complexos estão inevitavelmente produzindo soluções complexas e feias.
SK-logic

Respostas:


19

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.


3

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.


2

De um modo geral, as causas podem ser múltiplas:

  1. A diferença de abstração é maior no caso da estrutura. Uma linguagem processual / OOP moderna fornece abstração sobre uma máquina, mas mantém algumas construções da máquina (como atribuir alguns dados a uma variável / gravar alguns dados em uma unidade de memória ou chamar um procedimento etc.); a diferença não é tão grande, enquanto uma estrutura tenta fornecer abstração para o desenvolvimento de um aplicativo da web que opera com muito mais conceitos.
  2. Estruturas podem ser mais complexas do ponto de vista do programador; isso é como uma consequência do primeiro ponto. Uma linguagem de programação é bastante simples, possui construções simples (se, para, variáveis, procedimentos etc.). Além disso, a biblioteca padrão abstrai coisas simples, como escrever no IO ou usar coleções. A biblioteca padrão também é muito modularizada, com pouca ou nenhuma conexão entre o módulo e outro; você não precisa saber de E / S para usar coleções ou vice-versa. Observe que, se algumas partes da biblioteca padrão são bastante complexas, elas são colocadas em uma mini-estrutura (por exemplo, Java Collections Framework ou Framework Executors). No caso da estrutura, você precisa conhecer todo o fluxo, todas as partes para usar a estrutura em sua força total. Além disso, um framework é um aplicativo já construído;
  3. Poucos recursos são colocados em uma estrutura e em uma linguagem de programação. Eu acredito que isso não precisa de explicação.

0

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.


1
Estou dando +1 porque, apesar da natureza desmedida do post, é certo que as estruturas não sejam necessariamente completas de Turing. Essa é uma das desvantagens de uma linguagem completa de uso geral, a capacidade de fazer qualquer coisa, se você souber.
Izkata
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.