¿Debe un desarrollador web comprender TCP / IP y cómo los enrutadores gestionan las solicitudes? [cerrado]

15

Hoy tuve una entrevista de trabajo para un puesto de trabajo como desarrollador en un sitio importante. Hicieron toneladas de preguntas relacionadas con el lenguaje de programación, que logré responder sin problemas, pero luego comenzaron a hacer preguntas sobre cómo se hicieron las solicitudes TCP / IP una vez que hice una solicitud en mi PC a un servidor web. Recibí esos contenidos como estudiante, pero no los recuerdo bien, porque estoy trabajando principalmente en desarrollo web, mi pregunta es:

Como desarrollador de software, que trabaja principalmente en aplicaciones web, ¿necesito tener un amplio conocimiento de TCP / IP y cómo los enrutadores gestionan las solicitudes o para mí es solo conocimiento de caja negra?

Yannis
fuente
¿Querían saber más acerca de cómo se hacen las solicitudes TCP / IP a nivel conceptual, o querían saber detalles? TCP / IP se utiliza debajo de las campanas cada vez que nos comunicamos en una red. Personalmente, creo que es muy importante entender cómo funcionan las cosas debajo de las campanas, al menos a nivel conceptual. Esto lo ayudará a detectar problemas y, a menudo, incluso a diseñar mejores soluciones.
Parag

Respuestas:

25

Este tipo de conocimiento es muy útil con muy poca frecuencia.

Por ejemplo, cuando su equipo de operaciones configura su sitio de producción detrás de un enrutador / cortafuegos / equilibrador de carga que está configurado de manera ligeramente diferente a la de su entorno de prueba y obtiene un problema relacionado con eso, le servirá para detectarlo. rápidamente y hable con las operaciones, en lugar de buscar alguna rareza en el código. Le servirá aún mejor poder comprender su idioma cuando tenga esa conversación.

Pero realmente no entiendo por qué la gente pone tanto peso en estas cosas en las entrevistas, especialmente cuando es para un programador junior. Ciertamente no es un conocimiento esencial para todos en un equipo y se le puede enseñar.

pdr
fuente
2
Buen punto para los programadores junior, pero no estoy seguro de qué posición de nivel @forgotmynick está solicitando :-)
Dean Harding
@Dean - Punto justo. Tiendo a suponer que las personas a las que se refieren cuando eran estudiantes no han estado en desarrollo más de 5 años. Pero tienes razón, ese no es siempre el caso.
pdr
1
Al menos saber lo que sucede cuando los enrutadores desconectan silenciosamente las conexiones, son realmente agradables en una configuración de producción. He sido mordido por eso más de una vez.
@pdr - No estoy de acuerdo. Este tipo de conocimiento es útil cuando quiere saber por qué las cosas tardan tanto o por qué las actualizaciones que realizó en su sitio no aparecen en los navegadores de sus usuarios. Cualquiera con un mínimo conocimiento de la red sabría la respuesta: el almacenamiento en caché. Personalmente, como consultor, he hecho un arreglo de carga sh * estúpidamente simple (y muy costoso para la compañía) cosas que la gente hubiera evitado si hubieran sabido estas cosas. No es como si esta ciencia espacial o mecánica cuántica tampoco. Quiero decir, vamos, no hay excusa para que un desarrollador jr no sepa sobre esto (especialmente si es de un fondo CS).
luis.espinal 05 de
@ luis.espinal - Sinceramente, no creo que hubiera agrupado el almacenamiento en caché en la misma categoría. No es una cuestión de redes, es una cuestión de navegador. Estoy de acuerdo con usted en que el almacenamiento en caché (navegador o servidor) es algo que todos deben entender porque es simple pero tiene muchas trampas. Pero TCP / IP?
pdr
16

Mi opinión personal es que un desarrollador web debe saber cómo funcionan los protocolos de bajo nivel. Particularmente HTTP, pero también (al menos lo básico) de TCP / IP. Dependiendo de la complejidad de su sitio, es posible que tenga que mirar los volcados de rastreo HTTP o incluso los tcpdumpregistros, en cuyo caso necesitará al menos un conocimiento básico de TCP / IP.

Ahora, si alguna vez tendrá que mirar un tcpdump depende mucho de los detalles de su sitio. Por ejemplo, si tiene un sitio grande con una gran cantidad de usuarios y servidores distribuidos en múltiples centros de datos, haciendo una cantidad relativamente grande de solicitudes (por ejemplo, Ajax, especialmente las solicitudes de estilo Comet), entonces tcpdumppuede ser algo que usted ' tendré que mirar.

Si todo lo que está trabajando es un sitio de intranet o algo bastante simple, entonces el conocimiento puede no ser tan importante, pero sigo pensando que conocer las cosas de bajo nivel siempre será de ayuda.

