Sollte ein Webentwickler TCP / IP verstehen und wissen, wie Router Anforderungen verwalten? [geschlossen]


15

Ich hatte heute ein Vorstellungsgespräch für eine Stelle als Entwickler auf einer wichtigen Website. Sie stellten Unmengen programmiersprachenbezogener Fragen, die ich problemlos beantworten konnte, und stellten dann die Frage, wie TCP / IP-Anfragen gestellt wurden, nachdem ich auf meinem PC eine Anfrage an einen Webserver gestellt hatte. Ich habe diese Inhalte als Student erhalten, kann mich aber nicht gut an sie erinnern, da ich hauptsächlich in der Webentwicklung arbeite. Meine Frage ist:

Benötige ich als Softwareentwickler, der hauptsächlich an Webanwendungen arbeitet, umfassende Kenntnisse über TCP / IP und darüber, wie Router Anforderungen verwalten, oder nur Black-Box-Kenntnisse?


Wollten sie mehr darüber erfahren, wie TCP / IP-Anforderungen auf konzeptioneller Ebene gestellt werden, oder wollten sie Einzelheiten wissen? TCP / IP wird jedes Mal verwendet, wenn wir in einem Netzwerk kommunizieren. Ich persönlich halte es für sehr wichtig zu verstehen, wie die Dinge zumindest auf konzeptioneller Ebene unter der Haube funktionieren. Auf diese Weise können Sie Probleme erkennen und häufig sogar bessere Lösungen entwerfen.
Parag

Antworten:


25

Diese Art von Wissen kommt in sehr nützlich sehr selten.

Wenn Ihr OPS-Team beispielsweise Ihre Produktionsstätte hinter einem Router / Firewall / Load Balancer einrichtet, der sich geringfügig von dem in Ihrer Testumgebung unterscheidet und mit dem Sie ein Problem haben, können Sie dies gut erkennen schnell und sprechen Sie mit Ops, anstatt nach einer Kuriosität im Code zu suchen. Es wird Ihnen noch besser helfen, ihre Sprache zu verstehen, wenn Sie dieses Gespräch führen.

Aber ich verstehe wirklich nicht, warum die Leute in Interviews so viel Gewicht auf dieses Zeug legen, besonders wenn es sich um einen Junior-Programmierer handelt. Es ist sicherlich nicht für jeden in einem Team essentielles Wissen und man kann es unterrichten.


2
Guter Punkt für Junior-Programmierer, aber ich bin nicht sicher, für welche Level-Position sich @forgotmynick bewirbt :-)
Dean Harding

@ Dean - Fair Point. Ich neige dazu anzunehmen, dass Leute, die sich auf Studenten beziehen, nicht mehr als 5 Jahre in der Entwicklungsabteilung waren. Aber du hast recht, das ist nicht immer der Fall.
pdr

1
Zumindest das Wissen, was passiert, wenn Router lautlos Verbindungen trennen, ist in einer Produktionsumgebung sehr hilfreich. Wurde mehr als einmal davon gebissen.

@ pdr - Ich stimme nicht zu. Diese Art von Wissen ist nützlich, wenn Sie wissen möchten, warum die Dinge so lange dauern oder warum die Aktualisierungen, die Sie an Ihrer Site vorgenommen haben, nicht in den Browsern Ihrer Benutzer angezeigt werden. Jeder mit ein wenig Netzwerkwissen würde die Antwort kennen: Zwischenspeichern. Als Berater habe ich es mir zur Aufgabe gemacht, dumm einfache (und für das Unternehmen sehr kostspielige) Dinge zu beheben, die die Leute vermieden hätten, wenn sie diese Dinge gewusst hätten. Es ist auch nicht so, als ob diese Raketenwissenschaft oder Quantenmechanik. Ich meine, komm schon, es ist keine Entschuldigung für einen Entwickler, davon nichts zu wissen (besonders wenn er einen CS-Hintergrund hat).
Luis.espinal

@ luis.espinal - Um ehrlich zu sein, ich glaube nicht, dass ich Caching in der gleichen Kategorie gecachet hätte. Es ist keine Netzwerksache, es ist eine Browsersache. Ich stimme Ihnen zu, dass Caching (Browser oder Server) etwas ist, das jeder verstehen muss, weil es einfach ist, aber viele Fallstricke hat. Aber TCP / IP?
pdr

16

Meine persönliche Meinung ist , dass ein Web - Entwickler sollten wissen , wie die Low-Level - Protokolle arbeitet. Insbesondere HTTP, aber auch (zumindest die Grundlagen) von TCP / IP. Abhängig von der Komplexität Ihrer Site müssen Sie sich möglicherweise HTTP-Trace-Dumps oder sogar tcpdumpProtokolle ansehen. In diesem Fall benötigen Sie mindestens gute TCP / IP-Kenntnisse.

