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


15

ウィキペディアの記事「高レベルプログラミング言語」の引用:

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

つまり、プログラミング言語のレベルが上がると、プログラマーがプログラムを実行するハードウェアから離れるほどです。

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

回答:


16

それは可能ですが、おそらく問題につながることはありません。

それはただの経済学です。大半の人々が基礎となるアーキテクチャを理解する能力を失い、基礎となるアーキテクチャを理解する必要性が依然として大きい場合、実際に仕事をする人はより多くの収入を得ますが、そうでない人はそれが必要ない仕事(そして、まだもっと支払われるかもしれません...誰が知っていますか?)。

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


4
しかし、すべての抽象化には漏れがあります。漏れやすい抽象化のトラブルシューティングの頼りになる人になりたいのであれば、基礎となるアーキテクチャを知ることは必須です。
dsimcha

5
@dsimcha、同意しましたが、頼りになる人になるためには「他の人」が必要です;-)誰もがすべてを知る必要がある場合、抽象化は悲惨に失敗しました。
プリーツ

1
@Preets、そしてそれが多くの抽象化惨めに失敗した理由です。頼りになる男が存在する余地さえ持つことは、抽象化がすでに失敗している証拠です。
Pacerier 14

@Ryan、実際には、将来、漏れやすい抽象化のレイヤー上のレイヤーに起因する微妙なバグでいっぱいのアプリで世界があふれるという問題につながります。Googleのように無限のリソースを持つ企業がコアアプリにバグを抱えていることは今では驚くべきことです。
Pacerier 14

3
@Pacerier googleは無限のリソースにはほど遠いため、他のほとんどのアプリケーションよりも数桁多いコード行で構成されるアプリケーションを数桁も複雑にします。すべての抽象化がリークする可能性があるため、すべての人が低レベルのコンピューターのことを知っているべきだと主張することは、嵐が来て家を壊す可能性があるため、誰もツールを使用せずにゼロから家を建てる方法を知っている必要があると言うようなものです。そのようなリソースを使うことは実行不可能(または賢い)ではありません。
サラ

9

私はそう思う。それは私が心配している傾向です。 完璧な抽象化はない。複雑な問題を単純化する完璧な方法があれば、元の問題を非常に迅速に置き換えます。(これは過去に起こりましたが、時々コンピューターで、物理学など後方互換性をあまり気にしない他の分野でも頻繁に起こりました。)

これが意味することは、抽象化を使用するたびに、それがあなたから隠れている本質的な複雑さの重要な部分があるということです。それが何なのか、なぜ存在し、何をしているのかわからない場合、誤って大きな列車の残骸を書いしまい、実際に何が起こっているのかわからないので、それらを修正する方法を知らないことになります。

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

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


5
「作業場所から1層下にある抽象化を知る必要がある」と表現されたと聞きました。まあ、それはかなり悲観的でした。私の記憶に欠陥がある。したがって、CまたはDelphiで作業している場合は、アセンブリの仕組みを知っておく必要があります。SmalltalkまたはJavaで作業している場合、VMがどのように機能するかを知っておく必要があります。(おそらく、アセンブリについて何か常に知っている必要があります!)TCPを使用している場合は、IPがどのように機能するかを知っておく必要があります。等々。
フランクシェラー

1
つまり、さらに先に進むことができます。なぜ、アセンブリを知るだけで十分なのでしょうか。これは、バイナリCPU命令の単なる手持ちの高レベルの抽象化です。ちょっと待って!マシンコード?それは単なる抽象化です!トランジスタを使用して論理ゲートを構築するCPUの構築方法を学ぶ必要があります。そしてバスとレジスタ。ちょっと待って!トランジスタ?これは、特定のアトム構成の単なる抽象化です。原子は、量子場のゆらぎを抽象化したものです。結局、これjavascript:alert("Hello world")は弦理論の博士号を必要とするだけです。
サラ

1
@kaiあなたは少しばかげている。私はあなたに同意する傾向がありますが、ほとんどのアプリケーションではいくつかの層を理解する必要があるのは通常そうではありません。しかし、私たちは毎日のことではなく、エッジケースについて話している。もちろん、料理をするために配管がどのように機能するかを知る必要はありません。しかし、汚れた水が流しに充満し始めたら、おそらくそれを修理しようとする前に少し学ぶ必要があります。または、再び機能するまで、そして誰が水が行くのかを気にするまで、鉄筋の一部を排水溝に押し込むことができます。(続き...)
ドリュージョーダン

1
@DrewJordan私のポイントは、あなたが特定のクラスの問題を知り、修正する必要がある(または単に個人的な関心を持っている)専門家でない限り、あなたは内部の仕組みを知る必要があると主張するのは非常に率直に言って使用しているすべてのツールの奇妙な微妙さ。私はその論理的な結論に視点を向けただけです。確かに、イーサネットケーブルの構築方法を知っていると、インターネット接続が失敗したときに適切なツールを使用して新しいケーブルを構築できますが、20層以上で作業するときに知識を得るために時間とお金を費やすことは無駄です。
サラ

1
@DrewJordanはもちろん、誰かが抽象化が壊れたときに誰かがそれを修正できるように、これらすべてを知る必要がありますが、抽象化の全体のポイントは、詳細を知る必要がある人の数を最小限に抑えて、大多数が集中できるようにすることです物事を成し遂げます。あなたが任意にちょうどあなたが個人的にで動作するように起こるのかに依存して示されているようなものは、「あまりにも低レベル」を取得する場所の線を引くところ私のargumentum広告absurdium(錯誤されていない、私はあなたが知っている必要があります!)
サラ

5

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


2
理論的にはそうですが、それらはいくつかのかなり大きなifです。
メイソンウィーラー

1

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

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

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

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

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