「プログラマー」は過剰な一般化です

このコードにエラーがある可能性があります。 私は彼が正しいことを証明しただけで、それをテストしませんでした。

ドナルドホイップ



今日、私はC ++ STL関数make_heapを使用することは不可能であると述べた投稿に出くわしました。なぜなら、ほとんど誰もそれを正しく使用する方法を知らないからです。 最初は、このアイデアのばかげたことにatしていました。少なくともアルゴリズムを最初に理解したことがあれば、make_heapを正しく使用する方法を知っている必要があります。 しかし、その後、私は何人のプログラマーが束が何であるかを知らず、さらに彼らもそれを必要としないことを考えました...そして、私はこれらすべての人々が等しくプログラマーと呼ばれることに気付きました。



私が小さい頃、私は正しいプログラミング技術について多くの悪いアドバイスを受けました。 長年にわたり、私はほとんどのヒントがそれ自体では悪くないが、文脈から与えられたものではないことに気づきました。 今日のスタートアップの全盛期は、多くのハッカーを駆り立て、「パフォーマンスは重要ではありません」が、特に予期しない方法で相互作用する可能性のある複雑なアーキテクチャに関して、多くの落とし穴とニュアンスを伴うアドバイスの一部であることを認識しています。 このようなステートメントのコンテキストの欠如による台無しにされた電話効果は、それ自体が問題ですが、実際には、より深い問題の症状にすぎません。



「プログラマー」という用語は、さまざまな能力とスキルを網羅しています。 垂直軸に沿って、プログラマーはvbscriptでほとんど書くことができません-インテルのコンパイラーや航空会社の科学ソフトウェアを開発できます。 横軸に沿って、データベースのエキスパート、GPUパフォーマンスの向上、並列コンピューティングライブラリの作成、プリンターの物理エンジンまたはドライバー、画像処理の実行、3Dモデルの生成または人工知能の分野での研究、CoffeeScript、HTML5およびAJAXの開発を行うことができますWebアプリケーション、またはnginxとPHPを使用して、Webアプリケーションが動作するLAMPスタックを開発します...そしてそれはすべてプログラマーです。



これはクレイジーです!


私たちの世界はプログラムに飲み込まれています。 将来的には、プログラミングは読み書き、数学とともに基本的なコースになります。 誰かの「プログラマー」について話すのは意味がありません。人口の10%、またはそれ以上が、あるレベルまたは別のレベルのプログラマーだからです。 この言葉には非常に多くの意味があるので、平等に成功すれば、自分を物理学者ではなく科学者と呼ぶことができます。 代替手段は何ですか? それを修正するための最善の試み( 開発者、プログラマー、CS科学者の違い )は3つのオプションしか提供せず、私と人工知能の学位を持つ大学卒業生を区別できません。 彼らは関数型言語を使用して多次元の数学的分析と評価を行います。これを理解するには何年も費やさなければなりません。 C ++およびHLSLアセンブラーで高速コードを記述し、複雑な変換のマトリックスをジャグリングして、画面にきれいな絵を描きます。 あれもあれも-まったく難しい理由で(まったく異なる理由で)困難な職業であり、私たちは誰も他の仕事をすることができませんでした。 私たちの1人にとっては良い習慣であり、もう1人にとっては単に嫌なことです。 そして私たちは両方ともプログラマーです。



実用的な観点から何が良いかについて無意味な言語のホリバーと無意味な論争がある理由を知っていますか? 「実践」がすべての人にとって同じことを意味する狭い円以外の問題について、誰も友好的な合意に至らない理由を知っていますか? はい、私たちはあまりにも一般化しています。 私たちは自分たちを単に別のことを専門とするプログラマーだと考えており、私たちの経験は私たちの専門分野以外にも適用可能であると信じています-これはそうではありません。 私たちは、化学者に実験方法を教える産業技術者、または言語学者に多くの紙を使用するという理由でエッセイの書き方を教える建築家のようです。



この態度は、コンピュータサイエンスの基礎に根ざしています-基本的なデータ構造のセットが必要なすべてを実行できるということです。 しかし、これがプログラミングに一般化されるのは、単にそうではないという理由だけで間違いです。 これらの抽象的なデータ構造は、数学の理想的な国でのみ必要なことをすべて行い、異なる分野と完全に異なるアプリケーション用に作成された実装の違いを無視することを忘れています。 ドナルド・クヌースは理論と実装の違いを理解しており、理論的アドバイスと実装ベースのアドバイスを区別する方法を学ぶ必要があります。



プログラマーかどうかを尋ねるだけでは十分ではありません。 「プログラマーがプログラムを書く」というのは、「科学者が科学を作る」ように聞こえます-それはただのオタクは原子炉を作らないということです。



All Articles