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

15

Oggi ho avuto un colloquio di lavoro per una posizione di lavoro come sviluppatore in un sito importante. Hanno chiesto tonnellate di domande relative al linguaggio di programmazione, che sono riuscito a rispondere senza problemi, ma poi hanno iniziato a porre 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 questi contenuti come studente, ma non li ricordo bene, perché sto lavorando principalmente allo sviluppo web, la mia domanda è:

Come sviluppatore di software, principalmente lavorando su applicazioni web, ho bisogno di avere ampia conoscenza di TCP / IP e di come i router gestiscono le richieste o è solo una conoscenza della scatola nera per me?

    
posta yannis 08.04.2011 - 22:40
fonte

9 risposte

25

Questo tipo di conoscenza è molto utile molto raramente.

Ad esempio, quando il tuo team ops 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 hai un problema relativo, ti sarà utile per individuarlo rapidamente e parlare con gli operatori, piuttosto che scavare per qualche stranezza nel codice. Ti servirà ancora meglio per capire la loro lingua quando fai quella conversazione.

Ma davvero non capisco perché le persone mettano tanto peso su questa roba nelle interviste, specialmente quando è per un programmatore junior. Non è certamente una conoscenza essenziale per tutti in una squadra e puoi essere istruito.

    
risposta data 08.04.2011 - 22:51
fonte
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 esaminare i dump di traccia HTTP o anche i registri di tcpdump , nel qual caso avrai bisogno almeno di una conoscenza passata di TCP / IP.

Ora, se mai dovresti effettivamente guardare un tcpdump dipende molto dai dettagli del tuo sito. Ad esempio, se disponi di un sito di grandi dimensioni con molti utenti e server distribuiti su più data center, creando un numero relativamente elevato di richieste (ad esempio Ajax, in particolare le richieste in stile Comet), quindi tcpdump s potrebbe essere qualcosa che devi guardare.

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

    
risposta data 08.04.2011 - 22:51
fonte
7

È sempre utile avere una comprensione di come si comportano i livelli sotto il livello che stai codificando, solo perché è terribilmente utile quando stai cercando di eseguire il debug di un problema relativamente complesso e devi capire perché la tua 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 essere 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 essere in grado di parlare e capire la lingua di tutti gli altri e di porre domande intelligenti. E più comprendi i vari dettagli di implementazione, più è probabile che sarai in grado di costruire un sito scalabile, ad esempio, comprendendo in che modo le diverse funzionalità che potresti implementare genererebbero traffico di rete che potrebbe introdurre latenza e comprendere come diverse strategie di caching per un un sito di grandi dimensioni potrebbe mitigare quei problemi di latenza.

Detto questo, c'è chiaramente un punto di diminuzione dei rendimenti in cui imparare di più su un'astrazione che è 6 livelli di astrazione lontano dal codice che stai scrivendo è improbabile che ti renda uno sviluppatore web migliore. Quindi dipenderà in una certa misura da cosa intendi per "esteso". Capire le basi di come i router gestiscono le richieste è qualcosa che potrebbe essere abbastanza utile ma capire come i diversi router possono essere configurati per dare la priorità a diversi tipi di traffico probabilmente non è molto utile a meno che non si lavori su un'applicazione che gli amministratori di rete probabilmente vogliono accelerare.

Ma anche se non è particolarmente pratico, gli sviluppatori forti tendono ad essere curiosi su diversi livelli dello stack e tendono ad informarsi su di loro anche se non c'è un chiaro vantaggio nel farlo. Tenderei ad aspettarmi che uno sviluppatore web che abbia una profonda conoscenza di come funzionano i database relazionali o di come funziona il networking sarebbe più strong di uno sviluppatore web che si limiti a conoscere solo le tecnologie di sviluppo web. Ovviamente, non è una correlazione perfetta, ma è ragionevole chiedere.

    
risposta data 08.04.2011 - 23:01
fonte
5

Dipende dal sito web che stai costruendo. Per i siti web di piccole / medie dimensioni, la conoscenza di base del protocollo TCP / IP è probabilmente soddisfacente.

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à frequentemente a prendere buone decisioni di progettazione.

    
risposta data 08.04.2011 - 22:52
fonte
3

Secondo me è necessario sapere in generale come i bit arrivano dalla tua applicazione al server e viceversa, soprattutto per una posizione di sviluppo web. Non ci sono scatole nere nella programmazione; tutte le perdita di astrazioni .

    
risposta data 08.04.2011 - 22:50
fonte
2

As a software developer, mainly working on web applications, do i need to have extensive knowledge of TCP/IP and how routers manage requests or it's just black box knowledge to me?

IMO, il fatto che tu sia uno sviluppatore di software (presumo con uno sfondo di CS) dovrebbe sapere su queste cose. In particolare se fai lo sviluppo web. Come ho accennato in uno dei miei commenti, ho fatto un carico di lavoro sulle spese di consulenza, semplicemente correggendo 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 mostrate, per favore! * ZOMG, i profili delle persone vengono incrociati perché le sessioni vengono memorizzate nella cache da qualche parte, per favore! * ZOMG, abbiamo un contenuto sicuro per gli utenti autenticati, ma le persone possono raggiungerli con un segnalibro e la schermata di autenticazione sanguinosa non viene visualizzata, per favore! "

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