Dean Harding
fuente
3
jajaja ... yo no llamaría http un protocolo de bajo nivel
Pemdas
2
@Permdas: todo es relativo. HTTP es más alto que TCP, pero más bajo que (digamos) SOAP.
Dean Harding
1
SOAP es algo más específico de implementación que el protocolo. Desafortunadamente, sus implementaciones son tan cercanas entre sí, que lo llaman un "protocolo"
kagali-san
HTTP: sí TCP / IP: una comprensión rudimentaria de cómo y por qué realiza algunas operaciones de nivel superior probablemente esté bien. Dudo que se requiera un conocimiento profundo (o demasiado útil) en un entorno de desarrollo web
Andy Hunt
7

Siempre es útil comprender cómo se comportan las capas debajo de la capa que está codificando, aunque solo sea porque resulta terriblemente útil cuando intenta depurar un problema relativamente complejo y necesita comprender por qué su aplicación tiene problemas de rendimiento inesperados en una WAN o por qué falla para los usuarios que usan NAT, etc. También puede ser invaluable cuando necesita estar en una sala discutiendo un problema con los desarrolladores, los administradores del servidor web, los administradores de la red y los administradores de la base de datos para poder hablar y entender el idioma que todos los demás hablan y hacer preguntas inteligentes. Y cuanto más comprenda los diversos detalles de implementación, más probabilidades tendrá de poder construir un sitio escalable, por ejemplo,

Dicho esto, claramente hay un punto de rendimientos decrecientes donde aprender más sobre alguna abstracción que está a 6 capas de abstracción del código que está escribiendo es poco probable que lo convierta en un mejor desarrollador web. Por lo tanto, dependerá en cierta medida de lo que quiera decir con "extenso". Comprender los conceptos básicos de cómo los enrutadores administran las solicitudes es algo que podría ser bastante útil, pero comprender cómo se pueden configurar diferentes enrutadores para priorizar diferentes tipos de tráfico probablemente no sea terriblemente útil a menos que esté trabajando en una aplicación que los administradores de red probablemente deseen estrangular.

Pero incluso si no es particularmente práctico, los desarrolladores fuertes tienden a sentir curiosidad por las diferentes capas de la pila y tienden a aprender sobre ellas, incluso si no hay un beneficio claro al hacerlo. Tendería a esperar que un desarrollador web que tuviera una comprensión profunda de cómo funcionan las bases de datos relacionales o cómo funcionan las redes sería más fuerte que un desarrollador web que se limita a conocer solo las tecnologías de desarrollo web. Obviamente, no es una correlación perfecta, pero es razonable preguntar.

Justin Cave
fuente
+1 para "También puede ser invaluable cuando necesita estar en una sala discutiendo un problema con los desarrolladores, los administradores del servidor web, los administradores de la red y los administradores de la base de datos para poder hablar y comprender el idioma que todos los demás están hablando y hacer preguntas inteligentes "
Parag
5

Depende del sitio web que estés construyendo. Para sitios web pequeños / medianos, el conocimiento básico de TCP / IP probablemente sea bueno.

Si está trabajando en un sitio web superior (en términos de tráfico), un conocimiento detallado de los protocolos y la infraestructura de red subyacentes es extremadamente importante. Le guiará con frecuencia para tomar buenas decisiones de diseño.

Eric J.
fuente
3

En mi opinión, necesita saber en general cómo los bits llegan desde su aplicación al servidor y viceversa, especialmente para un puesto de desarrollo web. No hay cajas negras en la programación; Todas las abstracciones gotean .

Ryan Michela
fuente
2

Como desarrollador de software, principalmente trabajando en aplicaciones web, ¿necesito tener un amplio conocimiento de TCP / IP y cómo los enrutadores gestionan las solicitudes o para mí es solo conocimiento de caja negra?

En mi opinión, el hecho de que usted sea un desarrollador de software (supongo que con experiencia en CS) debería saber sobre estas cosas. En particular si haces desarrollo web. Como mencioné en uno de mis comentarios, he hecho una gran carga en las tarifas de consultoría simplemente arreglando errores realmente estúpidos cometidos por personas que no conocen los conceptos básicos de la arquitectura de red / Internet.

ZOMG, los cambios que hice en mi sitio web no se muestran, ¡por favor ayuda! * ZOMG, los perfiles de las personas se cruzan porque las sesiones se almacenan en caché en algún lugar, ¡por favor ayuda! * ZOMG, tenemos contenido seguro para usuarios autenticados, pero las personas pueden acceder a ellos con un marcador y la pantalla de autenticación sangrienta nunca aparece, por favor. ¡ayuda! "

... y así sucesivamente ... tristemente ...

Hay un montón de cosas entre su aplicación web y el navegador del usuario: su aplicación, la NIC de su aplicación, un enrutador y posiblemente un firewall, luego su NIC interna del servidor http, luego su servidor http, luego su NIC saliente del servidor http, luego otra enrutador y, sin duda, un firewall. Luego un dispositivo de almacenamiento en caché, y posiblemente un dispositivo SSL. Luego, salga a Internet con más enrutadores y servidores de almacenamiento en caché, y finalmente al navegador de sus usuarios (y su caché interna).

