Un développeur Web doit-il comprendre TCP / IP et comment les routeurs gèrent les demandes? [fermé]


15

J'ai eu un entretien d'embauche aujourd'hui pour un poste de développeur sur un site important. Ils ont posé des tonnes de questions liées au langage de programmation, auxquelles j'ai réussi à répondre sans problème, mais ils ont commencé à poser des questions sur la façon dont les demandes TCP / IP ont été faites une fois que j'ai fait une demande sur mon PC à un serveur Web. J'ai reçu ces contenus en tant qu'étudiant, mais je ne m'en souviens pas bien, car je travaille principalement dans le développement web, ma question est:

En tant que développeur de logiciels, travaillant principalement sur des applications Web, ai-je besoin d'avoir une connaissance approfondie de TCP / IP et de la façon dont les routeurs gèrent les demandes ou c'est juste une connaissance de la boîte noire pour moi?


Voulaient-ils en savoir plus sur la façon dont les demandes TCP / IP sont faites au niveau conceptuel, ou voulaient-ils en savoir plus? TCP / IP est utilisé sous les hottes chaque fois que nous communiquons sur un réseau. Personnellement, je crois qu'il est très important de comprendre comment les choses fonctionnent sous les hottes au moins au niveau conceptuel. Cela vous aidera à repérer les problèmes et souvent même à concevoir de meilleures solutions.
Parag

Réponses:


25

Ce type de connaissances est très rarement très utile .

Par exemple, lorsque votre équipe opérationnelle configure votre site de production derrière un routeur / pare-feu / équilibreur de charge qui est configuré légèrement différemment de celui de votre environnement de test et que vous rencontrez un problème lié à cela, il vous sera utile de le détecter. rapidement et parler aux ops, plutôt que de chercher une bizarrerie dans le code. Cela vous servira encore mieux de pouvoir comprendre leur langue lorsque vous aurez cette conversation.

Mais je ne comprends vraiment pas pourquoi les gens accordent autant d'importance à ce genre de choses dans les interviews, surtout quand c'est pour un programmeur junior. Ce n'est certainement pas une connaissance essentielle pour tout le monde dans une équipe et vous pouvez apprendre.


2
Bon point concernant les programmeurs juniors, mais je ne sais pas à quel niveau de poste @forgotmynick postule :-)
Dean Harding

@Dean - Juste point. J'ai tendance à supposer que les personnes qui se réfèrent quand elles étaient étudiantes n'ont pas fait de dev 5+ ans. Mais vous avez raison, ce n'est pas toujours le cas.
pdr

1
Au moins, savoir ce qui se passe lorsque les routeurs abandonnent silencieusement les connexions est vraiment agréable dans un environnement de production. J'ai été mordu par ça plus d'une fois.