Ob Sie sich jemals einen tcpdump ansehen müssen, hängt stark von den Details Ihrer Site ab. Wenn Sie beispielsweise eine große Site mit vielen Benutzern und Servern haben, die über mehrere Rechenzentren verteilt sind und eine relativ große Anzahl von Anfragen stellen (z. B. Ajax, insbesondere auch Anfragen im Comet-Stil), ist es tcpdumpmöglicherweise etwas, was Sie tun. Ich muss schauen.

Wenn alles, woran Sie arbeiten, eine Intranetseite oder etwas ziemlich Einfaches ist, dann ist das Wissen vielleicht nicht so wichtig, aber ich denke immer noch, dass es immer eine Hilfe sein wird, wenn Sie die Dinge auf niedriger Ebene kennen.


3
lol ... ich würde http kein Low-Level-Protokoll nennen
Pemdas

2
@ Permdas: Es ist alles relativ. HTTP ist eine höhere Ebene als TCP, aber eine niedrigere Ebene als SOAP.
Dean Harding

1
SOAP ist eher eine implementierungsspezifische Sache als ein Protokoll. Leider sind seine Implementierungen so nah beieinander, dass sie es ein "Protokoll" nennen
kagali-san

HTTP: ja. TCP / IP: Ein rudimentäres Verständnis, wie und warum es einige Operationen auf höherer Ebene ausführt, ist wahrscheinlich in Ordnung. Ich bezweifle, dass in einer Webentwicklungsumgebung fundierte Kenntnisse erforderlich (oder zu oft nützlich) sind
Andy Hunt

7

Es ist immer hilfreich zu wissen, wie sich die Ebenen unter der Ebene, die Sie codieren, verhalten, wenn Sie versuchen, ein relativ komplexes Problem zu debuggen, und zu verstehen, warum Ihre Anwendung unerwartete Leistungsprobleme aufweist auf einem WAN oder warum es für Benutzer, die NAT verwenden, fehlschlägt usw. Es kann auch von unschätzbarem Wert sein, wenn Sie in einem Raum sein müssen, um ein Problem mit den Entwicklern, den Web-Server-Administratoren, den Netzwerk-Administratoren und den Datenbank-Administratoren diskutieren zu können die Sprache sprechen und verstehen, die alle anderen sprechen, und intelligente Fragen stellen. Und je besser Sie die verschiedenen Implementierungsdetails verstehen, desto wahrscheinlicher ist es, dass Sie eine skalierbare Site erstellen können, indem Sie beispielsweise

Das heißt, es gibt eindeutig einen Punkt, an dem die Renditen sinken, wenn Sie mehr über eine Abstraktion lernen, die 6 Abstraktionsebenen von dem Code entfernt ist, den Sie schreiben. Es wird also in gewissem Maße davon abhängen, was Sie unter "umfangreich" verstehen. Das Verständnis der Grundlagen zum Verwalten von Anforderungen durch Router ist möglicherweise sehr hilfreich. Das Verständnis, wie verschiedene Router zur Priorisierung verschiedener Arten von Datenverkehr konfiguriert werden können, ist jedoch wahrscheinlich nur dann von großem Nutzen, wenn Sie an einer Anwendung arbeiten, die Netzwerkadministratoren wahrscheinlich möchten zu drosseln.

Aber selbst wenn es nicht besonders praktisch ist, sind starke Entwickler neugierig auf verschiedene Ebenen des Stapels und lernen sie auch dann kennen, wenn dies keinen klaren Nutzen bringt. Ich würde eher erwarten, dass ein Webentwickler, der ein tiefes Verständnis für die Funktionsweise relationaler Datenbanken oder die Funktionsweise von Netzwerken hat, stärker ist als ein Webentwickler, der sich nur mit Webentwicklungstechnologien auskennt. Offensichtlich ist es keine perfekte Korrelation, aber es ist vernünftig zu fragen.


+1 für "Es kann auch von unschätzbarem Wert sein, wenn Sie sich in einem Raum befinden müssen, um ein Problem mit den Entwicklern, den Web-Server-Administratoren, den Netzwerk-Administratoren und den Datenbank-Administratoren zu besprechen und die Sprache zu verstehen, die alle anderen sprechen und intelligente Fragen zu stellen "
Parag

5

Hängt von der Website ab, die Sie erstellen. Für kleine / mittlere Websites sind Grundkenntnisse in TCP / IP wahrscheinlich ausreichend.

