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?
Réponses:
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.
la source
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.
la source
De manière générale, les causes peuvent être multiples:
la source
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.
la source