web-dev-qa-db-ja.com

ますます高まるプログラミング言語の使用が増えると、コンピュータアーキテクチャの知識を持つプログラマが不足する可能性がありますか?

ウィキペディアの記事「高水準プログラミング言語」からの引用:

高水準プログラミング言語は、コンピューターの詳細から強力に抽象化されたプログラミング言語です。低レベルのプログラミング言語と比較して、自然言語の要素を使用したり、使いやすくしたり、プラットフォーム間で移植性を高めたりできます。このような言語は、メモリアクセスモデルやスコープの管理など、CPU動作の詳細を隠します。

つまり、プログラミング言語のレベルが上がるにつれて、プログラマーはプログラムが実行されているハードウェアから離れます。

今、私はレベル間の言語使用の統計を知りませんが、より高いレベルの言語がより低いレベルの言語に取って代わりつつあるのではないかと思います。もしそうなら、これはコンピュータアーキテクチャの知識を持つプログラマの不足につながる可能性がありますか?これは業界にとって問題でしょうか?

15
gablin

できるだが、問題が発生する可能性は低い。

それはただの経済学です。大多数の人々が基盤となるアーキテクチャを理解する能力を失い、基盤となるアーキテクチャを理解するための大きなニーズが依然として存在する場合、実行する人は仕事をしてより多くの報酬を受け取ります。それが必要とされない仕事(そして、それでももっと給与が支払われるかもしれません...誰が知っていますか?)。

知っておくと役に立ちますか?もちろんです。あなたはおそらくより良くなるでしょう。ほとんどの場合必要ですか?いいえ。それが抽象化が非常に優れている理由です。私たちは自分自身が巨人である必要はなく、巨人の肩の上に立っています(ただし、常に周りには巨人がいます)。

16
Ryan Hayes

私はそう思う。それは私が心配している傾向です。 抽象化は完璧ではありません ;複雑な問題を単純化するための完璧な方法があったとしても、元の問題はすぐに置き換えられます。 (これは過去に起こったことであり、時々コンピュータで起こり、物理学のように私たちが行うように後方互換性についてそれほど心配しない他の分野ではもっと頻繁に起こります。)

これが意味することは、抽象化を使用するたびに、それが隠している本質的な複雑さのいくつかの重要な部分があるということです。それが何であるか、なぜそこにあるのか、何をしているのかがわからない場合、誤って大きな列車の残骸を書いてしまいます 。本当に続いています。

他の方法であなたに伝えようとする人は、ヘビ油を売っている、または単に深刻なソフトウェアの経験があまりありません。仕事では、アメリカのすべてのテレビ局とラジオ局のかなりの割合を実行するプログラムに取り組んでいます。ステーションとネットワークが大きくて複雑になるにつれて、1つの小さなステーションの製品を設計するためにうまく機能した迅速で汚れた手法が、50のステーションと200のチャネルを持つネットワークに実装されると、大きな技術的壁にぶつかります。言語がどのように機能するか(そしてそもそも効率的な言語)を深く理解していなければ、データベースがどのように機能するかを深く理解していなければ、私たちのプログラマーは製品をうまく拡張できなかったでしょう。

これも孤立した話ではありません。ソフトウェアは単純化するのではなく、ますます複雑になり続けており、このレベルの技術的な専門知識は失われた芸術のようなものになり、明日のプログラムは今日のプログラムよりも悪く、良くはないでしょう。

9
Mason Wheeler

はい、言語が進歩するにつれて(そして、同様に、命令セットが進歩するにつれて)、人々はハードウェアをあまり理解しないと思います。しかし、他の多くの場所で指摘されているように、今日のほとんどのプログラムの主な制約は、CPU時間や効率ではなく、プログラマーの時間です。 if言語を設計する人々は抽象化を効率的にするために仕事を続け、そしてifこれらの抽象化を適切に使用し続けるなら、コンピュータアーキテクチャの理解は必ずしも必要ではありません。少なくとも完全な知識は基本的ではありませんこれらは優れたプログラマーです日々。

5
David Hollman

いいえ、それはdeficitにコンピュータアーキテクチャの知識を持つプログラマーをもたらすことはありません。言語は、特定のドメインの問題を解決するために使用されます。特定の問題を解決したい場合は、適切な言語を使用するか、リソースを考慮して十分な言語を使用します。

実際には、どのドメインが実際にコンピュータのアーキテクチャの知識を必要としていますか?特定のハードウェアアーキテクチャに結び付ける必要がありますか?オペレーティングシステム?デバイスドライバ?もちろん、それでもそのようなコードの一部だけが特定のアーキテクチャの知識を必要とします。

パフォーマンス向上?はい、コンピュータのアーキテクチャに関する知識を応用して、アルゴリズムのパフォーマンスを向上させることができます。しかし、他の2つの要因がパフォーマンスに大きな影響を及ぼします。それは、より優れたアルゴリズムの使用と言語のランタイム環境の知識です。

本質的に、より抽象的なプログラミング言語は、コンピュータアーキテクチャの詳細が不要な問題を解決します。彼らはより多くの問題を解決することができます。それらを使用する人々は、マシン依存の問題を解決するためにそれらを使用していません。マシン依存の問題を解決する必要がある人々は、マシン対応言語を引き続き使用します。これはゼロサム問題ではありません。

1
Huperniketes