Wenn Sie an einer Top-Website arbeiten (in Bezug auf den Datenverkehr), ist eine detaillierte Kenntnis der zugrunde liegenden Netzwerkprotokolle und -infrastruktur äußerst wichtig. Es wird Sie häufig dabei unterstützen, gute Designentscheidungen zu treffen.


3

Meiner Meinung nach müssen Sie im Allgemeinen wissen, wie die Bits von Ihrer Anwendung zum Server und zurück gelangen, insbesondere für eine Webentwicklungsposition. Es gibt keine Blackboxen in der Programmierung; Alle Abstraktionen lecken .


2

Benötige ich als Softwareentwickler, der hauptsächlich an Webanwendungen arbeitet, umfassende Kenntnisse über TCP / IP und darüber, wie Router Anforderungen verwalten, oder nur Black-Box-Kenntnisse?

IMO sollte die Tatsache, dass Sie ein Softwareentwickler sind (ich nehme an, mit einem CS-Hintergrund), über diese Dinge Bescheid wissen. Insbesondere wenn Sie Webentwicklung betreiben. Wie ich in einem meiner Kommentare erwähnt habe, habe ich eine Menge Beratungsgebühren gezahlt, nur um wirklich dumme Fehler zu beheben, die von Leuten begangen wurden, die nicht über die Grundlagen der Netzwerk- / Internet-Architektur Bescheid wissen.

ZOMG, die Änderungen, die ich an meiner Website vorgenommen habe, werden nicht angezeigt, bitte um Hilfe! * ZOMG, die Profile der Leute werden gekreuzt, weil die Sitzungen irgendwo zwischengespeichert werden, bitte helfen Sie! * ZOMG, wir haben gesicherten Inhalt für authentifizierte Benutzer, aber die Leute können mit einem Lesezeichen auf sie zugreifen und der blutige Authentifizierungsbildschirm erscheint immer wieder, bitte Hilfe! "

... und so weiter und so fort ... leider ...

Es gibt eine Menge Dinge zwischen Ihrer Web-App und dem Browser des Benutzers: Ihre App, die Netzwerkkarte Ihrer App, ein Router und möglicherweise eine Firewall, dann die interne Netzwerkkarte Ihres HTTP-Servers, dann die ausgehende Netzwerkkarte Ihres HTTP-Servers und dann eine andere Router und sicherlich eine Firewall. Dann ein Caching-Gerät und möglicherweise ein SSL-Gerät. Gehen Sie dann mit mehr Routern und Cacheservern ins Internet und schließlich zum Browser Ihrer Benutzer (und seinem internen Cache).

Unzählige Dinge können schief gehen, und wenn Sie nicht genügend Kenntnisse über Netzwerke, Netzwerkprotokolle, Betriebssysteme / Sysadmin und Internetarchitektur haben, sind Sie verloren und der Gnade Ihrer IT-OPs-Abteilung ausgeliefert (seit den meisten Entwicklern) Weder haben Sie Zugang zur Infrastruktur, noch wissen Sie, wo Sie suchen müssen, wenn Sie Probleme beheben. Im schlimmsten Fall werden Sie zu einem wirklich beschissenen Webentwickler.

Der Programmieraspekt der Webentwicklung ist genau das, ein Aspekt. Die erfolgreiche Ausführung des Programms basiert auf anderen Fähigkeiten (insbesondere Netzwerk- und Systemadministration), die weder als selbstverständlich angesehen noch blind an den IT-Betrieb delegiert werden können. Dies bedeutet jedoch nicht, dass Sie für die Fehlerbehebung im Netzwerk / Betriebssystem verantwortlich sein müssen

ein. Sie müssen wissen, was auf Netzwerk- / Betriebssystemebene schief gehen kann, damit Sie mit IT-OPS zusammenarbeiten und diese anleiten können, die niemals genaue Kenntnisse über Ihre Anwendung haben können. b. Dieses Wissen ermöglicht es Ihnen, Ihr System so zu konstruieren, dass solche Fehler vermieden oder zumindest gebessert werden und es ordnungsgemäß behandelt wird.

Programmierung ist nur ein Aspekt des Engineerings und der Entwicklung. Dies kann nicht Ihre Hauptkompetenz sein und ist auf lange Sicht wirklich erfolgreich in der Unternehmensentwicklung im Allgemeinen und in der Webentwicklung im Besonderen. Dies sind Dinge, die Sie wissen müssen. Und ehrlich gesagt, dies sind Dinge, die (sehr fest) entweder in der Schule oder durch Selbstlernen vor dem Abschluss (oder unmittelbar nach dem Eintritt in den Arbeitsmarkt) gelernt werden sollten.

