Должен ли веб-разработчик понимать TCP / IP и как маршрутизаторы управляют запросами? [закрыто]

15

Сегодня у меня было собеседование на вакансию в качестве разработчика на важном сайте. Они задали тонны вопросов, связанных с языком программирования, на которые мне удалось ответить без проблем, но затем они начали задавать вопрос о том, как делались запросы TCP / IP после того, как я отправил запрос на ПК на веб-сервер. Я получил это содержимое еще студентом, но я плохо помню его, потому что я работаю в основном над веб-разработкой, мой вопрос:

Как разработчику программного обеспечения, в основном работающему над веб-приложениями, мне нужно иметь обширные знания по TCP / IP и тому, как маршрутизаторы управляют запросами, или это для меня просто «черный ящик»?

Яннис
источник
Хотели ли они узнать больше о том, как запросы TCP / IP делаются на концептуальном уровне, или они хотели знать особенности? TCP / IP используется под капотом каждый раз, когда мы общаемся по сети. Я лично считаю, что очень важно понимать, как все работает под капотом, по крайней мере, на концептуальном уровне. Это поможет вам определить проблемы и зачастую даже разработать более эффективные решения.
Параг

Ответы:

25

Этот вид знаний очень полезен очень редко.

Например, когда ваша рабочая группа настраивает ваш производственный сайт за маршрутизатором / брандмауэром / балансировщиком нагрузки, который настроен несколько иначе, чем в вашей тестовой среде, и у вас возникает проблема, связанная с этим, это поможет вам определить это. быстро и поговорить с оперативниками, а не копаться в поисках странностей в коде. Это поможет вам еще лучше понять их язык, когда вы разговариваете.

Но я действительно не понимаю, почему люди придают такое значение в интервью, особенно когда это для младшего программиста. Это, безусловно, не является обязательным знанием для всех в команде, и вас можно научить.

прецизионный самописец
источник
2
Хороший вопрос, младшие программисты, но я не уверен, на какую вакансию претендует @forgotmynick :-)
Дин Хардинг,
@ Декан - Честная точка зрения. Я склонен полагать, что люди, на которых ссылаются, когда они были студентами, не были в возрасте 5+ лет. Но вы правы, это не всегда так.
фунтовые
1
По крайней мере, знание того, что происходит, когда маршрутизаторы молча разрывают соединения, действительно приятно в производственных условиях. Был укушен этим не раз.
@pdr - я не согласен. Этот тип знаний полезен, когда вы хотите узнать, почему все происходит так долго или почему обновления, которые вы сделали на своем сайте, не отображаются в браузерах ваших пользователей. Любой, обладающий минимальным знанием сети, знает ответ: кэширование. Лично я, как консультант, сделал чушь, исправляющую тупо простые (и очень дорогостоящие для компании) вещи, которых люди избегали бы, если бы знали эти вещи. Это не похоже на ракетостроение или квантовую механику. Я имею в виду давай, нет никаких оправданий для младшего разработчика, чтобы не знать об этом (особенно если из CS фона).
luis.espinal
@ luis.espinal - Честно говоря, я не думаю, что я бы вообще сосредоточил кэширование в одной и той же категории. Это не работа в сети, а работа в браузере. Я согласен с вами, что кэширование (браузер или сервер) - это то, что каждый должен понимать, потому что он прост, но имеет много ошибок. Но TCP / IP?
фунтовые
16

Мое личное мнение таково, что веб-разработчик должен знать, как работают протоколы низкого уровня. В частности, HTTP, но также (по крайней мере, основы) TCP / IP. В зависимости от сложности вашего сайта, вы можете столкнуться с необходимостью просматривать дампы трассировки HTTP или даже tcpdumpжурналы, и в этом случае вам понадобится хотя бы минимальное знание TCP / IP.

Теперь, действительно ли вам когда-нибудь придется взглянуть на tcpdump, во многом зависит от особенностей вашего сайта. Например, если у вас большой сайт с большим количеством пользователей и серверов, распределенных по нескольким дата-центрам, с относительно большим количеством запросов (например, Ajax, особенно запросов в стиле Comet), тогда tcpdumps может быть чем-то, что вам нужно надо будет посмотреть.

Если все, над чем вы работаете, это какой-то интранет-сайт или что-то довольно простое, то знания могут быть не такими важными, но я все же думаю, что знание вещей низкого уровня всегда поможет.

Дин Хардинг
источник
3
лол ... я бы не назвал http протоколом низкого уровня
Pemdas
2
@Permdas: все относительно. HTTP более высокий уровень, чем TCP, но более низкий уровень, чем, скажем, SOAP.
Дин Хардинг
1
SOAP - это более специфичная для реализации вещь, чем протокол. К сожалению, его реализации настолько близки друг к другу, что они называют это «протоколом»
kagali-san
HTTP: да. TCP / IP: элементарное понимание того, как и почему он выполняет некоторые операции более высокого уровня, вероятно, хорошо. Я сомневаюсь, что глубокие знания требуются (или слишком часто полезны) в среде веб-разработки
Энди Хант
7