@pdr - Je ne suis pas d'accord. Ce type de connaissances est utile lorsque vous voulez savoir pourquoi les choses prennent autant de temps ou pourquoi les mises à jour que vous avez apportées à votre site n'apparaissent pas dans les navigateurs de vos utilisateurs. Toute personne possédant un minimum de connaissances réseau connaîtrait la réponse: la mise en cache. Personnellement, en tant que consultant, j'ai fait un sh * load fixant des choses stupidement simples (et très coûteuses pour l'entreprise) que les gens auraient évités s'ils avaient su ces choses. Ce n'est pas comme si cette science des fusées ou la mécanique quantique non plus. Je veux dire, allez, aucune excuse pour un dev jr de ne pas savoir à ce sujet (surtout si d'un arrière-plan CS).
luis.espinal

@ luis.espinal - En toute honnêteté, je ne pense pas que j'aurais du tout mis en cache la même catégorie. Ce n'est pas une chose de réseautage, c'est une chose de navigateur. Je suis d'accord avec vous que la mise en cache (navigateur ou serveur) est quelque chose que tout le monde doit comprendre car elle est simple mais a beaucoup de problèmes. Mais TCP / IP?
pdr

16

Mon opinion personnelle est qu'un développeur Web devrait savoir comment fonctionnent les protocoles de bas niveau. Particulièrement HTTP, mais aussi (au moins les bases) de TCP / IP. Selon la complexité de votre site, vous devrez peut-être consulter des vidages de trace HTTP ou même des tcpdumpjournaux, auquel cas vous aurez besoin d'au moins une connaissance de passage de TCP / IP.

Maintenant, si vous devrez réellement regarder un tcpdump dépend beaucoup des particularités de votre site. Par exemple, si vous avez un grand site avec beaucoup d'utilisateurs et de serveurs répartis sur plusieurs centres de données, effectuant un nombre relativement important de demandes (par exemple Ajax, en particulier les demandes de style comète également), alors tcpdumps peut être quelque chose que vous '' ll faut regarder.

Si tout ce sur quoi vous travaillez est un site intranet ou quelque chose d'assez simple, alors la connaissance n'est peut-être pas si importante, mais je pense toujours que connaître les trucs de bas niveau sera toujours une aide.


3
lol ... je n'appellerais pas http un protocole de bas niveau
Pemdas

2
@Permdas: tout est relatif. HTTP est de niveau supérieur à TCP, mais de niveau inférieur à (disons) SOAP.
Dean Harding le

1
SOAP est plus spécifique à l'implémentation que le protocole. Malheureusement, ses implémentations sont si proches les unes des autres qu'elles appellent cela un "protocole"
kagali-san

HTTP: oui. TCP / IP: une compréhension rudimentaire de comment et pourquoi il exécute des opérations de niveau supérieur est probablement correcte. Je doute qu'une connaissance approfondie soit requise (ou trop souvent utile) dans un environnement de développement Web
Andy Hunt

7

Il est toujours utile de comprendre le comportement des couches situées sous la couche que vous codez, ne serait-ce que parce que cela s'avère extrêmement utile lorsque vous essayez de déboguer un problème relativement complexe et que vous devez comprendre pourquoi votre application a des problèmes de performances inattendus. sur un WAN ou pourquoi il échoue pour les utilisateurs utilisant NAT, etc. Il peut également être inestimable lorsque vous devez être dans une pièce pour discuter d'un problème avec les développeurs, les administrateurs de serveur Web, les administrateurs de réseau et les administrateurs de base de données pour pouvoir parler et comprendre la langue que tout le monde parle et poser des questions intelligentes. Et plus vous comprenez les différents détails de mise en œuvre, plus vous avez de chances de pouvoir créer un site évolutif, par exemple,

Cela dit, il y a clairement un point de rendements décroissants où en savoir plus sur une abstraction qui est à 6 couches d'abstraction du code que vous écrivez ne fera probablement pas de vous un meilleur développeur Web. Cela dépendra donc dans une certaine mesure de ce que vous entendez par «extensif». Comprendre les bases de la façon dont les routeurs gèrent les demandes est quelque chose qui pourrait être très utile, mais comprendre comment différents routeurs peuvent être configurés pour hiérarchiser différents types de trafic n'est probablement pas très utile, sauf si vous travaillez sur une application que les administrateurs réseau voudront probablement à étrangler.

Mais même si ce n'est pas particulièrement pratique, les développeurs forts ont tendance à être curieux de connaître les différentes couches de la pile et à en apprendre davantage à leur sujet même s'il n'y a aucun avantage clair à le faire. J'aurais tendance à penser qu'un développeur Web qui avait une compréhension approfondie du fonctionnement des bases de données relationnelles ou du fonctionnement du réseautage serait plus fort qu'un développeur Web limité à la seule connaissance des technologies de développement Web. Évidemment, ce n'est pas une corrélation parfaite, mais il est raisonnable de demander.


+1 pour "Cela peut également être inestimable lorsque vous devez être dans une pièce pour discuter d'un problème avec les développeurs, les administrateurs de serveur Web, les administrateurs de réseau et les administrateurs de base de données pour pouvoir parler et comprendre la langue que tout le monde parle et de poser des questions intelligentes "
Parag

5

Cela dépend du site Web que vous créez. Pour les sites Web de petite / moyenne taille, la connaissance de base de TCP / IP est probablement correcte.

Si vous travaillez sur un site Web de premier plan (en termes de trafic), une connaissance détaillée des protocoles et de l'infrastructure réseau sous-jacents est extrêmement importante. Il vous guidera fréquemment dans la prise de bonnes décisions de conception.


3

À mon avis, vous devez généralement savoir comment les bits passent de votre application au serveur et inversement, en particulier pour un poste de développement Web. Il n'y a pas de boîtes noires dans la programmation; toutes les abstractions fuient .


2

En tant que développeur de logiciels, travaillant principalement sur des applications Web, dois-je avoir une connaissance approfondie de TCP / IP et de la façon dont les routeurs gèrent les demandes ou est-ce simplement une connaissance de la boîte noire pour moi?

IMO, le fait que vous soyez un développeur de logiciels (je suppose avec une formation CS) devrait être au courant de ces choses. En particulier si vous faites du développement web. Comme je l'ai mentionné dans l'un de mes commentaires, j'ai fait une charge de frais de consultation juste pour corriger des erreurs vraiment stupides commises par des gens qui ne connaissent pas les bases de l'architecture réseau / Internet.

ZOMG, les modifications que j'ai apportées à mon site Web ne s'affichent pas, aidez-moi! * ZOMG, les profils des gens se croisent parce que les sessions sont mises en cache quelque part, aidez-vous! * ZOMG, nous avons du contenu sécurisé pour les utilisateurs authentifiés, mais les gens peuvent y accéder avec un signet et l'écran d'authentification sanglant ne s'affiche jamais, plz teh Aidez-moi! "

... et ainsi de suite et ainsi de suite ... malheureusement ...

Il y a une tonne de choses entre votre application Web et le navigateur de l'utilisateur: votre application, la carte réseau de votre application, un routeur et éventuellement un pare-feu, puis la carte réseau interne de votre serveur http, puis votre serveur http, puis votre carte réseau sortante de serveur http, puis une autre routeur et certainement un pare-feu. Ensuite, un périphérique de mise en cache, et éventuellement un périphérique SSL. Ensuite, allez sur Internet avec plus de routeurs et de serveurs de mise en cache, puis enfin sur le navigateur de vos utilisateurs (et son cache interne).

Un tas de choses peuvent mal tourner, et si vous n'avez pas un iota de connaissances sur la mise en réseau, les protocoles réseau, les systèmes d'exploitation / administrateur système et l'architecture Internet, vous serez perdu et à la merci de votre service informatique OP (puisque la plupart des développeurs ni avoir accès à l'infrastructure ni savoir où chercher lors du dépannage de choses). Au pire, cela fera de vous un développeur Web vraiment merdique.

