Pourquoi les grands sites Web utilisent-ils différentes langues pour le backend et le frontend?

26

D'après ce que je comprends des petites applications MVC, vous avez le front-end, qui traite de HTML, JS, jQuery, etc., et vous avez le back-end, qui se compose de vos contrôleurs et modèles.

Cependant, lorsque je parle à des développeurs de grandes entreprises, ils mentionnent souvent avoir un niveau frontend et un niveau backend. Donc, parfois, j'entends peut-être qu'ils ont un frontend avec C # et un backend avec Java. Pourquoi une entreprise voudrait-elle un backend et un frontend dans différentes langues? Est-ce que cela aide mieux le site Web à grande échelle?

Lorsque les gens disent que leur frontend est construit en C #, cela signifie-t-il qu'ils utilisent un framework pour le frontend (comme .NET) et un framework supplémentaire sur le backend (comme Spring)? Ou cela signifie-t-il quelque chose de complètement différent?

user1431282
la source
6
Pourquoi voudriez-vous avoir quelque chose dans la même langue?!? Les langues sont différentes, toutes sont réglées à des fins différentes. Il n'existe pas de «langage à usage général».
SK-logic
33
@ SK-logic: Vous ne pouvez sérieusement penser à aucun avantage d'écrire une seule application dans une seule langue?
back2dos
10
@ back2dos, non, je ne vois aucun avantage. C'est trop stupide d'essayer d'utiliser une langue pour quelque chose pour laquelle elle n'a pas été conçue. C'est stupide d'utiliser une langue dans une zone où il y en a une autre, bien mieux adaptée.
SK-logic
25
@ SK-logic: Avec cet argument, il est stupide d'utiliser tout langage populaire pour commencer, car pour n'importe quel domaine, il existe un DSL qui a été conçu uniquement pour cette zone. Mais je crois que vous le savez, donc je soupçonne que vous êtes juste d'humeur délirante aujourd'hui, sinon vous vous abstiendriez de ce niveau de généralisation et de débordement émotionnel.
back2dos
3
Les équipes / gestionnaires et plateformes piloteront la sélection de la langue avant toute tâche spécifique. C # ASP.NET a été choisi comme interface Web pour une application d'arrière-plan héritée Java, non pas parce qu'il y avait quelque chose de "si unique" dans cette application Web que la mettre dans la pile Windows était un ajustement parfait.
JeffO

Réponses:

67

«Front-end» et «Back-end» peuvent être des termes nébuleux, en particulier dans les applications d'entreprise. "Front-end" peut signifier l'interface utilisateur, ou ce peut être l'application entière. "Back-end" peut être utilisé pour désigner les internes, ou ce peut être la base de données ou les services externes qui sont consommés. La signification de ces termes dépend souvent entièrement de qui vous parlez. Alors, vous avez peut-être demandé "hé, qu'est-ce que tu veux dire par là?"

Lorsque vous entrez dans le développement d'une grande entreprise, vous allez avoir beaucoup, beaucoup d'équipes écrivant beaucoup, beaucoup de code. Ces équipes se développeront dans différentes langues, en utilisant différents paradigmes, à partir de différents endroits. Une partie de ce code devra fonctionner ensemble et une grande partie ne le sera pas.

Je travaille pour une grande banque. Mon équipe développe notre application en C #. Tout. Mais nous consommons des services Web qui sont largement écrits en Java, et ces services parlent à d'autres services qui parlent à d'autres services qui transfèrent les données de compte vers et depuis les magasins de données appropriés, et qui sait quelles langues sont utilisées avec ceux-ci.

Version courte: les gens utilisent les outils qui font le travail.

Anthony Pegram
la source
1
Maintenant, je veux créer un service Web public écrit en Malbolge qui fait quelque chose de vraiment simple / commun, juste pour que quelqu'un puisse dire que son backend le plus éloigné l'utilise.
Izkata
Comment obtenir cet effet de combinaison linguistique?
Abandonné
17

Je pense que vous devez élargir un peu la question: pourquoi les grands projets logiciels utilisent-ils plus d'un langage de programmation?

