開発者は、コンピューターのハードウェアの内部動作を知っている必要がありますか?[閉まっている]


13

メモリの割り当て方法やメモリ管理(たとえばCから学べること)だけでなく、ハードウェアの側面や、コンピューターハードウェアの各コンポーネントが内部でどのように機能し、どのように相互に通信するかについても話します。

あなたはこれをすべて知っていますか?

回答:


31

何をするかによります。

あなたが組み込み開発者である(そして非常に小さなデバイスで金属に非常に近いところで書いている)場合、システム内のすべてのコンポーネントの内外すべてを知る必要があります。

システム開発者(およびオペレーティングシステム、デバイスドライバー、またはデータベースを作成している場合)であれば、低レベルのハードウェアインターフェイスについて知っておくべきすべてのことを知る必要があります。

ゲーム開発者であり、プロジェクトの後半(物事を最適化する場合)である場合、使用するCPUキャッシュとグラフィックスアーキテクチャの詳細を知る必要があります。

あなたがアプリケーション開発者であれば、メモリ使用量を適切なレベルに保つことを除いて、これを知る必要はありません。

あなたがウェブ開発者なら、インターネットプロトコルを知っていると便利ですが、メモリの問題に対処する方法を除いて、この他のものは必要ありません。


20
基幹業務アプリケーションのみを行う場合でも、マシンについて知ることにより、常に優れた開発者になります。そのような知識は必要ではないかもしれませんが、それは確かに重要です。
ロバートハーベイ

@Robert Harvey:正解です。だからこそ、「知る必要はない」と言います。とにかく、これらのことを知ることは確かに害はありません。:)
greyfade

2
+1ですが、メモリ使用量を考慮していないWeb開発者を(以上)知っています。
ティムポスト

「アプリケーション開発者の場合は、メモリ使用量を適切なレベルに維持することを除いて、これを知る必要はありません。」このあたりのシステムでのより大きな問題のいくつかは、データベースの使用方法を知らないアプリケーション設計者が「コードが遅いので、私のものではなく、プロファイルがあります」とdbaを非難することが原因です。
アンドリューヒル14

@AndrewHill:アルゴリズムの問​​題ではなく、ハードウェアの問題はいつですか?問題は、高レベルのアルゴリズムではなく、低レベルのハードウェアの動作を理解することです。
greyfade 14

12

いいえ、あなたはありません持っていると、私はそれは素晴らしいアイデアだと思います。物事が論理レベルでどのように機能するかの一般的な概要を学ぶことは、開発において本当に助けになりました。


6

アプリケーション開発者とWeb開発者に関するコメントは間違っていると思います。

たとえば、誰かがsshや他の暗号化アルゴリズムなどの多くのセキュリティ関連のWebアプリケーションを開発している場合、マシンが実際に処理できるかどうかを判断できるように、実行しているハードウェアの種類を知ることが非常に重要です作業負荷。別の例には、ダウンロードされたコンテンツをホストするサーバーが含まれます。かなり大量のリクエストが予想される場合は、ディスクドライブの機能と、接続されているバスインターフェイスの種類をよく理解している必要があります。

アプリケーションの観点から、何らかのCADプログラム、または3Dレンダリングを行うものを開発している場合、これらのアプリケーションはアルゴリズムとグラフィックの両方で計算集約的であることが期待できます。ハードウェアを理解して、アプリケーションの応答性と使用可能性を確認するのが賢明です。

PCIプロトコルのようなものの詳細を理解する必要があると言っているわけではありませんが、インターフェイスとハードウェアが何ができるかをよく理解しています。

最終的には、どのタイプの開発を行うかに関係なく重要です。あなたが理解するために必要な詳細レベルは議論の余地があります。


2

プロのプログラマのために、私はそれを見て総合的な全体の理解へのアプローチシステムというだけで与えられたプログラミング言語の構文を知ることよりも、今はやりを。プログラマー(およびアナリスト)が賢明な設計決定を下し、より多くの情報に基づいたアルゴリズムとデータ構造の選択を行うのに役立ちます。

私自身の経験では、最高のプログラマーは、ターゲットプラットフォームのネイティブアセンブリ命令セットを理解しているのか、学校でのコンピューターの入門コース、初歩的なデジタルエレクトロニクス理解しているのか、詳細理解できるのか、程度の差はあれ、内部の仕組みについて知っている傾向があります最新モデルのCPUおよびGPUコアの説明では、最も優れているのは、より劣等なピアよりも完全な知識を持っています。


1

それが役立つかどうかはわかりませんが、私が取り組んでいるシステムについて本当に必要な以上のことを知っているとき、私はより快適に感じます。私が若かったとき、私が取り組んでいたシステムのアセンブリ言語を知らないのは好きではありませんでした。変更したか、十分に多くのことを学んだので、もう1つではシステムに対する感触があまり大きくなりません。私はハードウェアの専門家ではありませんでしたが、コンピューターを分解して、さまざまなサブシステムとそれらの相互作用に名前を付けることができます。


0

私がほとんど知らないことは、ほぼ25年前にコンピューターアーキテクチャクラスで学んだことです。

主に、さまざまなプラットフォームでアプリケーションプログラミングを行っています。コモディティx86ハードウェアだけでなく、Sparc、PA-RISC、その他のサーバーアーキテクチャでも実行できるコードを開発していた時代がありました。そのレベルの知識は、私がやる仕事には必要ありません。


0

私はAP高校の授業としてJavaプログラミングを教えています。生徒がコンピューターの内部動作について何かを知っていると、プログラミングの概念を理解するのに役立つことがわかりました。

私は行き過ぎではありません-物事がメモリに格納される方法などの単純な概念は、学生を助けるようです。


0

タイトルで尋ねられたように私はこれに答えるつもりです:

はい、開発者ハードウェアの内部動作を知っている必要があります。開発者のタイプと彼らの目標、利用可能な時間、個人的な興味に依存します。もちろん、優先順位は、彼らが彼らの地域で採用している即時のツール、テクニックなどにあるべきです。この意見は、丸みを帯びた個人であることの線に沿っています。クラフトを犠牲にすることなく、クラフト以外のことをよく知っていれば、それだけ良くなります。

だからといって、チーズウィズに夢中になる必要があるわけではありません。ハードウェア、各要素の相互作用、オペレーティングシステムによるハードウェアの使用方法の概要を把握してください。これらの方針に沿って、すべての開発者向けにオペレーティングシステムのコンセプトブックを読むことをお勧めします。

これをすべて知っていますか? ヘックありません。SCSIに関する無駄な情報をあまり忘れてしまったので、面白くさえありません。しかし、それについて学ぶことは非常に貴重な経験でした。また、ハードウェアに関連する他の多くの詳細を忘れましたが、その知識から学んだ重要な概念を思い出してください。

したがって、ハードウェアについて学ぶことをお勧めします。必要に応じて、妥当なペースで実行してください。できる限り多くの詳細を学びますが、概念に焦点を合わせます。


0

すべての開発者は、コンピューターエンジニアリングに関連する基本概念を知っている必要があります:バイナリ演算、ベース変換、ブール代数、論理ゲート、CPUの構成(およびコンポーネントの機能)、キャッシュ、仮想メモリ、圧縮、エラー検出、修正...

これらの既知の範囲は、プログラマーの仕事に依存します。他の人が言ったように、組み込みシステムの開発者は、Web開発者よりも、ハードウェアの機能と、ハードウェアを最大限に活用するソフトウェアの作成方法に精通している必要があります。

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