L'aspect programmation du développement Web n'est que cela, un aspect. L'exécution réussie de celui-ci va de pair avec d'autres compétences (en particulier la gestion de réseaux et de systèmes) qui ne peuvent pas être considérées comme acquises ni déléguées aveuglément aux opérations informatiques. Cela ne signifie pas que vous devez être responsable du dépannage du réseau / du système d'exploitation, mais

une. Vous devez savoir ce qui peut mal se passer au niveau du réseau / OS afin de pouvoir coopérer et guider les IT OPS qui ne peuvent jamais avoir une connaissance intime de votre application. b. Une telle connaissance vous permet de concevoir votre système de manière à éviter, ou au moins à améliorer et à gérer avec élégance ces erreurs.

La programmation n'est qu'un aspect de l'ingénierie et du développement. Ce ne peut pas être votre compétence principale, et réussir vraiment à long terme dans le développement d'entreprise en général, et dans le développement Web en particulier, ce sont des choses que vous devez savoir. Et honnêtement, ce sont des choses qui auraient dû être apprises (très fermement) soit à l'école, soit par l'auto-apprentissage avant l'obtention du diplôme (ou dès l'entrée sur le marché du travail).

Bonne chance.


1

Il est important de comprendre TCP / IP et comment les routeurs gèrent les requêtes. Mais vous ne savez pas avoir besoin de connaissances approfondies à ce sujet lors d'une interview. Un peu, il a été précédemment exprimé. Sinon, vous avez tous les deux perdu du temps. Cela ressemble à un piège.