C'è un sacco di cose tra la tua app web e il browser dell'utente: la tua app, la scheda NIC della tua app, un router e possibilmente un firewall, la scheda NIC interna del server http, il tuo server http, la tua scheda NIC in uscita sul server http , quindi un altro router e sicuramente un firewall. Quindi un dispositivo di memorizzazione nella cache e possibilmente un dispositivo SSL. Poi verso Internet con più router e server di memorizzazione nella cache, infine sul browser degli utenti (e sulla cache interna).

Un miliardo di cose possono andare storto e se non hai un briciolo di conoscenza su networking, protocolli di rete, sistemi operativi / sysadmin e architettura di Internet, sarai perso e in balia del tuo dipartimento IT OP ( dal momento che la maggior parte degli sviluppatori non ha accesso all'infrastruttura e non sa dove cercare quando risolve i problemi). Nel peggiore dei casi, ti renderà uno sviluppatore web davvero schifoso.

L'aspetto della programmazione dello sviluppo web è proprio questo, un aspetto. L'esecuzione riuscita di esso si basa direttamente su altre competenze (in particolare sul networking e sull'amministrazione di sistemi) che non possono essere date per scontate né delegate ciecamente alle operazioni IT. Ciò non significa che deve essere responsabile della risoluzione dei problemi di rete / OS, ma

a. È necessario sapere cosa può andare storto a livello di rete / sistema operativo in modo da poter collaborare e guidare IT OPS che non può mai avere una conoscenza approfondita della propria applicazione. b. Tale conoscenza ti consente di progettare il tuo sistema in modo da evitare, o almeno migliorare e gestire con garbo 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 delle imprese in generale, e nello sviluppo del web in particolare, queste sono cose che devi sapere. E onestamente, queste sono cose che dovrebbero essere apprese (molto fermamente) a scuola o attraverso l'autoapprendimento prima della laurea (o immediatamente dopo essere entrati nel mercato del lavoro).

Buona fortuna.

    
risposta data 06.05.2011 - 00:04
fonte
1

È importante capire il protocollo TCP / IP e in che modo i router gestiscono le richieste. Ma non hai bisogno di una conoscenza estesa su questo in un'intervista. A meno è stato precedentemente espresso. Altrimenti entrambi perdevi 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 una soluzione personalizzata. Passa un weekend con le reti di Tanenbaum e divertiti !!

    
risposta data 09.04.2011 - 05:45
fonte
1

Questa è una domanda complicata. Sì, penso che ogni sviluppatore dovrebbe avere una conoscenza di base TCP / IP e in che modo sono organizzate le reti basate su tale protocollo. Tuttavia ciò porta alla domanda su quanto sia esteso un knowlodge di base .

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

Penso che sia un po 'come guidare una macchina: dovresti sapere perché hai bisogno di un motore e perché hai bisogno di carburante ma come pilota medio non hai bisogno di sapere come calcolare la miscela perfetta di carburante e aria per processo di combustione.

    
risposta data 10.04.2011 - 19:40
fonte
0

Poche cose sono più frustranti di quelle che non capiscono i fondamenti di ciò che sta accadendo intorno a loro. Porta a ripetere le stesse domande più e più volte (in forma leggermente diversa, ovviamente.)

Quando ti trovi a fare domande ripetute, è ora di andare a segno. Esempi recenti di domande che ho ricevuto:

  • "Come configurare la rete se xyz?" ...
  • "Come posso configurare la rete se abc?" ...
  • Ripeti ...

In effetti, ho ricevuto tante domande ripetute da persone che hanno trovato più facile chiedere di nuovo che imparare, ho iniziato a tenerne traccia e a creare diapositive di PowerPoint. Ora, ogni sei mesi circa, gestisco una lezione pratica. La gente è quindi in grado di fare riferimento alle diapositive che ho fatto. Più tardi, quando chiedono qualcosa che abbiamo trattato in classe, mi riferisco gentilmente ad esso, e di solito ricordano che lo abbiamo coperto e riletto le diapositive da soli. Coloro che lo fanno in realtà imparano meglio l'argomento e lo trovano prezioso. Ha fatto una notevole differenza sotto forma di un minor numero di interruzioni alla mia giornata di lavoro.

Un altro pensiero: Nel mondo reale, i sistemi reali hanno così tante stranezze e problemi, è incredibilmente limitante non sapere più della sola conoscenza specifica del dominio. Qualsiasi idea di come funzionano le fondamenta sottostanti può solo aiutarti.

Ora, se è veramente fuori portata per ciò che dovresti sapere, allora va bene, non ti preoccupare. Ma se ti trovi a fare la domanda più di una volta, imparalo. Non te ne pentirai.

Bravo per aver fatto la domanda. Non smettere mai di imparare.

    
risposta data 13.04.2013 - 01:32
fonte

Leggi altre domande sui tag