Il existe de nombreuses réponses possibles, les plus notables étant:

  • Les grandes applications se composent de nombreuses pièces relativement indépendantes; souvent, chaque pièce est construite par une équipe différente ou même un entrepreneur externe différent. L'avantage d'aller avec la meilleure offre est souvent plus important que l'avantage d'avoir tout dans la même langue.
  • Les langues vont et viennent, et parfois une composante d'un grand système survit à l'écosystème. Un exemple du monde Microsoft est le nombre d'entreprises qui utilisent désormais C # pour tous les nouveaux projets, mais elles ont toujours une base de code VB considérable. Le coût de la réécriture d'un projet juste pour le faire dans le dernier langage de programmation n'est pratiquement jamais justifié.
  • Interfaçage avec des composants tiers. Si votre écosystème C # doit effectuer une tâche spécifique pour laquelle seules des solutions Java existent, alors vous avez deux choix: implémentez la solution vous-même, ou utilisez la solution Java et développez un peu de colle pour l'intégrer dans votre système. Ce dernier est presque toujours moins cher pour toute tâche non triviale.

Les considérations de performances ne sont pratiquement jamais la raison, sauf dans les applications extrêmement critiques comme le trading haute fréquence - dans ces domaines, il peut être avantageux d'écrire le moteur de base critique dans un langage avec de meilleures performances d'exécution (par exemple, C ++), mais les systèmes de support (UI, reporting, etc.) dans quelque chose de niveau supérieur comme Java ou C #.

tdammers
la source
6

Il est relatif dans une grande entreprise.
Dans mon entreprise, la pile est à peu près

(html/javascript)--> (JSP on Tomcat and Java based WebCMS) -> (.Net SOA)  

Ainsi, pour l'équipe de développement Web, le frontend est HTML / JS et le backend est Java. Pour l'entreprise, le frontend est Java et le backend est .Net.

En fait, la couche .Net doit fonctionner avec une application COBOL / UNIX pour la facturation et les réclamations. Dans cette perspective, .Net est donc frontend et COBOL est backend.

Et oui, comme d'autres l'ont mentionné, nous avons des équipes de concepteurs UX, de développeurs HTML / JS, de développeurs Java, de middleware Web, de développeurs .Net, de développeurs SQL, de développeurs COBOL travaillant à chaque partie de la pile.

En fait, dans toute entreprise suffisamment grande, ce sont des tortues jusqu'en bas.

softveda
la source
+1 pour les tortues. Je suis juste content de ne pas être la tortue dont l'extrémité avant est le langage d'assemblage.
kmote
5

Sémantique déroutante