Всегда полезно иметь представление о том, как ведут себя слои под слоем, который вы кодируете, хотя бы потому, что он очень полезен, когда вы пытаетесь отладить относительно сложную проблему, и вам нужно понять, почему у вашего приложения неожиданные проблемы с производительностью в глобальной сети или почему он не работает для пользователей, использующих NAT и т. д. Это также может быть неоценимым, когда вам нужно быть в комнате, обсуждая проблему с разработчиками, администраторами веб-сервера, сетевыми администраторами и администраторами базы данных, чтобы иметь возможность говорить и понимать язык, на котором говорят все остальные, и задавать умные вопросы. И чем больше вы понимаете различные детали реализации, тем больше вероятность того, что вы сможете построить масштабируемый сайт, например,

Тем не менее, существует явная точка снижения отдачи, когда изучение большего количества некоторой абстракции, которая находится на расстоянии 6 уровней абстракции от кода, который вы пишете, вряд ли сделает вас лучшим веб-разработчиком. Так что это будет зависеть в некоторой степени от того, что вы подразумеваете под «экстенсивным». Понимание основ того, как маршрутизаторы управляют запросами, может быть весьма полезным, но понимание того, как разные маршрутизаторы могут быть настроены для определения приоритетности разных видов трафика, вероятно, не очень полезно, если только вы не работаете с приложением, которое, вероятно, захотят сетевые администраторы. на газ

Но даже если это не особенно практично, сильные разработчики склонны интересоваться различными уровнями стека и узнают о них, даже если в этом нет явной выгоды. Я склонен ожидать, что веб-разработчик, который имел глубокое понимание того, как работают реляционные базы данных или как работают сети, будет сильнее, чем веб-разработчик, который ограничен знанием только технологий веб-разработки. Очевидно, это не идеальная корреляция, но разумно спросить.

Джастин Кейв
источник
+1 за "Это также может быть неоценимым, когда вам нужно быть в комнате, чтобы обсудить проблему с разработчиками, администраторами веб-сервера, администраторами сети и администраторами базы данных, чтобы иметь возможность говорить и понимать язык, на котором говорят все остальные и задавать умные вопросы "
Параг
5

Зависит от сайта, который вы создаете. Для небольших / средних веб-сайтов базовые знания по TCP / IP, вероятно, подойдут.

Если вы работаете над популярным веб-сайтом (с точки зрения трафика), очень важно знать базовые сетевые протоколы и инфраструктуру. Это поможет вам часто принимать правильные дизайнерские решения.

Эрик Дж.
источник
3

По моему мнению, вам нужно в целом знать, как биты попадают из вашего приложения на сервер и обратно, особенно для позиции веб-разработки. В программировании нет черных ящиков; утечка всех абстракций .

Райан Микела
источник
2

Как разработчику программного обеспечения, в основном работающему над веб-приложениями, нужно ли мне иметь широкие знания по TCP / IP и тому, как маршрутизаторы управляют запросами, или это для меня просто «черный ящик»?

IMO, тот факт, что вы разработчик программного обеспечения (я полагаю, имеет опыт работы с CS), должен знать об этих вещах. В частности, если вы занимаетесь веб-разработкой. Как я уже упоминал в одном из моих комментариев, я взял на себя огромную нагрузку на консалтинг, просто исправляя действительно глупые ошибки, совершаемые людьми, которые не знают об основах сетевой / интернет-архитектуры.

ZOMG, изменения, которые я сделал на своем сайте, не отображаются, пожалуйста, помогите! * ZOMG, профили людей пересекаются, потому что где-то кешируются сессии, помогите, пожалуйста! * ZOMG, у нас есть защищенный контент для аутентифицированных пользователей, но люди могут получить к ним закладки, и появляется экран кровавой аутентификации, плз тех. Помогите! "

... и так далее, и так далее ... к сожалению ...

Между вашим веб-приложением и браузером пользователя существует масса вещей: ваше приложение, сетевой адаптер вашего приложения, маршрутизатор и, возможно, брандмауэр, затем внутренний сетевой адаптер вашего http-сервера, затем ваш http-сервер, затем исходящий сетевой адаптер http-сервера, затем другой маршрутизатор и, безусловно, брандмауэр. Затем устройство кеширования и, возможно, устройство SSL. Затем в Интернет с большим количеством маршрутизаторов и серверов кэширования, а затем, наконец, в браузер ваших пользователей (и его внутренний кеш).

