Чи повинен веб-розробник розуміти TCP / IP та як маршрутизатори керувати запитами? [зачинено]


15

Я провів співбесіду на робочому місці для роботи на посаді розробника на важливому сайті. Вони задавали тонни питань, пов’язаних з мовою програмування, на які мені вдалося відповісти без проблем, але потім вони почали задавати питання про те, як робилися запити TCP / IP, коли я зробив запит на своєму ПК на веб-сервері. Я отримав цей вміст ще студентом, але не пам’ятаю їх добре, тому що я працюю здебільшого у веб-розробці, моє питання:

Як розробник програмного забезпечення, який працює в основному над веб-додатками, чи потрібно мені володіти широкими знаннями TCP / IP та як маршрутизатори керувати запитами, чи це мені просто знання чорної скриньки?


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

Відповіді:


25

Цей вид знань дуже корисний дуже рідко.

Наприклад, коли ваша команда ops налаштовує ваш виробничий майданчик за маршрутизатором / брандмауером / балансиром навантаження, який налаштований дещо інакше, ніж у вашому тестовому середовищі, і ви отримаєте проблему, пов’язану з цим, це допоможе вам помітити це швидко і поговоріть з операційними програмами, а не копайте для якоїсь дивацтва в коді. Це послужить вам ще краще, коли ви зможете зрозуміти їхню мову, коли ведете цю розмову.

Але я насправді не розумію, чому люди ставлять на цей інтерв'ю стільки ваги, особливо якщо це стосується молодшого програміста. Це, звичайно, не є важливими знаннями для всіх в команді, і ви можете цього навчити.


2
Хороший момент щодо молодших програмістів, але я не впевнений, на яку посаду рівня @forgotmynick претендує :-)
Дін Хардінг,

@Dean - Справедлива точка. Я схильний вважати, що людей, на які посилаються, коли вони були студентом, не було дев 5+ років. Але ти маєш рацію, це не завжди так.
пдр

1
Принаймні знаючи, що відбувається, коли маршрутизатори мовчки скидають з'єднання, справді приємні у виробничих умовах. Укушений цим не раз.

@pdr - я не згоден. Цей тип знань корисний, коли ви хочете дізнатись, чому все так довго триває або чому оновлення, внесені на ваш сайт, не відображаються у веб-переглядачах користувачів. Усі, хто має простір мережевих знань, знають відповідь: кешування. Особисто я, як консультант, зробив навантажувальний навантаження, що фіксує дурно прості (і дуже дорогі для компанії) речі, яких люди могли б уникнути, якби вони знали ці речі. Це не так, як ця ракетна наука чи квантова механіка. Я маю на увазі давай, немає жодного приводу, щоб jr dev не знав про це (особливо якщо це CS).
luis.espinal

@ luis.espinal - Чесно кажучи, я не думаю, що я б взагалі збирав кешування в одній категорії. Це не мережева річ, це браузер. Я погоджуюся з вами, що кешування (браузер або сервер) - це те, що кожен повинен розуміти, оскільки він простий, але має багато досягнень. Але TCP / IP?
pdr

16

Моя особиста думка полягає в тому, що веб-розробник повинен знати, як працюють протоколи низького рівня. Особливо HTTP, але також (принаймні основи) TCP / IP. Залежно від складності вашого сайту, можливо, вам доведеться переглянути диспетчери HTTP-трактів або навіть tcpdumpжурнали, і в цьому випадку вам знадобиться принаймні знання про TCP / IP.

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

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


3
хаха ... я б не закликав http протоколу низького рівня
Pemdas

2
@Permdas: це все відносно. HTTP - вищий рівень, ніж TCP, але нижчий рівень, ніж (скажімо) SOAP.
Дін Хардінг

1
SOAP - це скоріше конкретна реалізація, ніж протокол. На жаль, його реалізація настільки близька одна до одної, що називають це "протоколом"
kagali-san

HTTP: так. TCP / IP: рудиментарне розуміння того, як і чому він виконує деякі операції вищого рівня, ймовірно, добре. Сумніваюсь, потрібні глибокі знання (або занадто часто корисні) в середовищі веб-розробки
Енді Хант,

7

