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?
web-development
interview
Yannis
fuente
fuente
Respuestas:
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.
fuente
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
tcpdump
registros, 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
tcpdump
puede 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.
fuente
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.
fuente
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.
fuente
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 .
fuente
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.
fuente
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!
fuente
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.
fuente
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:
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.
fuente