Uno sviluppatore web dovrebbe comprendere TCP / IP e come i router gestiscono le richieste? [chiuso]


15

Ho avuto un colloquio di lavoro oggi per una posizione di lavoro come sviluppatore in un sito importante. Hanno fatto tonnellate di domande relative al linguaggio di programmazione, a cui sono riuscito a rispondere senza problemi, ma poi hanno iniziato a fare domande su come sono state fatte le richieste TCP / IP una volta che ho fatto una richiesta sul mio PC a un server web. Ho ricevuto quei contenuti come studente, ma non li ricordo bene, perché sto lavorando principalmente nello sviluppo web, la mia domanda è:

Come sviluppatore di software, lavorando principalmente su applicazioni Web, devo avere una conoscenza approfondita del TCP / IP e di come i router gestiscono le richieste o è solo una conoscenza della scatola nera per me?


Volevano saperne di più su come le richieste TCP / IP vengono fatte a livello concettuale o volevano conoscere le specifiche? TCP / IP viene utilizzato sotto le calotte ogni volta che comunichiamo su una rete. Personalmente credo che sia molto importante capire come funzionano le cose sotto i cofani almeno a livello concettuale. Questo ti aiuterà a individuare i problemi e spesso persino a progettare soluzioni migliori.
Parag,

Risposte:


25

Questo tipo di conoscenza risulta molto utile molto raramente.

Ad esempio, quando il tuo team operativo imposta il tuo sito di produzione dietro un router / firewall / bilanciamento del carico che è impostato in modo leggermente diverso da quello nel tuo ambiente di test e ricevi un problema relativo a ciò, ti servirà bene per individuarlo rapidamente e parla con gli operatori, piuttosto che cercare qualche stranezza nel codice. Ti servirà ancora meglio per essere in grado di capire la loro lingua quando hai quella conversazione.

Ma davvero non capisco perché le persone abbiano messo così tanto peso su queste cose nelle interviste, specialmente quando è per un programmatore junior. Non è certamente una conoscenza essenziale per tutti in una squadra e puoi insegnarti.


2
Buon punto per i programmatori junior, ma non sono sicuro di quale posizione di livello sia richiesta da @forgotmynick :-)
Dean Harding

@Dean - Punto giusto. Tendo a supporre che le persone che si riferiscono a quando erano studenti non sono state negli ultimi 5 anni. Ma hai ragione, non è sempre così.
pdr

1
Almeno sapere cosa succede quando i router rilasciano silenziosamente le connessioni, sono davvero utili in un ambiente di produzione. Sono stato morso da quello più di una volta.

@pdr - Non sono d'accordo. Questo tipo di conoscenza è utile quando vuoi sapere perché le cose impiegano così tanto tempo o perché gli aggiornamenti che hai apportato al tuo sito non vengono visualizzati nei browser degli utenti. Chiunque abbia un minimo di conoscenza della rete saprebbe la risposta: cache. Personalmente, come consulente, ho fatto un carico di lavoro risolvendo cose stupidamente semplici (e molto costose per l'azienda) che le persone avrebbero evitato se avessero saputo queste cose. Non è come se questa scienza missilistica o meccanica quantistica. Voglio dire, andiamo, nessuna scusa per un dev jr non saperlo (specialmente se di background CS).
luis.espinal

@ luis.espinal - In tutta onestà, non penso che avrei messo in blocco la cache nella stessa categoria. Non è una cosa di rete, è una cosa del browser. Sono d'accordo con te sul fatto che la memorizzazione nella cache (browser o server) è qualcosa che tutti devono capire perché è semplice ma ha molti aspetti positivi. Ma TCP / IP?
pdr

16

La mia opinione personale è che uno sviluppatore web dovrebbe sapere come funzionano i protocolli di basso livello. In particolare HTTP, ma anche (almeno le basi) di TCP / IP. A seconda della complessità del tuo sito, potresti trovarti a dover guardare i dump di traccia HTTP o persino i tcpdumplog nel qual caso avrai bisogno almeno di una conoscenza di TCP / IP.

Ora, se mai dovresti davvero guardare un tcpdump dipende molto dai dettagli del tuo sito. Ad esempio, se hai un sito di grandi dimensioni con molti utenti e server distribuiti su più data center, facendo un numero relativamente elevato di richieste (ad esempio Ajax, in particolare anche richieste in stile cometa), allora tcpdumppotresti essere qualcosa che dovrò guardare.

Se tutto ciò su cui stai lavorando è un sito intranet o qualcosa di abbastanza semplice, la conoscenza potrebbe non essere così importante, ma penso ancora che conoscere le cose di basso livello sarà sempre di aiuto.


3
lol ... non definirei http un protocollo di basso livello
Pemdas,

2
@Permdas: è tutto relativo. HTTP è di livello superiore a TCP, ma di livello inferiore di (diciamo) SOAP.
Dean Harding,

1
SOAP è qualcosa di più specifico dell'implementazione rispetto al protocollo. Sfortunatamente le sue implementazioni sono così vicine tra loro, che lo chiamano un "protocollo"
kagali-san,

