4

先日、自分のソフトウェアが実行されるハードウェアについてほとんど何も知らないことに気がつきました。私は約 5 年間開発者をしていますが、大学を卒業して以来、ハードウェアの理論や設計について調べていません。私はもはや自分のマシンを構築することさえしません。なぜなら、残忍な正直なところ、余分な数ドルを支払って、Comp Sci ドロップアウトにショップで構築してもらいたいからです。

ボンネットの下で何が起こっているかの基本をよく理解することは明らかに重要ですが、それは開発者として私たちから遠く離れて抽象化されているため、複雑なことに気を配る必要はありませProgrammed I/OMemory-Mapped I/O..

それとも私たちですか?

ここでは、専任のベアメタル担当者ではなく、毎日の LOB 開発者について話していることに注意してください。

それでは、「平均」をどのように定義しますか?しかし、全体として、有能なプログラマーはどれくらい深く潜ることができるのでしょうか?

4

5 に答える 5

9

それは、開発のレベルがどの程度かによって異なります。

  1. 組み込みシステム向けに開発する場合、これは多くのハードウェア知識 (EE レベルに近い) を意味します。
    • ゲーム用の低レベル 3D グラフィックス プログラミングなど、特定の分野に携わっている場合は、特定のグラフィックス カードの詳細を知っておく必要があります。
    • Web またはデスクトップ アプリケーションを実行している場合は、おそらくそれほど多くはありません。

しかし、すべての開発において、おそらく基本を知っている必要があります。例えば、

  1. フォンノイマン アーキテクチャのボトルネックはどこにありますか。
    • CPU キャッシュはどのように機能しますか (マルチスレッドで重要)。
    • 単一プロセッサのマルチプロセッサ CPU で OS スケジューリングがどのように異なるか (これもマルチスレッドで重要です)。
    • IO が機能する方法と、ファイルに書き込むときの理由は、必ずしもデータがすぐに永続的であるとは限りません。
    • IO の速度と、ほとんどのデータベース アプリケーションが IO バウンドである理由。
    • ネットワークがIOよりもさらに遅く、信頼性が低い理由(ワイヤレスネットワークはさらにそうです)。

一方で、メモリ マップト IO とは何か、NAND フラッシュと NOR フラッシュの違いなどの詳細を知ることは、平均的な* (デスクトップ/Web) 開発者にとって本当に重要だとは思いません。最新の CPU のアーキテクチャに関する知識でさえ、過去数年間で CPU がどれほど複雑になったかを考えると、おそらくそれ自体が科学になるでしょう。最新のコンパイラによって出力されるコードの予測がますます難しくなっていることは言うまでもありません(記事リンクされたショーは、低レベルの最適化でコンパイラを裏切ることが今では難しいことを示しています)。数十年前は自動車整備士が簡単だったのと似ていますが、今日では自分で車を修理しようとする人はそれほど多くありません。

**「平均」の定義は異なる場合があります。*

于 2009-12-07T10:19:55.087 に答える
3

コンパイラが出力するアセンブリ言語 (私の場合は C++) を理解できると非常に便利です。これは、最適化などの問題を検討したり、難しいデバッグの問題を解決したりするときに非常に役立ちます。

于 2009-12-07T10:28:11.107 に答える
3

基礎となるハードウェアについて何も知らなくても、やり遂げることは確かに可能です。ただし、たとえば、キャッシュがどのように機能するか、特定のターゲット マシンでどの操作が速い/遅いかについて少しでも知っておくと、ソフトウェアを設計する際に、より適切な設計上の決定を下すのに役立ちます。

個人的には、マシンが仕事で 1 日 10 時間以上費やしていることを知ると、大きな満足感が得られると思います ;)

そして、なぜ平均に落ち着くのですか?

于 2009-12-07T10:23:40.960 に答える
2

多くの場合、プログラムがどのハードウェアで実行されるかわからないため、1 台のマシンの特定の詳細を気にしすぎるのは意味がありません。ユーザーは、64 ビット RISC ハードウェア上の仮想マシンで Win32 実行可能ファイルを実行する可能性があります。対象のハードウェアが明確にわかっていない限り、OS と標準ライブラリが提供する抽象化を使用し、意図したとおりに使用することをお勧めします。OS、コンパイラ、ライブラリを構築する人々が適切に仕事をすることを信頼してください。

于 2009-12-07T10:37:38.250 に答える
1

OS 開発者は、基礎となる物理的な世界を抽象化するために素晴らしい仕事をしています。それらの目的は、平均的な開発者に多くのハードウェアへの共通インターフェイスを提供して、そのアプリケーションに集中し、移植性があり、保守が容易で、OS の更新時に最適化できるコードを開発できるようにすることです。

したがって、平均的なアプリケーションを作成する平均的な開発者にとっては、ハードウェアについてあまり多くの質問をしないほうがよいと思います。

于 2009-12-07T10:38:59.370 に答える