Mais pour un rôle d'architecte, je crois fermement que cette connaissance est importante à tout moment. Le gars fournira des solutions qui peuvent en profiter en utilisant ou même en reproduisant l'architecture dans une solution personnalisée. Passez un week-end avec Tanenbaum Networks et détendez-vous !!


1

C'est une question délicate. Oui, je pense que chaque développeur devrait avoir une connaissance de base TCP / IP et comment les réseaux basés sur ce protocole sont organisés. Cependant, cela conduit à se demander dans quelle mesure un savoir de base est considéré comme important.

Je pense que sans faire face à un problème spécifique (et donc avoir besoin de savoir comment les choses sont vraiment organisées "là-bas"), un développeur devrait savoir ce qu'est un paquet et comment les paquets sont distribués via le réseau (ce qui inclut de savoir quels types de machines ce paquet entre en contact avec). Cependant, je pense qu'il suffit de savoir qu'un routeur distribue des paquets à tous les récepteurs et qu'un commutateur délivre des paquets à certains récepteurs. Je ne demanderais pas non plus à un développeur tous ces trucs de sous-réseau - je ne connais pas tous les détails moi-même ;-) Je dois savoir que les sous-réseaux peuvent être isolés et que les paquets doivent être routés du réseau A vers le réseau B mais tous les les détails sont beaucoup trop pour un développeur typique.

Je pense que c'est un peu comme conduire une voiture: vous devez savoir pourquoi vous avez besoin d'un moteur et pourquoi vous avez besoin de carburant, mais en tant que conducteur moyen, vous n'avez pas besoin de savoir comment calculer le mélange parfait de carburant et d'air pour le processus de combustion.


0

Peu de choses sont plus frustrantes que les gens qui ne comprennent pas les principes fondamentaux de ce qui se passe autour d'eux. Cela conduit à poser les mêmes questions encore et encore (sous une forme légèrement différente, bien sûr.)

Lorsque vous vous retrouvez à poser des questions répétées, il est temps de frapper les livres. Exemples récents de questions que j'ai reçues:

  • "Comment configurer le réseau si xyz?" ...
  • "Comment configurer le réseau si abc?" ...
  • Répéter...

En fait, j'ai reçu tellement de questions répétées de gens qui ont trouvé plus facile de poser que d'apprendre, j'ai commencé à les suivre et à faire des diapositives Powerpoint. Maintenant, tous les six mois environ, je donne un cours pratique. Les gens peuvent alors faire référence aux diapositives que j'ai faites. Plus tard, quand ils demandent quelque chose que nous avons couvert en classe, je me réfère doucement à eux, et ils se souviennent généralement que nous l'avons couvert et vont relire les diapositives par eux-mêmes. Ceux qui le font apprennent mieux le sujet et le trouvent précieux. Cela a fait une différence remarquable sous la forme de moins d'interruptions de ma journée de travail.

Une autre pensée: dans le monde réel, les vrais systèmes ont tellement de bizarreries et de problèmes, c'est incroyablement limitant de ne pas en savoir plus que vos connaissances spécifiques au domaine. Toute idée du fonctionnement des fondamentaux sous-jacents ne peut que vous aider.

Maintenant, si c'est vraiment hors de portée de ce que vous devez savoir, alors ne vous inquiétez pas. Mais si vous vous retrouvez à poser la question plus d'une fois, apprenez-la. Vous ne le regretterez pas.

Bravo d'avoir posé la question. N'arrêtez jamais d'apprendre.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.