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?
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.