Завжди корисно розуміти, як поводяться шари під шаром, який ви кодуєте, поводиться хоча б тому, що це стає надзвичайно корисним, коли ви намагаєтеся налагодити відносно складну проблему, і вам потрібно зрозуміти, чому у вашої програми є несподівані проблеми з продуктивністю. у мережі WAN або чому вона не працює для користувачів, які використовують NAT тощо. Це також може бути безцінним, коли вам потрібно перебувати в приміщенні, де обговорюють проблему з розробниками, адміністраторами веб-сервера, адміністраторами мережі та адміністраторами бази даних, щоб мати можливість розмовляти та розуміти мову, якою говорять всі інші, та задавати розумні запитання. І чим більше ви розумієте різні деталі реалізації, тим більше шансів на те, що ви зможете створити масштабований сайт, наприклад,

Однак, очевидно, що дещо зменшується віддача, коли дізнатися більше про деяку абстракцію, яка знаходиться на 6 шарах абстракції від коду, який ви пишете, навряд чи зробить вас кращим веб-розробником. Тож це буде певною мірою залежати від того, що ви маєте на увазі під "широким". Розуміння основ управління маршрутизаторами запитів - це щось, що може бути дуже корисним, але розуміння того, як різні маршрутизатори можуть бути налаштовані на пріоритет різного роду трафіку, ймовірно, не дуже корисно, якщо ви, звичайно, не працюєте над додатком, який, швидше за все, захочуть адміністратори мережі. на дросель.

Але навіть якщо це не особливо практично, сильні розробники, як правило, цікавляться різними шарами стека і прагнуть дізнатися про них, навіть якщо для цього немає явної вигоди. Я схиляюсь до того, що веб-розробник, який глибоко розумів, як працюють реляційні бази даних або як працює мережа, буде сильнішим, ніж веб-розробник, який обмежений лише знаннями про технології веб-розробки. Очевидно, це не ідеальна кореляція, але розумно запитати.


+1 для "Це також може бути безцінним, коли вам потрібно побувати в кімнаті, де обговорюють проблему з розробниками, адміністраторами веб-сервера, адміністраторами мережі та адміністраторами бази даних, щоб мати можливість розмовляти та розуміти мову, якою говорять усі інші. і задавати розумні питання "
Параг

5

Залежить від веб-сайту, який ви будуєте. Для невеликих та середніх веб-сайтів базові знання TCP / IP, ймовірно, добре.

Якщо ви працюєте на топ-сайті (з точки зору трафіку), детальне знання базових мережевих протоколів та інфраструктури є надзвичайно важливим. Він буде часто орієнтувати вас у прийнятті хороших дизайнерських рішень.



2

Як розробник програмного забезпечення, який працює в основному над веб-додатками, чи потрібно мені володіти широкими знаннями TCP / IP та як маршрутизатори керувати запитами чи це для мене просто знання чорної скриньки?

IMO, той факт, що ви розробник програмного забезпечення (я маю на увазі, що це CS), повинен знати про ці речі. Зокрема, якщо ви займаєтеся веб-розробкою. Як я вже згадував в одному зі своїх коментарів, я зробив велике навантаження в оплаті консультацій, просто виправляючи дійсно дурні помилки, які роблять люди, які не знають про основи мережевої / інтернет-архітектури.

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

... і так далі, і так далі ... сумно ...

Між Вашим веб-додатком та веб-переглядачем користувача є багато речей: ваш додаток, NIC програми, маршрутизатор і, можливо, брандмауер, потім ваш внутрішній NIC-сервер http, потім ваш http-сервер, потім ваш http-сервер, вихідний NIC, потім ще один маршрутизатор і, безумовно, брандмауер. Потім пристрій кешування, а можливо і пристрій SSL. Потім вийдіть до Інтернету з більшою кількістю маршрутизаторів і кешуючих серверів, а потім нарешті до браузера своїх користувачів (та його внутрішнього кеша.)

Зільйон речей може піти не так, і якщо ви не володієте іотою знань про мережу, мережеві протоколи, операційні системи / sysadmin та архітектуру Інтернету, ви будете загублені та на волі вашого відділу ІТ-операторів (оскільки більшість розробників не мають доступу до інфраструктури і не знають, де їх шукати під час усунення неполадок). У гіршому випадку, це зробить вас справді хитрим веб-розробником.