HTTP: si. TCP / IP: una comprensione rudimentale di come e perché esegue alcune operazioni di livello superiore va probabilmente bene. Dubito che sia necessaria una conoscenza approfondita (o troppo spesso utile) in un ambiente di sviluppo web
Andy Hunt,

7

È sempre utile avere una comprensione di come si comportano i livelli sottostanti al livello che stai codificando, anche solo perché risulta estremamente utile quando stai provando a eseguire il debug di un problema relativamente complesso e devi capire perché l'applicazione ha problemi di prestazioni imprevisti su una WAN o perché non riesce per gli utenti che utilizzano NAT, ecc. Può anche essere prezioso quando è necessario trovarsi in una stanza per discutere di un problema con gli sviluppatori, gli amministratori del server Web, gli amministratori di rete e gli amministratori del database per poter parlare e comprendere la lingua che parlano tutti gli altri e porre domande intelligenti. E più comprendi i vari dettagli dell'implementazione, più è probabile che tu sia in grado di costruire un sito scalabile, ad esempio,

Detto questo, c'è chiaramente un punto di rendimenti decrescenti in cui imparare di più su qualche astrazione che è a 6 strati di astrazione dal codice che stai scrivendo è improbabile che ti faccia diventare uno sviluppatore web migliore. Quindi dipenderà in una certa misura da cosa intendi per "esteso". Comprendere le basi di come i router gestiscono le richieste è qualcosa che potrebbe essere abbastanza utile, ma capire come possono essere configurati router diversi per dare priorità a diversi tipi di traffico probabilmente non è terribilmente utile a meno che tu non stia lavorando su un'applicazione che gli amministratori di rete probabilmente vorranno accelerare.

Ma anche se non è particolarmente pratico, gli sviluppatori forti tendono ad essere curiosi dei diversi livelli dello stack e tendono a conoscerli anche se non ci sono chiari benefici nel farlo. Tenderei ad aspettarmi che uno sviluppatore web che avesse una profonda comprensione di come funzionano i database relazionali o di come funziona la rete sarebbe più forte di uno sviluppatore web che è limitato alla conoscenza delle sole tecnologie di sviluppo web. Ovviamente, non è una correlazione perfetta, ma è ragionevole chiederlo.


+1 per "Può anche essere prezioso quando devi essere in una stanza per discutere di un problema con gli sviluppatori, gli amministratori del web server, gli amministratori di rete e gli amministratori del database per essere in grado di parlare e capire la lingua che parlano tutti gli altri e porre domande intelligenti "
Parag,

5

Dipende dal sito Web che stai costruendo. Per i siti Web di piccole / medie dimensioni, la conoscenza di base di TCP / IP probabilmente va bene.

Se stai lavorando su un sito Web principale (in termini di traffico), una conoscenza dettagliata dei protocolli e dell'infrastruttura di rete sottostanti è estremamente importante. Ti guiderà spesso a prendere buone decisioni di progettazione.


3

A mio avviso, devi sapere in generale come vengono trasferiti i bit dalla tua applicazione al server e viceversa, soprattutto per una posizione di sviluppo web. Non ci sono scatole nere in programmazione; tutte le astrazioni perdono .


2

Come sviluppatore di software, lavorando principalmente su applicazioni Web, devo avere una conoscenza approfondita del TCP / IP e di come i router gestiscono le richieste o è solo una conoscenza della scatola nera per me?

IMO, il fatto che tu sia uno sviluppatore di software (presumo con un background CS) dovrebbe conoscere queste cose. In particolare se fai sviluppo web. Come ho accennato in uno dei miei commenti, ho fatto un grosso carico nelle commissioni di consulenza, risolvendo errori davvero stupidi fatti da persone che non conoscono le basi dell'architettura di rete / Internet.

ZOMG, le modifiche che ho apportato al mio sito Web non vengono visualizzate, per favore! * ZOMG, i profili delle persone vengono incrociati perché le sessioni vengono memorizzate nella cache da qualche parte, per favore! * ZOMG, abbiamo contenuti sicuri per gli utenti autenticati, ma le persone possono raggiungerli con un segnalibro e la schermata di autenticazione sanguinosa viene visualizzata, per favore Aiuto! "

... e così via e così via ... purtroppo ...

C'è un sacco di roba tra l'app Web e il browser dell'utente: l'app, la scheda NIC dell'app, un router e possibilmente un firewall, quindi la scheda NIC interna del server http, quindi il server http, quindi la scheda NIC in uscita del server http, quindi un'altra router e sicuramente un firewall. Quindi un dispositivo di memorizzazione nella cache e possibilmente un dispositivo SSL. Poi su Internet con più router e server di cache, infine sul browser degli utenti (e sulla sua cache interna).

