Как разработчику программного обеспечения, в основном работающему над веб-приложениями, нужно ли мне иметь широкие знания по TCP / IP и тому, как маршрутизаторы управляют запросами, или это для меня просто «черный ящик»?
IMO, тот факт, что вы разработчик программного обеспечения (я полагаю, имеет опыт работы с CS), должен знать об этих вещах. В частности, если вы занимаетесь веб-разработкой. Как я уже упоминал в одном из моих комментариев, я взял на себя огромную нагрузку на консалтинг, просто исправляя действительно глупые ошибки, совершаемые людьми, которые не знают об основах сетевой / интернет-архитектуры.
ZOMG, изменения, которые я сделал на своем сайте, не отображаются, пожалуйста, помогите!
* ZOMG, профили людей пересекаются, потому что где-то кешируются сессии, помогите, пожалуйста! *
ZOMG, у нас есть защищенный контент для аутентифицированных пользователей, но люди могут получить к ним закладки, и появляется экран кровавой аутентификации, плз тех. Помогите! "
... и так далее, и так далее ... к сожалению ...
Между вашим веб-приложением и браузером пользователя существует масса вещей: ваше приложение, сетевой адаптер вашего приложения, маршрутизатор и, возможно, брандмауэр, затем внутренний сетевой адаптер вашего http-сервера, затем ваш http-сервер, затем исходящий сетевой адаптер http-сервера, затем другой маршрутизатор и, безусловно, брандмауэр. Затем устройство кеширования и, возможно, устройство SSL. Затем в Интернет с большим количеством маршрутизаторов и серверов кэширования, а затем, наконец, в браузер ваших пользователей (и его внутренний кеш).
Миллион вещей может пойти не так, и если у вас нет ни малейшего знания в области сетей, сетевых протоколов, операционных систем / системных администраторов и интернет-архитектуры, вы будете в растерянности и во власти вашего ИТ-отдела (поскольку большинство разработчиков не имеют доступа к инфраструктуре и не знают, где искать при поиске неисправностей). В худшем случае это сделает вас действительно дурацким веб-разработчиком.
Программный аспект веб-разработки - это только один аспект. Успешное его выполнение напрямую зависит от других навыков (в частности, сетевого и системного администрирования), которые нельзя воспринимать как должное или слепо делегировать ИТ-операциям. Это не означает, что вы должны нести ответственность за устранение неполадок сети / ОС, но
а. Вы должны знать, что может пойти не так на уровне сети / ОС, чтобы вы могли сотрудничать и руководить ИТ-отделом, который никогда не будет иметь глубоких знаний о вашем приложении. б. Такое знание позволяет вам спроектировать вашу систему так, чтобы она избегала или, по крайней мере, уменьшала и изящно справлялась с такими ошибками.
Программирование - это только один из аспектов проектирования и разработки. Это не может быть вашим основным навыком, и он действительно должен быть успешным в долгосрочной перспективе в развитии предприятия в целом и в веб-разработке в частности, это то, что вам нужно знать. И, честно говоря, это то, чему следовало научиться (очень твердо) либо в школе, либо путем самообучения перед окончанием обучения (или сразу после выхода на рынок труда).
Удачи.