Програмовий аспект веб-розробки - це саме той, один аспект. Успішне його виконання прямо відповідає іншим навичкам (зокрема, мережам та адмініструванню систем), які не можна сприймати як належне, ні сліпо делегувати ІТ-операціям. Це не означає, що ви повинні нести відповідальність за усунення несправностей у мережі / ОС, але

а. Ви повинні знати, що може піти не так на рівні мережі / ОС, щоб ви могли співпрацювати та керувати IT OPS, які ніколи не можуть мати інтимних знань щодо вашої програми. б. Такі знання дозволяють сконструювати вашу систему, щоб вона уникала або хоча б покращувалась і витончено справлялася з такими помилками.

Програмування - лише один із аспектів інженерії та розробки. Це не може бути вашим основним вмінням, і справді ви можете бути успішними в довгостроковій перспективі в розвитку підприємства в цілому, а також у веб-розробці, зокрема, це вам потрібно знати. І якщо чесно, це речі, які слід було б вивчити (дуже твердо) або в школі, або через самонавчання до закінчення навчання (або відразу після виходу на ринок роботи.)

Удачі.


1

Важливо зрозуміти TCP / IP та як маршрутизатори керувати запитами. Але ви не знаєте, чи потрібні широкі знання про це на співбесіді. Менше це було раніше виражено. Інакше ви обоє витратили час. Звучить як пастка.

Але для ролі архітектора я переконаний, що ці знання важливі в будь-якому випадку. Хлопець запропонує рішення, які можуть скористатися цим, використовуючи або навіть реплікацію архітектури у користувацьке рішення. Проведіть вихідні з мережами Tanenbaum та відпочивайте !!


1

Це складне питання. Так, я думаю, кожен розробник повинен мати базові знання TCP / IP та те, як організовані мережі на основі цього протоколу. Однак це призводить до питання про те, наскільки обширним вважається базовий знання.

Я думаю, що не стикаючись з будь-якою конкретною проблемою (і, отже, не потрібно знати, як все реально організовано "внизу"), розробник повинен знати, що таке пакет і як розподіляються пакети через мережу (що включає знання тих типів машин, які цей пакет вступає в контакт з). Однак я думаю, що достатньо знати, що маршрутизатор роздає пакети всім приймачам і що комутатор доставляє пакети певним приймачам. Я також не вимагав би розробника всіх речей цієї підмережі - я точно не знаю всіх деталей ;-) Мені слід знати, що підмережі можуть бути ізольованими, і пакети повинні бути маршрутизовані з мережі A до мережі B, але всі деталі - це багато що для типового розробника.

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


0

Деякі речі страшніші, ніж люди, які не розуміють основ того, що відбувається навколо них. Це призводить до того, щоб задавати одні і ті ж питання знову і знову (у дещо іншій формі, звичайно).

Коли ти опинишся, що задаєш повторні запитання, настав час вдарити книги. Останні приклади запитань, які я отримав:

  • "Як налаштувати мережу, якщо xyz?" ...
  • "Як налаштувати мережу, якщо abc?" ...
  • Повторіть ...

Насправді у мене було стільки повторюваних запитань від людей, яким було легше задати знову, ніж вчитися, я почав слідкувати за ними і робити слайди Powerpoint. Зараз я кожні півроку беру практичний клас. Потім люди можуть посилатися на слайди, які я зробив. Пізніше, коли вони запитують щось, що ми висвітлювали в класі, я обережно посилаюсь на це, і вони зазвичай згадують, що ми висвітлювали це, і переходимо читати слайди для себе. Ті, хто це робить, насправді вивчають предмет краще і вважають його цінним. Це зробило неабияку різницю у вигляді меншої кількості перерв до мого робочого дня.

Ще одна думка: у реальному світі справжні системи мають багато химерностей і проблем, неймовірно обмежує не знати більше, ніж просто знання, що стосуються вашого домену. Будь-яке уявлення про те, як працюють основні основи, може вам тільки допомогти.

Тепер, якщо це дійсно не виходить за рамки того, що ви повинні знати, тоді добре, не хвилюйтеся про це. Але якщо ви не раз ставите питання, вивчіть це. Ви не пошкодуєте.

Браво за запитання. Ніколи не припиняйте вчитися.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.