Un milione di cose possono andare storte e, se non si dispone di una vasta gamma di conoscenze sulla rete, i protocolli di rete, i sistemi operativi / l'amministratore di sistema e l'architettura di Internet, sarete persi e in balia del reparto OP IT (poiché la maggior parte degli sviluppatori né avere accesso all'infrastruttura né sapere dove cercare durante la risoluzione dei problemi). Nel peggiore dei casi, ti renderà uno sviluppatore web davvero schifoso.

L'aspetto di programmazione dello sviluppo web è proprio questo, un aspetto. La sua corretta esecuzione si colloca esattamente al di sopra di altre competenze (in particolare reti e amministrazione di sistemi) che non possono essere date per scontate né delegate alla cieca alle operazioni IT. Non significa che devi essere responsabile della risoluzione dei problemi di rete / SO, ma

un. Devi sapere cosa può andare storto a livello di rete / sistema operativo in modo da poter collaborare e guidare l'IT OPS che non può mai avere una conoscenza intima della tua applicazione. b. Tale conoscenza ti consente di progettare il tuo sistema in modo da evitare, o almeno migliorare e gestire con grazia tali errori.

La programmazione è solo un aspetto dell'ingegneria e dello sviluppo. Non può essere la tua abilità principale e avere davvero successo a lungo termine nello sviluppo aziendale in generale, e nello sviluppo web in particolare, queste sono cose che devi sapere. E onestamente, queste sono cose che avrebbero dovuto essere apprese (con fermezza) a scuola o attraverso l'autoapprendimento prima della laurea (o immediatamente dopo l'ingresso nel mercato del lavoro).

In bocca al lupo.


1

È importante comprendere TCP / IP e come i router gestiscono le richieste. Ma non sai di aver bisogno di una conoscenza approfondita al riguardo durante un'intervista. A meno era precedentemente espresso. Altrimenti entrambi avete perso tempo. Sembra una trappola.

Ma per un ruolo di architetto credo fermamente che questa conoscenza sia importante in ogni caso. Il ragazzo fornirà soluzioni che possono trarne vantaggio utilizzando o addirittura replicando l'architettura in soluzione personalizzata. Passa un weekend con Tanenbaum Networks e rilassati !!


1

Questa è una domanda difficile. Sì, penso che ogni sviluppatore dovrebbe avere una conoscenza di base TCP / IP e come sono organizzate le reti basate su quel protocollo. Tuttavia, ciò porta alla questione di quanto sia estesa una conoscenza di base .

Penso che senza affrontare alcun problema specifico (e quindi bisogno di sapere come sono realmente organizzate le cose "laggiù") uno sviluppatore dovrebbe sapere cos'è un pacchetto e come i pacchetti sono distribuiti attraverso la rete (che include sapere quali tipi di macchine che pacchetto entra in contatto con). Tuttavia, penso sia sufficiente sapere che un router distribuisce i pacchetti a tutti i ricevitori e che uno switch consegna i pacchetti a determinati ricevitori. Inoltre non avrei bisogno di un devloper per tutte quelle cose della sottorete - di sicuro non conosco tutti i dettagli ;-) Dovrei sapere che le sottoreti potrebbero essere isolate e che i pacchetti devono essere instradati dalla rete A alla rete B ma tutti i i dettagli sono molto utili per uno sviluppatore tipico.

Penso che sia un po 'come guidare un'auto: dovresti sapere perché hai bisogno di un motore e perché hai bisogno di carburante, ma come guidatore medio non devi sapere come calcolare la miscela perfetta di carburante e aria per il processo di combustione.


0

Poche cose sono più frustranti delle persone che non comprendono i fondamenti di ciò che accade intorno a loro. Porta a porre le stesse domande più e più volte (in forma leggermente diversa, ovviamente.)

Quando ti ritrovi a fare domande ripetute, è tempo di leggere i libri. Esempi recenti di domande che ho ricevuto:

  • "Come configuro la rete se xyz?" ...
  • "Come configuro la rete se abc?" ...
  • Ripetere...

In effetti, ho ricevuto così tante domande ripetute da persone che hanno trovato più facile chiedere di nuovo che imparare, ho iniziato a tenerne traccia e a creare diapositive Powerpoint. Ora, ogni sei mesi circa, gestisco una lezione pratica. La gente è quindi in grado di fare riferimento alle diapositive che ho realizzato. Più tardi, quando chiedono qualcosa che abbiamo trattato in classe, mi riferisco delicatamente ad esso, e di solito ricordano che l'abbiamo coperto e rileggono da soli le diapositive. Coloro che lo fanno effettivamente imparano meglio la materia e la trovano preziosa. Ha fatto una notevole differenza sotto forma di meno interruzioni della mia giornata lavorativa.

Un altro pensiero: nel mondo reale, i sistemi reali hanno così tante stranezze e problemi, che è incredibilmente limitante non sapere altro che le tue conoscenze specifiche del dominio. Qualsiasi idea di come funzionano i fondamenti di base può solo aiutarti.

Ora, se è veramente fuori portata per quello che dovresti sapere, allora va bene, non preoccuparti. Ma se ti ritrovi a porre la domanda più di una volta, imparala. Non te ne pentirai.

Bravo per aver posto la domanda. Mai smettere di imparare.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.