Je suis actuellement un développeur de back-end junior, j'écris Java _ et Scala et je l'aime.
Je veux vraiment entrer dans le développement du Web, mais cela semble que chaque fois que je cherche un peu de guide, c'est vraiment un guide pour un cadre spécifique. Je comprends totalement que la manière dont le Web a évolué au fil des ans a forcé les développeurs à des méthodes plus efficaces et dynamiques de construire des applications Web, mais comme un débutant, il est vraiment frustrant de ne même pas savoir où commencer.
Si je suis à la suite d'un Guide Flask, on ressent que j'apprends que je apprenne que la fiole, pas le développement Web, et si j'allais passer à Angular je pouvais peut-être utiliser 1% de la Flask _ Compétences que j'ai acquises.
Je ne veux pas apprendre Bootstrap, Vue ou Django. Je veux apprendre le développement du Web.
Une telle chose existe t elle? Et pourquoi il y a plutôt l'accent sur les cadres?
( REMARQUE : Il semble que l'édition du titre de la question originale soit arrivée depuis cette La réponse a été écrite et éventuellement changé de sens quelque peu. Le titre de la question initiale était moins clair, mais semblait demander pourquoi plusieurs cadres étaient nécessaires pour le développement Web.
En résumé, le Web est construit autour du concept de serveurs Web qui servent des données et du contenu en réponse aux demandes http entrantes et aux navigateurs Web qui envoient des demandes HTTP à un serveur Web afin d'obtenir des données et du contenu à partir d'une réponse HTTP.
De plus, http est sans connexion. Cela signifie que le navigateur Web ne contient aucun type de connexion ou de prise avec un serveur Web. Les navigateurs ne savent rien sur les serveurs Web. Les serveurs Web ne savent rien sur les navigateurs. Les deux agissent de manière totalement indépendante les uns des autres.
Un navigateur attend généralement une réponse lorsqu'il envoie une demande, mais elle n'a aucune idée de ce qui écoute à l'URL qu'elle a envoyé la demande à.
Un serveur recevant une demande n'a aucune idée de ce qui a envoyé cette demande - cela prend simplement cette demande, envoie une réponse, puis oublie la demande.
Cela signifie naturellement que vous avez toujours deux problèmes pour résoudre - que se passe-t-il dans le navigateur Web et que se passe-t-il sur le serveur Web.
Dans les premiers jours du Web, presque tous les contenus Web étaient tout simplement statiques HTML - généralement un mélange de texte et d'images et pas beaucoup d'autre. Le développement Web a eu tendance à signifier des charges de documents HTML statiques stockés dans une structure de dossiers, hébergée sur un simple serveur HTTP.
Les applications Web les plus modernes et sophistiquées ne font pas cela. Les serveurs stockent rarement des pages HTML statiques simples; Le contenu a tendance à être généré à la volée. Si ce contenu doit être généré sur le serveur, vous utilisez également un système de gestion de contenu comme WordPress ou écrire un service Web à l'aide d'un cadre comme Django ou fiole.
Si vous écrivez un serveur Web, tout code exécuté sur ce serveur présente généralement les capacités complètes des langues comme Python à sa disposition, tant que le serveur lui-même a des autorisations (par exemple, parler à une base de données, par exemple. Accéder au système de fichiers du serveur, accéder aux ressources réseau, etc.)
HTML n'a pas besoin d'être généré sur le serveur. Il peut plutôt être généré dans le navigateur. La plupart des applications Web sophistiquées ont des comportements programmatiques avancés, dynamiques et programmatiques fonctionnant directement dans le navigateur lui-même.
Cependant, un navigateur n'est pas un environnement d'exécution. Par conséquent, un navigateur Web ne peut pas utiliser de langues comme Python, Java ou C # pour créer un comportement de l'interface utilisateur dynamique.
Un navigateur n'est qu'une application qui se trouve avoir un moteur de script intégré; Les capacités des scripts de navigateur Web sont limitées à pouvoir fonctionner avec le contenu Web affichée dans le navigateur (création/manipulation en temps réel des éléments HTML), pour pouvoir fonctionner avec des événements et des entrées d'utilisateur en temps réel et pour pouvoir être capable. travailler avec des demandes/réponses http.
Donc, pour construire un comportement dynamique qui fonctionne dans le navigateur, vous avez besoin de ECMAScript (anciennement connu sous le nom de JavaScript). Cependant, tout comme des cadres modernes de bureau/interface graphique mobile dans C #/Java, il existe pour aider les développeurs à écrire des applications d'interface graphique (ainsi que de modèles tels que MVC et MVVM), il existe la même chose avec des cadres côté client comme Angular et web .
Ces cadres résolvent le même problème pour les développeurs Web que les cadres d'interface graphique ont été résolus pour Windows/* Nix Desktop Developers il y a 15 à 20 ans; Fournir des abstractions de haut niveau pour les développeurs Web afin de créer le comportement riche et interactif et dynamique qui fonctionne réellement dans le navigateur de l'utilisateur. Sinon, vous seriez confronté à une manipulation directe "de bas niveau" d'éléments HTML bruts à la place de l'ECMAScript (qui va bien si vous voulez juste faire quelque chose de très simple, mais pour des applications Web sophistiquées, c'est très difficile)
Le contenu de la plupart des sites Web/applications a souvent une esthétique élégante et élégante. À moins que vous souhaitiez que vos sites Web semblent appartenir à 1995, vous devez éviter les styles par défaut.
Toutefois, à moins que vous souhaitiez passer beaucoup de temps à concevoir votre propre look/sens esthétique avec CSS cru et à le faire fonctionner de manière cohérente avec de nombreux navigateurs/périphériques différents, vous êtes beaucoup mieux à l'aide d'un simple cadre CSS comme Bootstrap qui peut vous donner une apparence et une espérance propre/propre/élégante avec un effort minimal et sans avoir à passer beaucoup de temps à tout apprendre à le faire.
Différents cadres existent pour résoudre différents problèmes et travailler avec différents aspects du Web. Il n'est pas nécessaire d'utiliser n'importe quel cadre, mais le développement Web moderne a déplacé un long chemin au-delà des anciennes pages HTML JavaScript et statiques simples avec des polices romaines de Times.
En fin de compte, ils existent parce que les gens s'attendent à ce que leur expérience soit beaucoup plus sophistiquée et à regarder/se sentir beaucoup mieux que ce qu'il y a 20 ans, et en essayant de créer une application Web qui répond aux attentes des peuples impliquera d'utiliser quelque chose comme WordPress (qui implique une expertise technique minimale) ou implique d'utiliser ces cadres.
Développement Web est l'utilisation de cadres différents.
Si vous le souhaitez, vous pourriez écrire une application Web sans aucun cadre. Vous pouvez, par exemple, utilisez une interface de passerelle commune (CGI) sur le côté serveur, et une simple JavaScript sur le côté client, ce qui vous apportera deux avantages:
D'autre part, cela a un inconvénient majeur:
Les cadres font un bon travail d'abstraction de la complexité des technologies sous-jacentes. Http est assez complexe. JavaScript est moins complexe qu'il était il y a une décennie il y a une décennie avec tous les quartiers de langue et le comportement panoramique de la langue, mais présente toujours un tas de difficultés, y compris mais sans se limiter à la manipulation de DOM et de [absence] de liaison de données. Avec des cadres, vous n'avez pas besoin de penser à toutes les trucs de bas niveau la plupart du temps, et peut aussi se concentrer sur votre projet lui-même.
Par exemple, imaginez que vous souhaitez envoyer un fichier statique tel que A PDF============================ pour que le fichier soit mis en cache pendant deux heures sur le côté client. Avec n'importe quel serveur décent. -Side-cadre, vous le faites dans quelques lignes. Sans cadre, vous devrez passer beaucoup de temps à lire la spécification HTTP (et ce n'est pas la plus belle chose à lire!) Pour comprendre quels en-têtes HTTP doivent être utilisés. , comment les valeurs doivent être codées, etc. Habituellement, vous ne voulez pas passer du temps à faire ça (Eh bien, vous le faites, mais la plupart des développeurs ne le font pas et ne sont pas payés pour cela).
Cela ne signifie pas que vous devriez connaître des dizaines de cadres. A choisi un pour le serveur (vous avez choisi le flacon; c'est génial!), Et un côté client (angulaire et React conviennent bien, mais si vous voulez aller de niveau bas, JQuery est toujours Une alternative viable, bien que ce ne soit pas un cadre en soi). Coller avec votre choix pendant un an et apprendre ces cadres assez bien. Une fois que vous les comprenez, vous pouvez trouver ce que les autres cadres font le mieux.
Plus important encore, ne faites pas l'erreur de tant de programmeurs à sauter deux fois par mois à un nouveau cadre, car il est à la mode. Vous serez capable de mettre beaucoup de noms de fantaisie dans votre CV, mais cela ne vous obtiendra pas des compétences réelles ni de la compréhension du développement Web.
Vous êtes habitué à utiliser des langues générales pouvant faire presque tout d'effort.
Vous lisez sur les langages/châssis spécifiques à domaines qui font bien certaines choses. HTML, JSON, CSS, RAILS, etc. qui font tous faire exactement ce qu'ils font. Mais comme cette chose est tout ce qu'ils font bien, il est difficile d'utiliser un seul d'entre eux.
Vous pouvez vous attendre à ce que d'utiliser quelque chose qui fait beaucoup de choses fera de faire ces choses plus difficiles que si c'était seulement une chose. Le seul avantage d'une langue générale est que vous devez seulement l'apprendre une fois. Cela ne fait pas le meilleur choix. C'est pourquoi le Hodge Podge a tant de langues.
Ajoutez que le Web a une longue histoire fracturée avec des normes subverties et il est très difficile de construire une plate-forme uniforme qui les règne tous.
Désolé, vous devez apprendre au moins un outil qui nécessite chaque travail. Commencez par apprendre ce que chacun de ces emplois est. Il y a souvent plus d'une façon de les faire. Choisissez quelque chose et apprenez-le.
Les autres réponses ici offrent une grande histoire et une excellente explication de la conception Web, mais ne répondent pas directement à votre question exacte: Pourquoi y a-t-il tant cadres différents et concurrents?
La réponse est parce que développement de l'application Web tel que nous le savons, il est essentiellement d'environ une décennie. L'industrie du développement Web se situe à ses balbutiements dans le secteur du logiciel plus vaste, qui est lui-même un bébé par rapport à une grande partie de toutes les autres industries.
Avant l'explosion de l'iPhone, il existait un débat légitime dans la communauté de développement Web, que nous utilisions même ou non HTML/CSS/JS, ou si quelque chose comme le côté client Java ou flash allait devenir l'environnement par défaut pour les applications Internet riches (c.-à-d. Quel que soit votre blog). Donc, les devs Web divisaient leur temps entre Wrangling HTML/CSS/JS dans Internet Explorer, plus l'apprentissage de Flash lorsqu'ils le pouvaient et prier pour que les applets Java Les applets étaient toujours décédés vraiment. C'était un désordre et le monde du serveur était fermement déconnecté du côté client.
Il est facile d'oublier maintenant dans notre monde javascript moderne qui avant de sortir de Google Maps, personne ne pensait que l'utilisation de JavaScript pour développer de grandes applications interactives était une bonne idée. Ainsi, même apprécier JavaScript comme une langue robuste n'a été une chose que depuis environ 2005.
C'était vers 2008, lorsque l'iPhone a vraiment commencé à exploser en popularité et à la décision d'Apple de ne pas soutenir Flash sur iOS était, à mon avis, la mort Knelling pour Flash. Et même alors, cela nous a fallu quelques années pour vraiment digérer ce fait.
Donc, étant donné que c'était seulement 10-11 ans que nous, en tant qu'industrie, a décidé que HTML/CSS/JS soit une pile par défaut pour le développement Web. Ainsi, compte tenu de ce jeune âge, tous les cadres qui sont là-bas représentent à la fois notre industrie qui tente de comprendre, à la volée, de la manière la plus efficace de liaison des résultats générés avec des modèles HTML. Au début, la pensée était "générer les morceaux de modèle sur le serveur et les combiner dans une réponse HTTP". Ce modèle a fonctionné/fonctionne bien, mais retour à votre noyau de votre question, la raison pour laquelle il y a Java/Spring, ASP.NET, ROR, Django, etc., etc. est dû au fait que différents types de serveurs ont permis à différents niveaux de logiciels de fonctionner. Sur eux à différentes structures de tarification, il n'y avait pas une solution unique au niveau de la langue du serveur. Java et .Net était coûteux à courir, mais a permis de développer très très large. De plus, vous pouvez également faire des applications de bureau. PHP était pratiquement libre, mais légèrement limité lorsqu'il leur est comarpé.
Avec chaque nouvelle année, au niveau linguistique, les développeurs demandaient "Puis-je plier cette langue plus ancienne pour convenir au web, ou devrais-je choisir une nouvelle langue nouvelle conçue uniquement pour le Web lui-même?" Depuis d'ici 2010, 99% des applications Web ont été écrits dans JS/HTML, tous les gens qui avaient fait que Flash/Silverlight/Applet devait passer dans le mélange HTML, et leur façon préférée de faire des choses comme la liaison de données n'était pas Disponible de manière native dans Pure JavaScript, ils ont donc introduit une pression à l'intérieur du secteur du développement Web pour proposer des cadres Web qui ont rendu le Web Sentier State-Full.
Les premiers cadres qui ont fonctionné de cette manière incluaient des choses comme Knockout JS, qui a finalement été remplacée par angular, qui est allée si profonde pour tout faire sur le client, qu'une foule d'alternatives a poussé pour les gens qui ont estimé que le jus n'était pas vaut la pression pour la complexité de l'angulaire. En outre, il y a tellement de choses que vous ne pouvez tout simplement pas faire sur le client seul (sécurité appropriée, cryptage, etc.), que nous sommes obligés de diffuser la charge entre le client et le serveur et cela conduit à des charges d'opinions différentes sur exactement quelles fonctions doivent être placées sur le client et sur quoi sur le serveur. Et comme il y a des opinions différentes ici, des cadres différents ont émergé pour résoudre le problème différemment.
Enfin, une autre variable a été lancée dans les 7 à 8 dernières années, où le principe solide rock que JavaScript était juste pour le côté client a été jeté via l'introduction du côté serveur JavaScript. Cela provenait des gens qui ont été frustrés de devoir apprendre 2 langues minimum pour faire le bon développement Web: JS plus une langue du serveur. Cela a conduit à l'explosion moderne de Node.js, qui a de nouveau forcé un choix paradrain sur Devs.
Donc, en résumé, il y a environ 3 fondations différentes pour le développement Web:
Et à l'intérieur de chaque fondation ci-dessus, il existe une douzaine de cadres/stratégies diverses différenciés par leur tarification, leur langue, leurs exigences de serveur, etc. C'est donc la raison pour laquelle il n'y a pas n seul cadre pour les gouverner tous pour le développement Web moderne.