Pourquoi les frameworks web ne sont-ils pas simples, élégants et amusants comme les langages de programmation? [fermé]

10

Quand je pense à peu près à n'importe quel langage de programmation - comme C, C ++, PHP, SQL, JavaScript, Python, ActionScript, Haskell, Lua, Lisp, Java, etc. - je suis génial, j'aimerais développer une application informatique en utilisant n'importe quel de ces langues.

Mais quand je pense aux frameworks web (je fais surtout PHP) - comme Cake, CI, Symfony, Laravel, Zend, Drupal, Joomla, Wordpress, Rails, Django, etc - je suis comme dieu non.

Pourquoi n'y a-t-il pas de frameworks Web qui me fournissent des constructions simples, amusantes et puissantes comme un langage de programmation?

Ryan
la source
2
"Je suis génial, j'aimerais développer une application informatique en utilisant n'importe laquelle de ces langues." Et êtes-vous maître de l'une de ces langues? Parce que quiconque sait ce qu'il fait vous dira qu'aucune langue n'est élégante ou amusante. Ce ne sont que des outils pour atteindre vos objectifs, et comme les outils ont leurs problèmes et leurs défauts.
Euphoric
14
@Euphoric Avec 10 ans d'expérience, je ne suis pas d'accord. Il est amusant de travailler avec certaines langues ; d'autres sont une douleur. Et il y en a aussi bien conçus qui sont élégants. Cependant, je suis d'accord qu'ils ont tous leurs propres problèmes.
Izkata
@Izkata 10 ans avec chacun d'eux?
Euphoric
5
@Euphoric Environ 10 ans dans une poignée de langues, mais tous de types assez différents (de l'ordre de C contre Javascript), et environ 3 ans de tout un tas de plus. J'ai utilisé un tiers de ceux mentionnés dans la question, et beaucoup d'autres non mentionnés (y compris mon préféré, Rebol). Pour moi, par exemple, Javascript et Rebol sont des langages "amusants", tandis que Rebol et Lisp sont "élégants" (et j'ai entendu dire que Haskell l'est aussi, mais je ne le sais pas). Si vous utilisez suffisamment un langage et que vous vous heurtez à ses forces et à ses faiblesses, ces opinions «amusantes» et «élégantes» se forment rapidement d'elles-mêmes.
Izkata
4
Le nombre de concepts fondamentaux et atomiques dans un langage de programmation est petit et facile à comprendre, il est donc facile de construire des outils élégants autour de ces concepts. Le nombre de concepts irréductibles requis pour opérer l'interaction Web la plus simple est bien plus important. Des problèmes complexes produisent inévitablement des solutions complexes et laides.
SK-logic

Réponses:

19

J'ai aussi eu cette question pendant des années, même si je suis du côté Python. Je n'ai pas une seule explication à ce phénomène, mais voici mes réflexions sur le sujet:

  • Les frameworks Web doivent traiter le langage de balisage XMLish - HTML, qui fait partie de la triade Web HTML-CSS-JavaScript actuelle de manière client-serveur. Cela signifie trois langues, qui interagissent entre elles, un DOM de navigateur et un modèle d'exécution (et un modèle de sécurité). En effet, chaque élément de fonctionnalité (un "module") devrait avoir son code dans les trois langues. Pour ajouter à cela, la langue du sélecteur de jQuery devient une langue de plus à prendre en charge.

  • HTML + CSS manque de modèle intuitif et mathématiquement solide pour placer des objets. Même Tcl / Tk est à mon humble avis mieux pour définir les gestionnaires de géométrie. Cela empêche le programmeur de définir le rendu HTML en termes stricts et se fie plutôt à la chance: "peut-être que ce div fonctionnera la plupart du temps dans la plupart des navigateurs". Il y a cependant quelques développements positifs de ce côté, par exemple, HTML5 et Twitter Bootstrap.

  • La technologie Web s'est développée de manière organique et les frameworks ont grandi avec elle, leur forme n'est donc pas nécessairement élégante. Cela signifie que le programmeur doit se souvenir des API, qui sont sous-optimales, qui seront obsolètes, etc.

  • Les navigateurs Web présentent encore de légères incompatibilités et ajoutent une complexité inutile aux cadres Web

  • L'architecture globale est un gâchis. C'est une vision partagée du back-end et du frontend, qui sont liés à la demande / réponse du côté du backend et au rendu piloté par les données du côté du front-end. L'ordre d'exécution n'est pas très bien défini (la synchronisation nécessite des efforts) et le placement des styles, des scripts dans les emplacements appropriés est requis (presque tous les scripts js doivent être placés avant la fin de la balise body, etc.). La mise en cache est encore un autre aspect, qui s'étend du backend au proxy (s) au front-end. Et je ne mentionne même pas la gestion des formulaires!

  • Le framework Web traite nécessairement la plupart de ces complexités en ajoutant un grand nombre de concepts et de canaux de traitement.

  • Dans l'industrie du Web, le travail est généralement divisé entre concepteur graphique, concepteur Web / programmeur Web et programmeur principal comme ensemble minimum de rôles. Les deux premiers n'ont pas nécessairement des compétences en programmation, ils ont donc besoin d'abstractions et d'outils différents, et les cadres devraient également les faciliter

En résumé, les frameworks Web essaient d'abstraire beaucoup de complexité (ils deviennent eux-mêmes de plus en plus complexes), mais il est très difficile à réaliser en raison du développement rapide des normes et autres parties mobiles. Les langages de programmation sont beaucoup plus matures, car ce n'est généralement pas un problème de ne pas utiliser de nouvelles fonctionnalités.

Je pense que la création d'un cadre Web pratique ne sera possible qu'après la mise en place de normes GUI (couvrant différents modes de fonctionnement, tels que les appareils mobiles) et que les technologies sous-jacentes seront suffisamment stables.

Les cadres Web manquent de constructions simples car il n'y a rien de tel dans le domaine des technologies Web. Les abstractions de niveau inférieur fuient nécessairement vers un niveau supérieur.

Roman Susi
la source
3

Je pense que cela a beaucoup à voir avec les limites du WWW. Plus précisément, il n'existe aucun moyen intégré de stocker l'état entre le serveur et le client. Un client demande des données, le serveur les fournit et la connexion est fermée. En tant que telles, toutes ces plates-formes Web doivent mettre au point leur propre méthode de maintien de l'état entre les appels de serveur.

J'ai dû faire une petite application web une fois et à l'époque je n'avais jamais fait de programmation serveur / client. Il m'a fallu quelques semaines pour tout comprendre et la partie la plus difficile a été de me renseigner pour savoir où se trouvaient le client et le serveur.

Est-ce que cela changera jamais? J'en doute. Cela nécessiterait un changement fondamental dans l'architecture du web.

Justin
la source
2

De manière générale, les causes peuvent être multiples:

  1. L'écart d'abstraction est plus important dans le cas du cadre. Un langage procédural / POO moderne fournit une abstraction sur une machine mais conserve certaines constructions de machine (telles que l'attribution d'une variable à certaines données / l'écriture de certaines données dans une unité de mémoire, ou l'appel d'une procédure, etc.); l'écart n'est pas si grand, alors qu'un framework essaie de fournir une abstraction pour développer une application web qui fonctionne avec beaucoup plus de concepts.
  2. Les cadres peuvent être plus complexes du point de vue du programmeur; c'est comme une conséquence du premier point. Un langage de programmation est plutôt simple, il a des constructions simples (if, for, variables, procédures etc.). La bibliothèque standard résume également des choses simples comme écrire sur IO ou utiliser des collections. La bibliothèque standard est également très modularisée, avec peu ou pas de connexion entre les modules avec les autres; vous n'avez pas besoin de connaître IO pour utiliser les collections ou vice-versa. A noter que si certaines parties de la bibliothèque standard sont assez complexes, elles sont placées dans un mini-framework (par exemple Java Collections Framework ou Executors framework). Dans le cas du cadre, vous avez en quelque sorte besoin de connaître l'ensemble du flux, toutes les parties afin d'utiliser le cadre à sa pleine puissance. De plus, un framework est une application déjà construite;
  3. Moins de ressources sont placées dans un cadre que dans un langage de programmation. Je crois que cela n'a pas besoin d'être expliqué.
m3th0dman
la source
0

Ah, mais vous voyez que c'est exactement le problème. Les cadres ne sont pas censés être complets. Ils sont censés être composés d'abstractions plus restreintes qui peuvent être composées ensemble pour effectuer un ensemble spécifique de tâches de manière succincte. Donc, tous ces cadres que vous avez mentionnés ne sont pas amusants exactement parce qu'ils ne fournissent pas un ensemble restreint d'abstractions. Ils fournissent des abstractions qui fuient qu'en eux-mêmes ils composent une machine abstraite qui est plus que probable que Turing est complète. Le concept de " machines étranges " est la chose la plus proche à laquelle je pense. Tous ces cadres sont des "machines étranges" pour les applications Web et une "machine étrange" est l'opposé de ce qu'un cadre devrait être.

davidk01
la source
1
Je donne +1 parce que malgré la nature décousue de la publication, il est juste que les cadres ne soient pas nécessairement complets. C'est l'un des attraits d'un langage complet à usage général, la capacité de tout faire si vous savez comment.
Izkata