当時、開発者は金属にずっと近づいていました。Cは基本的にアセンブリの上位レベルの置き換えであり、入手可能なハードウェアにほぼ近いため、コーディングの問題を効率的に解決するためにポインターが必要なのは当然でした。ただし、ポインターは鋭利なツールであり、不注意に使用すると大きな損傷を引き起こす可能性があります。また、ポインターを直接使用すると、当時は問題ではなかった多くのセキュリティ問題の可能性が開かれます(1970年には、インターネットはいくつかの大学にまたがる数十台のマシンで構成されており、 ...)、しかしそれ以来ますます重要になった。したがって、今日では、生のメモリポインタを回避するために、高レベルの言語が意識的に設計されています。
「VB.NetまたはJavaで行われた高度なことはCでは不可能」と言うことは、控えめに言っても非常に限定的な視点を示しています。
まず第一に、これらの言語はすべて(アセンブリでさえ)チューリング完全であるため、理論的には1つの言語で可能なことはすべて可能である。VB.NetまたはJavaコードの一部がコンパイルおよび実行されたときに何が起こるかを考えてみてください。最終的に、それはマシンコードに変換(またはマッピング)されます。CやC ++などのコンパイル済み言語では、元の高レベルのソースコードに相当するマシンコードの完全な本体を、1つ以上の実行可能ファイル/ライブラリとして実際に取得できます。VMベースの言語では、プログラムの同等のマシンコード表現全体を取得することはより困難です(不可能な場合もあります)が、最終的には、ランタイムシステムとJITの奥深くのどこかにあります。
もちろん、特定の言語で何らかの解決策が実現可能かどうかは、まったく別の質問です。賢明な開発者はアセンブリでWebアプリを書き始めることはありません:-)しかし、これらの高レベル言語のほとんどまたはすべては、膨大な量のランタイムおよびクラスライブラリコードの上に構築されていることを覚えておくと便利です。これは、低レベルの言語、通常はCで実装されます。
質問に答えるために、
若者への指針に関する知識は重要だと思いますか[...]
ポインターの背後にある概念は、間接指定です。これは非常に重要な概念であり、すべての優秀なプログラマーが特定のレベルでそれを把握する必要があります。誰かが高級言語のみで作業している場合でも、間接指定と参照は依然として重要です。これを理解しないと、非常に強力なツールのクラス全体を使用できなくなり、長期的には問題解決能力が著しく制限されます。
私の答えはイエスです。本当に良いプログラマーになりたいのであれば、ポインターも理解する必要があります(再帰だけでなく、これは新進の開発者にとっての典型的な障害です)。あなたはそれで始める必要はないかもしれません-私はCが最近の第一言語として最適であるとは思いません。しかし、ある時点でインダイレクションに慣れる必要があります。それなしでは、使用しているツール、ライブラリ、フレームワークが実際にどのように機能するかを理解することはできません。そして、彼/彼女のツールがどのように機能するかを理解していない職人は非常に限られたものです。まあ、高レベルのプログラミング言語でも理解できるかもしれません。優れたリトマステストの1つは、二重にリンクされたリストを正しく実装することです。お気に入りの言語で実行できる場合、間接参照を十分に理解していると主張できます。
しかし、他に何かがなければ、信じられないほどシンプルなツールを使って信じられないようなものを構築することができた古いプログラマーへの敬意を学ばなければなりません(現在と比較して)。私たちは皆巨人の肩の上に立っており、私たち自身が巨人であるふりをするよりも、これを認めることは良いことです。