回答:
何をするかによります。
あなたが組み込み開発者である(そして非常に小さなデバイスで金属に非常に近いところで書いている)場合、システム内のすべてのコンポーネントの内外すべてを知る必要があります。
システム開発者(およびオペレーティングシステム、デバイスドライバー、またはデータベースを作成している場合)であれば、低レベルのハードウェアインターフェイスについて知っておくべきすべてのことを知る必要があります。
ゲーム開発者であり、プロジェクトの後半(物事を最適化する場合)である場合、使用するCPUキャッシュとグラフィックスアーキテクチャの詳細を知る必要があります。
あなたがアプリケーション開発者であれば、メモリ使用量を適切なレベルに保つことを除いて、これを知る必要はありません。
あなたがウェブ開発者なら、インターネットプロトコルを知っていると便利ですが、メモリの問題に対処する方法を除いて、この他のものは必要ありません。
アプリケーション開発者とWeb開発者に関するコメントは間違っていると思います。
たとえば、誰かがsshや他の暗号化アルゴリズムなどの多くのセキュリティ関連のWebアプリケーションを開発している場合、マシンが実際に処理できるかどうかを判断できるように、実行しているハードウェアの種類を知ることが非常に重要です作業負荷。別の例には、ダウンロードされたコンテンツをホストするサーバーが含まれます。かなり大量のリクエストが予想される場合は、ディスクドライブの機能と、接続されているバスインターフェイスの種類をよく理解している必要があります。
アプリケーションの観点から、何らかのCADプログラム、または3Dレンダリングを行うものを開発している場合、これらのアプリケーションはアルゴリズムとグラフィックの両方で計算集約的であることが期待できます。ハードウェアを理解して、アプリケーションの応答性と使用可能性を確認するのが賢明です。
PCIプロトコルのようなものの詳細を理解する必要があると言っているわけではありませんが、インターフェイスとハードウェアが何ができるかをよく理解しています。
最終的には、どのタイプの開発を行うかに関係なく重要です。あなたが理解するために必要な詳細レベルは議論の余地があります。
プロのプログラマのために、私はそれを見て総合的な全体の理解へのアプローチシステムというだけで与えられたプログラミング言語の構文を知ることよりも、今はやりを。プログラマー(およびアナリスト)が賢明な設計決定を下し、より多くの情報に基づいたアルゴリズムとデータ構造の選択を行うのに役立ちます。
私自身の経験では、最高のプログラマーは、ターゲットプラットフォームのネイティブアセンブリ命令セットを理解しているのか、学校でのコンピューターの入門コース、初歩的なデジタルエレクトロニクスを理解しているのか、詳細を理解できるのか、程度の差はあれ、内部の仕組みについて知っている傾向があります最新モデルのCPUおよびGPUコアの説明では、最も優れているのは、より劣等なピアよりも完全な知識を持っています。
それが役立つかどうかはわかりませんが、私が取り組んでいるシステムについて本当に必要な以上のことを知っているとき、私はより快適に感じます。私が若かったとき、私が取り組んでいたシステムのアセンブリ言語を知らないのは好きではありませんでした。変更したか、十分に多くのことを学んだので、もう1つではシステムに対する感触があまり大きくなりません。私はハードウェアの専門家ではありませんでしたが、コンピューターを分解して、さまざまなサブシステムとそれらの相互作用に名前を付けることができます。
タイトルで尋ねられたように私はこれに答えるつもりです:
はい、開発者はハードウェアの内部動作を知っている必要があります。開発者のタイプと彼らの目標、利用可能な時間、個人的な興味に依存します。もちろん、優先順位は、彼らが彼らの地域で採用している即時のツール、テクニックなどにあるべきです。この意見は、丸みを帯びた個人であることの線に沿っています。クラフトを犠牲にすることなく、クラフト以外のことをよく知っていれば、それだけ良くなります。
だからといって、チーズウィズに夢中になる必要があるわけではありません。ハードウェア、各要素の相互作用、オペレーティングシステムによるハードウェアの使用方法の概要を把握してください。これらの方針に沿って、すべての開発者向けにオペレーティングシステムのコンセプトブックを読むことをお勧めします。
これをすべて知っていますか? ヘックありません。SCSIに関する無駄な情報をあまり忘れてしまったので、面白くさえありません。しかし、それについて学ぶことは非常に貴重な経験でした。また、ハードウェアに関連する他の多くの詳細を忘れましたが、その知識から学んだ重要な概念を思い出してください。
したがって、ハードウェアについて学ぶことをお勧めします。必要に応じて、妥当なペースで実行してください。できる限り多くの詳細を学びますが、概念に焦点を合わせます。
すべての開発者は、コンピューターエンジニアリングに関連する基本概念を知っている必要があります:バイナリ演算、ベース変換、ブール代数、論理ゲート、CPUの構成(およびコンポーネントの機能)、キャッシュ、仮想メモリ、圧縮、エラー検出、修正...
これらの既知の範囲は、プログラマーの仕事に依存します。他の人が言ったように、組み込みシステムの開発者は、Web開発者よりも、ハードウェアの機能と、ハードウェアを最大限に活用するソフトウェアの作成方法に精通している必要があります。