Web開発者はTCP / IPとルーターがリクエストを管理する方法を理解する必要がありますか?[閉まっている]


15

本日、重要なサイトで開発者としての職に就くための面接を受けました。彼らは何百ものプログラミング言語関連の質問をしましたが、私は問題なく答えることができましたが、PCからWebサーバーにリクエストを送信すると、TCP / IPリクエストがどのように行われるかについて質問を始めました。私は学生としてそれらのコンテンツを受け取りましたが、私はほとんどウェブ開発で働いているので、私の質問は次のとおりです。

主にWebアプリケーションで作業するソフトウェア開発者として、TCP / IPおよびルーターが要求を管理する方法に関する広範な知識が必要ですか、それとも単なるブラックボックスの知識ですか?


彼らは、TCP / IP要求が概念レベルでどのように行われるかについてもっと知りたいと思いましたか、それとも詳細を知りたいと思いましたか?TCP / IPは、ネットワーク上で通信するたびに内部で使用されます。個人的には、少なくとも概念レベルで物事がどのように機能するのかを理解することは非常に重要だと思います。これにより、問題を特定し、多くの場合、より優れたソリューションを設計することもできます。
パラグ

回答:


25

この種の知識は、非常まれしか役立ちません。

たとえば、運用チームがテスト環境とは少し異なるルーター/ファイアウォール/ロードバランサーの背後に運用サイトをセットアップし、それに関連する問題が発生した場合、それを見つけるのに役立ちます。コードの奇妙さを掘るのではなく、迅速にopsに相談してください。その会話があったときに彼らの言語を理解できるようになることはあなたにさらに役立つでしょう。

しかし、特にジュニアプログラマーの場合、インタビューで人々がなぜこのようなことを重視するのか、私には本当にわかりません。それは確かにチームの全員にとって不可欠な知識ではなく、あなたは教えられることができます。


2
ジュニアプログラマーには良い点ですが、@ forgotmynickがどのレベルのポジションに応募しているかわかりません:
ディーンハーディング

@Dean-フェアポイント。私は、学生の頃に言及した人は、5年以上の開発者ではなかったと思いがちです。しかし、あなたは正しい、それは常にそうではありません。
pdr

1
少なくともルーターが静かに接続を切断したときに何が起こるかを知っていることは、実稼働環境では本当に素晴らしいことです。何度も噛まれた。

@pdr-私は同意しません。この種の知識は、時間がかかる理由や、サイトに加えた更新がユーザーのブラウザーに表示されない理由を知りたい場合に役立ちます。わずかなネットワーク知識を持つ人なら誰でも答えを知っているでしょう:キャッシング。個人的には、コンサルタントとして、人々がこれらのことを知っていたら避けていたであろう愚かなほど単純な(そして会社にとって非常に高価な)修正を行いました。このロケット科学か量子力学かのどちらかではありません。私はjr開発者がこれを知らない理由はありません(特にCSの背景の場合)。
luis.espinal

@ luis.espinal-正直なところ、私はキャッシュを同じカテゴリにまとめたとは思わない。それはネットワークのことではなく、ブラウザのことです。キャッシング(ブラウザまたはサーバー)は単純ですが、多くの落とし穴があるため、誰もが理解する必要があるものであることに同意します。しかし、TCP / IP?
pdr

16

個人の意見では、Web開発者低レベルプロトコルがどのように機能するか知っている必要があります。特にHTTPですが、TCP / IPの(少なくとも基本)。サイトの複雑さに応じて、HTTPトレースダンプまたはtcpdumpログを確認する必要がある場合があります。この場合、少なくともTCP / IPの十分な知識が必要になります。

さて、実際にtcpdumpを見る必要があるかどうかは、サイトの詳細に大きく依存します。たとえば、多数のユーザーとサーバーが複数のデータセンターに分散し、比較的多数のリクエスト(たとえば、Ajax、特にCometスタイルのリクエスト)を行う大規模なサイトがあるtcpdump場合、sはあなたのものかもしれません見る必要があります。

作業しているのがイントラネットサイトまたはかなり単純なものである場合、知識はそれほど重要ではないかもしれませんが、低レベルのものを知ることは常に助けになると思います。


3
lol ... httpを低レベルのプロトコルとは呼ばないだろう
Pemdas

2
@Permdas:それはすべて相対的です。HTTPはTCPよりも高いレベルですが、(たとえば)SOAPよりも低いレベルです。
ディーンハーディング