Viel Glück.


1

Es ist wichtig zu verstehen, wie TCP / IP und Router Anforderungen verwalten. Aber Sie wissen nicht, dass Sie bei einem Vorstellungsgespräch darüber umfassende Kenntnisse benötigen . Ein weniger wurde es vorher ausgedrückt. Sonst habt ihr beide Zeit verschwendet. Klingt nach einer Falle.

Für eine Architektenrolle bin ich jedoch der festen Überzeugung, dass dieses Wissen in jedem Fall wichtig ist. Der Typ wird Lösungen bereitstellen, die diese nutzen können, indem er die Architektur in einer benutzerdefinierten Lösung verwendet oder sogar repliziert. Haben Sie ein Wochenende mit Tanenbaum Networks und nehmen Sie einfach !!


1

Das ist eine knifflige Frage. Ja, ich denke jeder Entwickler sollte eine haben grundlegende Kenntnisse TCP / IP und wie auf diesem Protokoll basierte Netzwerke organisiert sind. Doch das führt zu der Frage, wie umfangreich ein Grund knowlodge betrachtet werden.

Ich denke, dass ein Entwickler, ohne auf ein bestimmtes Problem stoßen zu müssen (und daher wissen zu müssen, wie die Dinge dort unten wirklich organisiert sind), wissen sollte, was ein Paket ist und wie Pakete über das Netzwerk verteilt werden (dazu gehört auch, welche Arten von Computern dieses Paket kennt kommt in Kontakt mit). Es reicht jedoch zu wissen, dass ein Router Pakete an alle Empfänger verteilt und dass ein Switch bestimmte Pakete zustellt Empfänger übermittelt. Ich würde auch keinen Entwickler für all das Subnetz-Zeug benötigen - ich kenne sicher nicht alle Details selbst ;-) Ich sollte wissen, dass Subnetze möglicherweise isoliert sind und Pakete von Netz A nach Netz B geroutet werden müssen, aber alle Details sind für einen typischen Entwickler viel zu viel.

Ich denke, es ist ein bisschen wie beim Autofahren: Sie sollten wissen, warum Sie einen Motor benötigen und warum Sie Kraftstoff benötigen, aber als Durchschnittsfahrer müssen Sie nicht wissen, wie Sie die perfekte Mischung aus Kraftstoff und Luft für den Verbrennungsprozess berechnen.


0

Wenige Dinge sind frustrierender als Leute, die die Grundlagen dessen, was um sie herum vor sich geht, nicht verstehen. Es führt dazu, dass immer wieder dieselben Fragen gestellt werden (natürlich in etwas anderer Form.)

Wenn du wiederhole Fragen stellst, ist es Zeit, in die Bücher zu greifen. Aktuelle Beispiele für Fragen, die ich erhalten habe:

  • "Wie konfiguriere ich das Netzwerk, wenn xyz?" ...
  • "Wie konfiguriere ich das Netzwerk wenn abc?" ...
  • Wiederholen...

Tatsächlich bekam ich so viele wiederholte Fragen von Leuten, die es leichter fanden, sie erneut zu stellen als zu lernen. Ich begann, sie zu verfolgen und Powerpoint-Folien zu erstellen. Jetzt führe ich alle sechs Monate einen praktischen Kurs durch. Die Leute können dann auf die Folien verweisen, die ich gemacht habe. Wenn sie später etwas fragen, das wir im Unterricht behandelt haben, beziehe ich mich sanft darauf, und sie erinnern sich normalerweise, dass wir es behandelt haben, und lesen die Folien erneut für sich. Diejenigen, die dies tun, lernen das Thema tatsächlich besser und finden es wertvoll. Es hat einen bemerkenswerten Unterschied in Form von weniger Unterbrechungen für meinen Arbeitstag gemacht.

Ein anderer Gedanke: In der realen Welt haben reale Systeme so viele Macken und Probleme, dass es unglaublich einschränkend ist, nicht mehr als nur Ihr domänenspezifisches Wissen zu kennen. Jede Idee, wie die zugrunde liegenden Grundlagen funktionieren, kann Ihnen nur helfen.

Nun, wenn es für das, was Sie wissen sollten, wirklich nicht in Frage kommt, dann machen Sie sich darüber keine Sorgen. Aber wenn Sie feststellen, dass Sie die Frage mehr als einmal stellen, lernen Sie es. Du wirst es nicht bereuen.

Bravo für die Frage. Höre nie auf zu lernen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.