Hoje tive uma entrevista de emprego para um cargo como desenvolvedor em um site importante. Eles fizeram toneladas de perguntas relacionadas à linguagem de programação, que eu consegui responder sem problemas, mas começaram a fazer perguntas sobre como as solicitações TCP / IP eram feitas depois que eu fazia uma solicitação no meu PC para um servidor web. Recebi esses conteúdos quando estudante, mas não me lembro bem deles, porque estou trabalhando principalmente em desenvolvimento web, minha pergunta é:
Como desenvolvedor de software, trabalhando principalmente em aplicativos da web, preciso ter amplo conhecimento de TCP / IP e como os roteadores gerenciam solicitações ou é apenas conhecimento de caixa preta para mim?
web-development
interview
yannis
fonte
fonte
Respostas:
Esse tipo de conhecimento é muito útil com pouca frequência.
Por exemplo, quando sua equipe de operações configura seu site de produção atrás de um roteador / firewall / balanceador de carga configurado ligeiramente diferente daquele em seu ambiente de teste e você obtém um problema relacionado a isso, ele será útil para identificar rapidamente e converse com as operações, em vez de procurar alguma estranheza no código. Isso o ajudará ainda melhor a entender o idioma deles quando você tiver essa conversa.
Mas eu realmente não entendo por que as pessoas colocam tanto peso nessas coisas em entrevistas, especialmente quando é para um programador júnior. Certamente não é um conhecimento essencial para todos em uma equipe e você pode ser ensinado.
fonte
Minha opinião pessoal é que um desenvolvedor web deve saber como os protocolos de baixo nível funcionam. Particularmente HTTP, mas também (pelo menos o básico) do TCP / IP. Dependendo da complexidade do seu site, você pode ter que procurar despejos de rastreamento HTTP ou mesmo
tcpdump
logs, caso em que precisará de pelo menos um conhecimento de passagem do TCP / IP.Agora, se você realmente terá que olhar para um tcpdump depende muito dos detalhes do seu site. Por exemplo, se você tem um site grande com muitos usuários e servidores espalhados por vários datacenters, fazendo um número relativamente grande de solicitações (por exemplo, Ajax, especialmente solicitações no estilo Cometa), então
tcpdump
s pode ser algo que você ' Vou precisar olhar.Se tudo o que você está trabalhando é algum site de intranet ou algo bastante simples, o conhecimento pode não ser tão importante, mas ainda acho que conhecer o material de baixo nível sempre será uma ajuda.
fonte
É sempre útil entender como as camadas abaixo da camada que você está codificando se comportam, apenas porque são extremamente úteis quando você tenta depurar um problema relativamente complexo e precisa entender por que seu aplicativo tem problemas inesperados de desempenho em uma WAN ou por que ela falha nos usuários que usam NAT etc. Também pode ser inestimável quando você precisa estar em uma sala discutindo um problema com os desenvolvedores, os administradores do servidor da web, os administradores da rede e os administradores do banco de dados. falar e entender o idioma que todo mundo está falando e fazer perguntas inteligentes. E quanto mais você entender vários detalhes de implementação, maior será a probabilidade de criar um site escalável, por exemplo,
Dito isso, há claramente um ponto de retornos decrescentes, onde aprender mais sobre alguma abstração que fica a 6 camadas de abstração do código que você está escrevendo dificilmente o tornará um desenvolvedor web melhor. Portanto, isso dependerá, em certa medida, do que você entende por "extenso". Compreender o básico de como os roteadores gerenciam solicitações é algo que pode ser bastante útil, mas entender como diferentes roteadores podem ser configurados para priorizar diferentes tipos de tráfego provavelmente não é muito útil, a menos que você esteja trabalhando em um aplicativo que os administradores de rede provavelmente desejam estrangular.
Mas mesmo que não seja particularmente prático, desenvolvedores fortes tendem a ter curiosidade sobre as diferentes camadas da pilha e a aprender sobre elas, mesmo que não haja um benefício claro para isso. Eu tenderia a esperar que um desenvolvedor da Web que tivesse um profundo entendimento de como os bancos de dados relacionais funcionam ou como a rede funciona seria mais forte do que um desenvolvedor da Web restrito a conhecer apenas as tecnologias de desenvolvimento da Web. Obviamente, não é uma correlação perfeita, mas é razoável perguntar.
fonte
Depende do site que você está construindo. Para sites pequenos / médios, o conhecimento básico de TCP / IP provavelmente é bom.
Se você estiver trabalhando em um site importante (em termos de tráfego), é extremamente importante um conhecimento detalhado dos protocolos e da infraestrutura de rede subjacentes. Ele o guiará com frequência na tomada de boas decisões de design.
fonte
Na minha opinião, você precisa saber geralmente como os bits passam do seu aplicativo para o servidor e vice-versa, especialmente para uma posição de desenvolvimento web. Não há caixas pretas na programação; todas as abstrações vazam .
fonte
Na IMO, o fato de você ser um desenvolvedor de software (presumo que tenha experiência em CS) deve saber sobre essas coisas. Em particular, se você faz desenvolvimento web. Como mencionei em um de meus comentários, eu fiz uma carga absurda de taxas de consultoria apenas corrigindo erros realmente estúpidos cometidos por pessoas que não sabem o básico da arquitetura de rede / Internet.
ZOMG, as alterações que fiz no meu site não estão aparecendo, ajuda! * ZOMG, os perfis das pessoas estão sendo cruzados porque as sessões estão sendo armazenadas em cache em algum lugar, ajuda! * ZOMG, temos conteúdo seguro para usuários autenticados, mas as pessoas podem acessá-las com um marcador e os sangrentos nevers da tela de autenticação surgem, por favor Socorro! "
... e assim por diante ... infelizmente ...
Há um monte de coisas entre o aplicativo da web e o navegador do usuário: seu aplicativo, a NIC do seu aplicativo, um roteador e possivelmente um firewall, a NIC interna do servidor http, o servidor http, a NIC de saída do servidor http e outra roteador e certamente um firewall. Em seguida, um dispositivo de cache e, possivelmente, um dispositivo SSL. Depois, vá para a Internet com mais roteadores e servidores de cache e, finalmente, para o navegador dos usuários (e seu cache interno).
Um zilhão de coisas pode dar errado, e se você não tem um monte de conhecimento em redes, protocolos de rede, sistemas operacionais / sysadmin e arquitetura da Internet, estará perdido e à mercê do departamento de OPs de TI (já que a maioria dos desenvolvedores nem tenha acesso à infraestrutura nem saiba onde procurar ao solucionar problemas). Na pior das hipóteses, isso fará de você um desenvolvedor da Web realmente ruim.
O aspecto de programação do desenvolvimento web é apenas isso, um aspecto. A execução bem-sucedida dele assenta diretamente em outras habilidades (em particular, administração de redes e sistemas) que não podem ser consideradas como garantidas nem delegadas cegamente às operações de TI. Isso não significa que você deve ser responsável pela solução de problemas de rede / SO, mas
uma. Você deve saber o que pode dar errado no nível da rede / sistema operacional para poder cooperar e orientar o OPS de TI que nunca pode ter um conhecimento íntimo do seu aplicativo. b. Esse conhecimento permite que você projete seu sistema para evitar, ou pelo menos melhorar e lidar com esses erros com graciosidade.
A programação é apenas um aspecto da engenharia e desenvolvimento. Ela não pode ser sua principal habilidade e realmente ter sucesso a longo prazo no desenvolvimento empresarial em geral, e no desenvolvimento web em particular, essas são coisas que você precisa saber. E honestamente, essas são coisas que deveriam ter sido aprendidas (com muita firmeza) na escola ou através da auto-aprendizagem antes da formatura (ou imediatamente após a entrada no mercado de trabalho).
Boa sorte.
fonte
É importante entender o TCP / IP e como os roteadores gerenciam solicitações. Mas você não sabe que precisa de amplo conhecimento sobre isso em uma entrevista. A menos, foi previamente expresso. Caso contrário, vocês dois perderam tempo. Parece uma armadilha.
Mas para uma função de arquiteto, acredito firmemente que esse conhecimento é importante em qualquer instância. O cara fornecerá soluções que podem tirar vantagem disso usando ou mesmo replicando a arquitetura em uma solução personalizada. Tenha um fim de semana com a Tanenbaum Networks e relaxe!
fonte
Esta é uma pergunta complicada. Sim, acho que todo desenvolvedor deve ter um conhecimento básico sobre TCP / IP e como as redes baseadas nesse protocolo são organizadas. No entanto, isso leva à questão de quão extenso é considerado um conhecimento básico .
Eu acho que, sem enfrentar nenhum problema específico (e, portanto, precisando saber como as coisas estão realmente organizadas "lá em baixo"), um desenvolvedor deve saber o que é um pacote e como os pacotes são distribuídos pela rede (isso inclui saber que tipos de máquinas esses pacotes entra em contato com). No entanto, acho que é suficiente saber que um roteador distribui pacotes para todos os receptores e que um switch entrega pacotes para determinados receptores. Eu também não exigiria a um devloper todo esse material de sub-rede - eu certamente não conheço todos os detalhes ;-) Eu deveria saber que as sub-redes podem ser isoladas e os pacotes precisam ser roteados da rede A para a rede B, mas todos os detalhes são muito para um desenvolvedor típico.
Eu acho que é um pouco como dirigir um carro: você deve saber por que precisa de um motor e por que precisa de combustível, mas como motorista comum, não precisa saber como calcular a mistura perfeita de combustível e ar para o processo de combustão.
fonte
Poucas coisas são mais frustrantes do que pessoas que não entendem os fundamentos do que está acontecendo ao seu redor. Isso leva a fazer as mesmas perguntas repetidamente (de forma ligeiramente diferente, é claro).
Quando você se faz perguntas repetidas, é hora de acertar os livros. Exemplos recentes de perguntas que recebi:
Na verdade, recebi tantas perguntas repetidas de pessoas que acharam mais fácil perguntar novamente do que aprender, comecei a acompanhá-las e a fazer slides do Powerpoint. Agora, a cada seis meses, mais ou menos, eu dou uma aula prática. O pessoal pode fazer referência aos slides que eu criei. Mais tarde, quando perguntam algo que abordamos em sala de aula, eu me refiro gentilmente a ele, e eles costumam lembrar que o cobrimos e reler os slides por eles mesmos. Quem o faz realmente aprende melhor o assunto e o considera valioso. Fez uma diferença notável na forma de menos interrupções na minha jornada de trabalho.
Outro pensamento: no mundo real, os sistemas reais têm tantas peculiaridades e problemas, é incrivelmente limitante não saber mais do que apenas o seu conhecimento específico de domínio. Qualquer ideia de como os fundamentos subjacentes funcionam só pode ajudá-lo.
Agora, se realmente estiver fora do escopo para o que você deveria saber, tudo bem, não se preocupe. Mas se você se perguntar mais de uma vez, aprenda-a. Você não vai se arrepender.
Bravo por fazer a pergunta. Nunca pare de aprender.
fonte