1
SOAPは、プロトコルよりも実装固有のものです。残念ながら、その実装は、「プロトコル」と呼んでいることなので、互いに近接している
kagaliさん

HTTP:はい。TCP / IP:より高いレベルの操作を実行する方法と理由の初歩的な理解は、おそらく問題ありません。私は、Web開発環境で(あまりにも頻繁に有用か)深い知識が必要とされる疑い
アンディ・ハント

7

比較的複雑な問題をデバッグしようとしていて、アプリケーションに予期しないパフォーマンスの問題がある理由を理解する必要がある場合にのみ、コーディング中のレイヤーの下のレイヤーがどのように動作するかを理解することは常に役立ちますWAN上で、またはNATを使用するユーザーにとって失敗する理由など。また、開発者、Webサーバー管理者、ネットワーク管理者、データベース管理者と問題を話し合うために部屋にいる必要がある場合にも非常に役立ちます。他の全員が話している言語を話し、理解し、知的質問をする。また、さまざまな実装の詳細を理解すればするほど、たとえば次のような方法でスケーラブルなサイトを構築できる可能性が高くなります。

とはいえ、あなたが書いているコードから6層の抽象化である抽象化についてさらに学習しても、あなたがより良いWeb開発者になる可能性は低い、という見返りの減少点があることは明らかです。そのため、「広範囲」の意味にある程度依存します。ルーターがリクエストを管理する方法の基本を理解することは非常に有用ですが、異なる種類のトラフィックを優先するように異なるルーターを設定する方法を理解することは、ネットワーク管理者が望む可能性が高いアプリケーションで作業している場合を除き、おそらくそれほど有用ではありませんスロットルします。

しかし、それが特に実用的ではない場合でも、強力な開発者はスタックのさまざまなレイヤーに興味を持ち、そうすることの明確な利点がなくてもそれらについて学習する傾向があります。リレーショナルデータベースの仕組みやネットワークの仕組みを深く理解しているWeb開発者は、Web開発技術だけを知ることに制限されているWeb開発者よりも強力になると期待する傾向があります。明らかに、それは完全な相関関係ではありませんが、尋ねるのは合理的です。



5

構築しているWebサイトに依存します。小規模/中規模のWebサイトの場合、TCP / IPの基本的な知識はおそらく大丈夫です。

上位のWebサイト(トラフィックの観点)で作業している場合、基礎となるネットワークプロトコルとインフラストラクチャの詳細な知識が非常に重要です。適切な設計上の決定を下す際に、頻繁にガイドします。


3

私の意見では、特にWeb開発のポジションの場合、アプリケーションからサーバーへ、そしてサーバーへとビットがどのように移動するかを一般的に知る必要があります。プログラミングにはブラックボックスはありません。すべての抽象化リーク


2

主にWebアプリケーションで作業するソフトウェア開発者として、TCP / IPおよびルーターが要求を管理する方法に関する広範な知識が必要ですか、それとも単なるブラックボックスの知識ですか?

IMO、あなたがソフトウェア開発者であるという事実(私はCSのバックグラウンドを持っていると思います)は、これらのことを知っているべきです。特に、Web開発を行う場合。私のコメントの1つで述べたように、ネットワーク/インターネットアーキテクチャの基本を知らない人が行った本当に馬鹿げたエラーを修正するだけで、コンサルティング料を大幅に削減しました。

ZOMG、私のウェブサイトに加えた変更は表示されません、助けてください! *セッションがどこか、plzはTEHヘルプ!*キャッシュされているのでZOMG、人々のプロファイルが交差なっている ZOMGを、我々は、認証されたユーザーのための安全なコンテンツを持っているが、人々は、ブックマークや血まみれの認証画面ヌヴェールでそれらを取得することができTEH PLZ、アップします助けて!

...などなど...悲しいことに...

Webアプリとユーザーのブラウザーの間には、アプリ、アプリのNIC、ルーター、場合によってはファイアウォール、そしてhttpサーバーの内部NIC、httpサーバー、httpサーバーのアウトバウンドNIC、そして別のファイアウォールがあります。ルーターと最も確かにファイアウォール。次に、キャッシュデバイス、および場合によってはSSLデバイス。その後、より多くのルーターとキャッシュサーバーを使用してインターネットに接続し、最後にユーザーのブラウザー(およびその内部キャッシュ)に接続します。

膨大な数の問題が発生する可能性があり、ネットワーキング、ネットワークプロトコル、オペレーティングシステム/システム管理者、およびインターネットアーキテクチャに関する知識がなければ、IT OP部門の迷惑になります(ほとんどの開発者はインフラストラクチャにアクセスできず、トラブルシューティングの際にどこを探すべきかを知らない)。最悪の場合、それはあなたを本当にくだらないWeb開発者にします。