Миллион вещей может пойти не так, и если у вас нет ни малейшего знания в области сетей, сетевых протоколов, операционных систем / системных администраторов и интернет-архитектуры, вы будете в растерянности и во власти вашего ИТ-отдела (поскольку большинство разработчиков не имеют доступа к инфраструктуре и не знают, где искать при поиске неисправностей). В худшем случае это сделает вас действительно дурацким веб-разработчиком.

Программный аспект веб-разработки - это только один аспект. Успешное его выполнение напрямую зависит от других навыков (в частности, сетевого и системного администрирования), которые нельзя воспринимать как должное или слепо делегировать ИТ-операциям. Это не означает, что вы должны нести ответственность за устранение неполадок сети / ОС, но

а. Вы должны знать, что может пойти не так на уровне сети / ОС, чтобы вы могли сотрудничать и руководить ИТ-отделом, который никогда не будет иметь глубоких знаний о вашем приложении. б. Такое знание позволяет вам спроектировать вашу систему так, чтобы она избегала или, по крайней мере, уменьшала и изящно справлялась с такими ошибками.

Программирование - это только один из аспектов проектирования и разработки. Это не может быть вашим основным навыком, и он действительно должен быть успешным в долгосрочной перспективе в развитии предприятия в целом и в веб-разработке в частности, это то, что вам нужно знать. И, честно говоря, это то, чему следовало научиться (очень твердо) либо в школе, либо путем самообучения перед окончанием обучения (или сразу после выхода на рынок труда).

Удачи.

luis.espinal
источник
1

Важно понимать TCP / IP и то, как маршрутизаторы управляют запросами. Но вы не знаете , потребность обширных знаний о том , что в одном из интервью. Тем не менее это было ранее выражено. В противном случае вы оба потеряли время. Звучит как ловушка.

Но для роли архитектора я твердо верю, что эти знания важны в любом случае. Парень предоставит решения, которые могут воспользоваться этим, используя или даже копируя архитектуру в собственном решении. Проведите выходные с Tanenbaum Networks и будьте спокойны!

Эдуардо Ксавье
источник
1

Это сложный вопрос. Да, я думаю, что каждый разработчик должен иметь базовые знания TCP / IP и как организованы сети на основе этого протокола. Однако это приводит к вопросу о том, насколько обширным считается базовое знание.

Я думаю, что, не сталкиваясь с какой-либо конкретной проблемой (и, следовательно, не нужно знать, как все действительно организовано «там»), разработчик должен знать, что такое пакет и как пакеты распределяются по сети (это включает в себя знание того, какие типы машин этот пакет вступает в контакт с). Однако я думаю, что достаточно знать, что маршрутизатор распределяет пакеты по всем получателям и что коммутатор доставляет пакеты определенным получателям. Мне также не потребовался бы разработчик всех этих подсетей - я, конечно, сам не знаю всех деталей ;-) Я должен знать, что подсети могут быть изолированы и пакеты должны маршрутизироваться из сети A в сеть B, но все подробности - это путь для типичного разработчика.

Я думаю, что это немного похоже на вождение автомобиля: вы должны знать, зачем вам двигатель и зачем нужно топливо, но, как обычный водитель, вам не нужно знать, как рассчитать идеальную смесь топлива и воздуха для процесса сгорания.

perdian
источник
0

Немногие вещи расстраивают больше, чем люди, которые не понимают основ того, что происходит вокруг них. Это приводит к тому, что вы снова и снова задаете одни и те же вопросы (конечно, в несколько иной форме).

Когда вы обнаружите, что задаете повторяющиеся вопросы, пришло время поразить книги. Последние примеры вопросов, которые я получил:

  • «Как мне настроить сеть, если xyz?» ...
  • «Как мне настроить сеть, если abc?» ...
  • Повторение...

На самом деле, я получил так много повторяющихся вопросов от людей, которым было легче задавать снова, чем учиться, я начал отслеживать их и делать слайды в Powerpoint. Теперь, каждые шесть месяцев, я провожу практические занятия. Люди могут ссылаться на слайды, которые я сделал. Позже, когда они спрашивают что-то, что мы освещали на уроке, я осторожно обращаюсь к этому, и они обычно вспоминают, что мы рассказали об этом, и сами перечитываем слайды. Те, кто это делает, на самом деле лучше изучают предмет и считают его ценным. Это сделало замечательную разницу в форме меньшего количества перерывов в моем рабочем дне.

Еще одна мысль: в реальном мире реальные системы имеют так много странностей и проблем, что невероятно ограничено не знать больше, чем просто ваши знания в конкретной области. Любая идея о том, как работают основополагающие принципы, может только помочь вам.

Теперь, если это действительно выходит за рамки того, что вы должны знать, тогда хорошо, не беспокойтесь об этом. Но если вы обнаружите, что задаете вопрос более одного раза, изучите его. Вы не пожалеете об этом.

Браво за вопрос. Никогда не переставай учиться.

kmort
источник