Un montón de cosas pueden salir mal, y si no tiene una pizca de conocimiento sobre redes, protocolos de red, sistemas operativos / administrador de sistemas y arquitectura de Internet, estará perdido y a merced de su departamento de OP de TI (ya que la mayoría de los desarrolladores ni tener acceso a la infraestructura ni saber dónde buscar al solucionar problemas). En el peor de los casos, te convertirá en un desarrollador web realmente malo.

El aspecto de programación del desarrollo web es solo eso, un aspecto. Su ejecución exitosa se ubica directamente sobre otras habilidades (en particular la administración de redes y sistemas) que no se pueden dar por sentado ni delegar ciegamente a las operaciones de TI. No significa que deba ser responsable de la solución de problemas de red / SO, pero

a. Debe saber qué puede salir mal en el nivel de red / SO para poder cooperar y guiar a OPS de TI que nunca puede tener un conocimiento íntimo de su aplicación. si. Tal conocimiento le permite diseñar su sistema para evitar, o al menos mejorar y hacer frente con gracia a tales errores.

La programación es solo un aspecto de la ingeniería y el desarrollo. No puede ser su habilidad principal, y realmente tener éxito a largo plazo en el desarrollo empresarial en general, y en el desarrollo web en particular, estas son cosas que debe saber. Y honestamente, estas son cosas que deberían haberse aprendido (con mucha firmeza) en la escuela o mediante el autoaprendizaje antes de la graduación (o inmediatamente después de ingresar al mercado laboral).

Buena suerte.

luis.espinal
fuente
1

Es importante comprender TCP / IP y cómo los enrutadores gestionan las solicitudes. Pero no sabes que necesitas un conocimiento extenso sobre eso en una entrevista. A menos se expresó previamente. De lo contrario, ambos perdieron el tiempo. Suena como una trampa.

Pero para un rol de Arquitecto, creo firmemente que este conocimiento es importante en cualquier caso. El tipo proporcionará soluciones que pueden aprovechar eso usando o incluso replicando la arquitectura en una solución personalizada. ¡Pasa un fin de semana con Tanenbaum Networks y relájate!

Eduardo Xavier
fuente
1

Esta es una pregunta difícil. Sí, creo que cada desarrollador debe tener un conocimiento básico de TCP / IP y cómo se organizan las redes basadas en ese protocolo. Sin embargo, eso lleva a la pregunta de cuán extenso se considera que es un conocimiento básico .

Creo que sin enfrentar ningún problema específico (y por lo tanto, necesita saber cómo están realmente organizadas las cosas "allá abajo") un desarrollador debe saber qué es un paquete y cómo se distribuyen los paquetes a través de la red (eso incluye saber qué tipos de máquinas ese paquete entra en contacto con). Sin embargo, creo que es suficiente saber que un enrutador distribuye paquetes a todos los receptores y que un conmutador entrega paquetes a ciertos receptores. Tampoco requeriría un devloper todas esas cosas de subred; estoy seguro de que no conozco todos los detalles yo mismo ;-) Debería saber que las subredes pueden estar aisladas y los paquetes deben enrutarse de la red A a la red B, pero todos los los detalles son demasiado para un desarrollador típico.

Creo que es un poco como conducir un automóvil: debe saber por qué necesita un motor y por qué necesita combustible, pero como conductor promedio no necesita saber cómo calcular la mezcla perfecta de combustible y aire para el proceso de combustión.

perdian
fuente
0

Pocas cosas son más frustrantes que las personas que no entienden los fundamentos de lo que sucede a su alrededor. Lleva a hacer las mismas preguntas una y otra vez (en forma ligeramente diferente, por supuesto).

Cuando te encuentres haciendo preguntas repetidas, es hora de ir a los libros. Ejemplos recientes de preguntas que he recibido:

  • "¿Cómo configuro la red si xyz?" ...
  • "¿Cómo configuro la red si abc?" ...
  • Repetir...

De hecho, recibí tantas preguntas repetidas de personas a las que les resultó más fácil preguntar de nuevo que aprender, comencé a seguirlas y a hacer diapositivas de Powerpoint. Ahora, cada seis meses más o menos, corro una clase práctica. La gente puede hacer referencia a las diapositivas que hice. Más tarde, cuando preguntan algo que cubrimos en clase, me refiero suavemente a él, y generalmente recuerdan que lo cubrimos y van a volver a leer las diapositivas por sí mismos. Quienes lo hacen realmente aprenden mejor el tema y lo encuentran valioso. Ha marcado una diferencia notable en la forma de menos interrupciones en mi jornada laboral.

Otro pensamiento: en el mundo real, los sistemas reales tienen muchas peculiaridades y problemas, es increíblemente limitante no saber más que solo su conocimiento específico de dominio. Cualquier idea de cómo funcionan los fundamentos subyacentes solo puede ayudarlo.

Ahora, si realmente está fuera del alcance de lo que debe saber, entonces no se preocupe. Pero si te encuentras haciendo la pregunta más de una vez, aprende. No te arrepentirás.

Bravo por hacer la pregunta. Nunca dejes de aprender.

kmort
fuente