Web開発のプログラミングの側面は、まさにその1つの側面です。それを正常に実行することは、当然のことと考えたり、IT運用に盲目的に委任したりすることのできない他のスキル(特にネットワークとシステム管理)の上に真っ直ぐに座っています。ネットワーク/ OSのトラブルシューティングを担当する必要があるという意味ではありませんが、

a。ネットワーク/ OSレベルで何が問題になる可能性があるかを知って、アプリケーションの詳細な知識を決して得られないIT OPSに協力して指導する必要があります。b。このような知識により、システムを設計して、このようなエラーを回避するか、少なくとも改善し、優雅に対処することができます。

プログラミングは、エンジニアリングと開発の1つの側面にすぎません。それはあなたの第一のスキルになることはできず、一般的に企業開発の長期的には本当に成功します。特にウェブ開発では、これらはあなたが知る必要があるものです。そして正直に言うと、これらは学校で、または卒業前に(または就職直後に)自己学習を通じて(非常にしっかりと)学ばなければならないことです。

幸運を。


1

TCP / IPと、ルーターが要求を管理する方法を理解することが重要です。しかし、あなたはインタビューでそれについて広範な知識が必要ことを知りません。以前は表現されていました。そうしないと、両方とも時間が無駄になります。トラップのように聞こえます。

しかし、アーキテクトの役割にとって、この知識はどんな場合でも重要だと強く信じています。担当者は、カスタムソリューションでアーキテクチャを使用または複製することで、それを活用できるソリューションを提供します。Tanenbaum Networksで週末を過ごして、簡単にお過ごしください!!


1

これは難しい質問です。はい、すべての開発者はTCP / IPの基本知識と、そのプロトコルに基づいたネットワークの編成方法を知っている必要があると思います。しかし、それは基本的な知識がどれほど広範囲であると考えられるかという問題につながります。

特定の問題に直面することなく(したがって、実際に「下に」物事がどのように編成されているかを知る必要があります)、開発者はパケットとは何か、ネットワークを介してパケットがどのように配布されるかを知る必要がありますと接触します)。ただし、ルーターがすべての受信者にパケットを配信し、スイッチが特定の受信者にパケットを配信することを知るだけで十分だと思います。私はまた、すべてのサブネットのものを開発者に要求しません-私は確かにすべての詳細を自分で知りません;-)サブネットが分離され、パケットがネットAからネットBにルーティングされる必要があることを知っているべきです詳細は、典型的な開発者にとって非常に重要です。

車を運転するようなものだと思います:エンジンが必要な理由と燃料が必要な理由を知っておく必要がありますが、平均的なドライバーとしては、燃焼プロセスのために燃料と空気の完全な混合を計算する方法を知る必要はありません。


0

自分の周りで起こっていることの基本を理解していない人よりもイライラするものはほとんどありません。同じ質問を何度も何度も繰り返すことになります(もちろん、少し異なる形式で)。

繰り返し質問をしていることに気づいたら、本を読みましょう。私が受け取った質問の最近の例:

  • 「xyzの場合、ネットワークをどのように構成しますか?」...
  • 「abcの場合、ネットワークをどのように構成しますか?」...
  • 繰り返す...

実際、学ぶよりも再質問する方が簡単だと感じた人々から非常に多くの質問を繰り返しました。私はそれらを追跡し、Powerpointスライドを作成し始めました。今では、半年ごとに、実践的なクラスを運営しています。その後、人々は私が作成したスライドを参照できます。後で、彼らがクラスでカバーしたものを尋ねると、私はそっとそれを参照します。彼らは通常、カバーしたことを思い出し、自分でスライドを読み直します。そうする人は実際に主題をよりよく学び、それを価値があると思う。それは私の仕事の中断を減らすという形で顕著な違いをもたらしました。

もう1つの考え:現実の世界では、実際のシステムには非常に多くの癖と問題があり、ドメイン固有の知識以上のものを知らないことは信じられないほど制限されています。基礎となる基礎がどのように機能するかについての考えは、あなただけを助けることができます。

さて、それが本当にあなたが知っておくべきことの範囲外であるならば、それで、それについて心配しないでください。しかし、あなたが自分自身に何度も質問をしていることに気付いたら、それを学んでください。後悔することはありません。

質問をしてくれたBravo。学習を止めないでください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.