C'est un problème de sémantique. Quand quelqu'un dit un développeur front-end .NET ou Java, il parle généralement de la personne qui connaît beaucoup les langages de modèles et peut-être des frameworks qui ne devraient plus jamais être utilisés comme des formulaires Web qui ont été utilisés pour essayer de cacher le chuck de choses sur un mur http (c'est-à-dire "développement web") de développeurs d'applications qui ne voulaient pas ou du moins étaient supposés ne pas vouloir en savoir plus sur toutes ces conneries. Dans le cas de .NET et Java mixtes, je ne suis pas sûr, mais je ne pouvais que deviner que dans le sens des choses MVC, Java a agi pour toutes les choses du modèle commercial et .NET gère tout le reste qui serait mieux décrit en tant que "niveau intermédiaire", mais tout est toujours côté serveur.

La vraie séparation est ce qui se passe sur le serveur et ce qui se passe sur le client ou le navigateur. Vous pouvez facilement confondre la création du code HTML à envoyer ou la représentation du frontal avec le "développement frontal". Je préfère donc éviter toute confusion en utilisant les termes client et côté serveur plutôt que frontal et principal lorsque je discute de ce que je fais généralement, (travail généralement côté client).

Langues côté client

La raison pour laquelle nous utilisons le même ensemble de langues sur le navigateur est que le navigateur est du côté de la réception et pour la plupart (il y a maintenant une résistance majoritairement morte de Microsoft et d'Adobe à ce sujet), personne ne veut avoir à envoyer trois différentes versions du même côté client pour satisfaire chaque client potentiel ou nécessiter l'installation d'un plug-in propriétaire pour que le Web fonctionne. De plus, les trois langues résument assez bien les problèmes côté client, ce qui nous permet de créer et de modifier rapidement les frontaux des applications Web en maintenant un couplage lâche entre la structure du document, l'apparence de tout et la façon dont tout se comporte. Vous pouvez en changer un sans changer les deux autres assez facilement.

Langues côté serveur

La raison pour laquelle vous avez des milliards d'options sur le Web côté serveur est bien sûr parce que vous le pouvez. C'est votre serveur. Tout ce qu'il a à faire est de communiquer via http / ssl et le reste dépend de vous. JavaScript est désormais une option, mais cela soulève une question intéressante. Si vous traitez toujours une application Web comme s'il s'agissait en fait de deux applications de chaque côté de ce mur HTTP. Je suis d'avis éclairé par la douleur que oui, oui, vous devriez et j'aime Node.js.

Erik Reppen
la source
2

En bref, lorsque vous avez de grands projets, vous avez également plusieurs équipes de développeurs travaillant sur le projet, et ces équipes ont tendance à se spécialiser sur différentes couches de l'application.

Si vous vous concentrez sur l'interface utilisateur Web et que vous avez la flexibilité dans votre choix d'implémentation, vous êtes beaucoup plus susceptible d'utiliser un langage ciblé sur l'interface utilisateur Web, tel que JScript ou Flex, plutôt que C #.

De même, si vous êtes à la fin du magasin de données transactionnelles de l'application, traitant de nombreuses actions simultanées à la fois, les langages spécialisés tels que erlang ont tendance à être utilisés. (Ou des produits tiers qui sont implémentés en partie dans ces langues)

Michael Shaw
la source
2

La raison en est l'équilibre des risques commerciaux.

Disons que vous êtes un employeur géant dans une ville. Vous devez embaucher beaucoup de développeurs pour créer de nombreux services différents. Disons que votre évaluation initiale est que la langue A convient le mieux à vos intérêts et que vous souhaitez commencer par elle.

Si vous vous engagez à une technologie, vous pourriez tarir le bassin de talents. Êtes-vous sûr de vouloir embaucher un gars de Langauge A décent quand il y a une star de Language B juste au coin de la rue? Et si demain les frameworks de Langauge A saisissaient d'être supportés par le développeur principal? Et si demain il y a une langue C incroyable, devriez-vous l'ignorer parce que vous vous êtes engagé en langue A il y a cinq ans?

Idéalement, ce que vous voulez, c'est un système hétérogène avec différentes langues qui reflète le bassin de talents actuel et les tendances technologiques. Vous souhaitez que cet équilibre évolue lentement à mesure que le bassin de talents et les tendances évoluent, de sorte qu'à tout moment tous vos systèmes sont fonctionnels et que vous pouvez embaucher des personnes pour les maintenir.

... et c'est en quelque sorte ce que font les entreprises.

MrFox
la source
1

Il est utile de considérer votre serveur frontal et votre serveur principal comme des applications distinctes qui utilisent toutes deux la même source de données.

Même pour les petits sites, vous pouvez considérer le frontal comme étant l'interface avec laquelle le client et le back-end comme quelque chose comme un CMS. Celles-ci peuvent facilement être des applications MVC distinctes. Le front-end a toujours besoin de modèles et de contrôleurs pour fonctionner - après tout, le contrôleur est le point d'entrée pour les visiteurs de votre site et les modèles seront la façon dont vous obtiendrez les données de votre base de données pour l'utilisateur.

J'ai tendance à aimer utiliser Django / Python comme CMS sur le back-end et utiliser Rails, CodeIgniter ou Spring MVC sur le front-end. Souvent, il n'y a pas le choix; le client a déjà un site hérité configuré dans une langue sur le front-end et ils veulent juste une solution CMS. La plupart des clients ne sauraient même pas que le CMS exécutait un langage ou un framework différent s'ils ne le savaient pas.

Il s'agit vraiment de trouver ce qui fonctionne le mieux pour le site que vous souhaitez créer. Les extrémités avant et arrière n'ont vraiment besoin que de partager la base de données, donc tant qu'elles peuvent travailler avec cela, n'hésitez pas à choisir les meilleures options pour la tâche à accomplir.

Kenzo
la source
0

Un exemple de langage principal est PHP, qui est un langage de script. Lorsqu'une page PHP est demandée, le serveur lit le code PHP et rend le balisage. Le résultat est du HTML qui vous est envoyé. Vous, le visualiseur de pages Web, ne voyez jamais une seule ligne de code PHP. En supposant que l'administrateur du serveur Web a fait correctement son travail, le serveur ne vous montrera et ne pourra jamais vous montrer le code PHP réel. Il est analysé lorsque la page est servie et le résultat de cette traduction de code est HTML.

yuvashree
la source
Vous mélangez le côté client avec le frontal. Dans les applications d'entreprise, le backend est l'endroit où les données sont stockées et les commandes sont traitées, y compris la plus grande logique métier. la partie frontale est ce qui appelle ces systèmes backend pour piloter le côté Web (avec n'importe quelle technologie), une application de bureau ou une application mobile. Tout cela est considéré comme un codage frontal. Ensuite, c'est côté client contre côté serveur, mais je suis à court de place ici.
Rob van der Veer
Je ne vois pas comment votre réponse répond à la question principale de savoir pourquoi différentes langues sont utilisées pour les frontaux et les backends.