プログラマーとヒューマンファクター

はじめに

プログラマは技術者であるという決まり文句をよく目にします。 公理ではなく決まり文句と呼ぶのは、この記事の本質です。 この記事は、プログラマーと呼ばれる人々に関する開発者や他の関連する専門家のインタビューで生じた蓄積された考えに基づいて生まれました。



技術者



技術者の神話

それで、私はプログラマーが技術者であるという主張に挑戦します。 個人的な意味ではなく、一般的に。 つまり、技術者であるプログラマを見つけることが不可能であることを証明しようとはしていません。 私は、プログラマーの財産「技術者」は必要でも十分でもないと断言します。



語源論
まず、なぜ語源を見るのですか? 語源、言葉の起源の科学は、文明の変化する要求に直面して、言葉によって示される抽象化の発展/劣化を本質的に追跡することを可能にします。 言葉は変化し、元の意味に似た概念にまで拡張されます。または、さまざまな変換により、意味が反対に変わります。 記事のトピックに直接関係するため、この点については後で詳しく説明します。 何らかの方法で、語源により、単語に埋め込まれた元のアイデアを追跡できます。



テクニック
Ozhegovの辞書では、 技術者を次のように定義しています。

テクノロジー、夫。 (分解)。 テクノロジーの分野で働くスペシャリスト、何かのメンテナンス、そしてテクノロジーを知って愛する一般の人。
「テクノロジー」の語源は、ギリシャのτέχνη-芸術、スキル、能力へと導きます。 つまり、この用語の鍵はクラフトの要素です。 「テクノロジー」から「テクノロジー」という用語の最も一般的な派生語を調べると、 テクノロジー (他のギリシャ語から。.χνη-芸術、スキル、能力。λόγος-思考、理由、技術、生産方法)は一連の手段と技術である特定のシステムの機能を保証します。 情報技術の場合-情報システム。 したがって、技術は形式化され構造化された知識です。 この文脈において、技術者たちは「ドライ」と呼ばれています。 乾いた技術者-骨化したフレームワークと指示の観点で世界を見る人。



プログラム
プログラマーはプログラムの作成者です。 プログラム (ギリシャ語から。.ρο-以前、ギリシャ語。Γράμμα-レコード)は、文字通り「処方箋」として翻訳されます。 プログラマーは、あるべき姿で書く。 はい、彼は説明を「テクノロジー」として認定するために詳細にペイントすることを余儀なくされていますが、接頭辞からは何も得られません。 プログラマーは書きません、彼は処方します。 処方箋は、これらの指示の消費者に対してより高いレベルの抽象化で動作する人のために作られています。 したがって、プログラマーはテクノロジーのレベルではなく、それ以上です。 次に、これらの単語に正確に埋め込まれているものを検討します。



認知的議論
圧倒的多数を占めるITテクノロジーの究極の目標は、ユーザーの人間のニーズを満たすことです。 もちろん、科学、研究、軍事などがあります。 しかし、IT技術のブームは企業および消費者向けソフトウェアに正確に影響し、ユーザーのタスクを解決しました。 たとえば、 2009年のデータによる 、ヨーロッパのIT産業のセグメンテーションは次のようになります。



これらのすべての領域のうち、ミドルウェアのみが、ユーザーが完全に理解できないエンティティで動作します(ユーザーをポンプで操作しても、ワークフローの概念も理解します)。他のすべてのセグメントは、ユーザーの概念とその操作に焦点を当てています。 最終的に、すべてのプログラムは、ユーザーが理解できる形式で入力を受け取り、ユーザーが理解する操作を実行し、ユーザーが理解する結果を生成するように設計されています。 このユーザーは、カバラの女子高生、システム管理者、代理人、パイロット、または研究者です。 しかし、これらはすべて、特定のテクノロジーセットを使用して特定のデータを処理する特定のニーズがあった脳の人々です。 そして、ここで疑問が生じます。これらの心理的信号の翻訳を、技術のための正式で理解可能な言語に翻訳するのは誰ですか? プログラマーでない場合、誰ですか?





プログラマー、数学、コンピューティング

プログラミングは離散数学に似ていると同様に広く信じられているため、数学者にプログラミング言語を教える価値があり、優れたプログラマーになります。 繰り返しますが、私は暗号、組み合わせ論、関係代数、統計学、応用数学からの他の学問の知識がプログラマーを悪化させることはないと主張しませんが、再び、私は自問します:それらは必要ですか?



コンピューターとプロセッサー
コンピューター、別名コンピューターは、語源的に動詞compute-count、computeに戻ります。 そして、これは驚くべきことではありません。操作の最低レベルでは、コンピューターは算術演算でいっぱいであり、その大部分は加算演算子です。 たとえば、デバッガーをSkypeプロセスに追加しました(複雑な数学的計算では見られません)。 5つの命令の半径内-2つの追加:



20世紀の50年代、人々が母国語でコンピューターと会話したとき、数学は語彙の不可欠な部分でした。 これに加えて、コンピューターに委任されたタスク自体はほとんど計算でした。 したがって、コンピューターは本当にコンピューティングに従事しており、コンピューターの対話者であるプログラマーが積極的にコンピューターに参加していました。

しかし、私たちが見ることができるように、コンピューターは静止しておらず、人々に近づきました。 ある時点で、コンピューターは人間の形容詞(個人)を受け取ります。 PC-パーソナルコンピューターは事実上の標準になります。そのため、「パーソナル」の定義はトートロジカルになり、したがってしばしばスキップされます。 ここで、前述のシンボルの変形に注意してください。 結局のところ、自分のパーソナルコンピューターを所有している人々は、コンピューティング用のコンピューターを作成した前任者ほどコンピューティングに関心がありません。 新しいユーザーは、はるかに高い抽象度レベルで動作し、学校では数学にしっかりと集中しています。 彼らがコンピューターで行うことは、もはや計算とは言えません。 彼らは単にデータを入力し、他のデータを取り戻します。 つまり、確立された用語、データ処理に従います。 彼らにとって、コンピューターはプロセッサーです。 逆説的に、この言葉はコンピューターの最も計算的な部分、つまり中央処理装置を指します。 というのは、「コンピューター」という用語はすでに使用されているからです。 しかし、それは別の方法でなければなりません-人々は、CCU-中央演算ユニットを介して、高レベルの抽象化を厳密な算術命令の言語に変換するプロセッサに取り組んでいます。



プログラマーの進化

楽器が変わると、職人も変わるしかない。 コンピューターが受けた信じられないほどの変化を考えると、プログラマーの意見の不変は驚くべきことです。 このプログラムを書いたプログラマをどのように比較できますか:





そしてこれは:



foreach (File log in Server.Logs) { if (MaxErrorCluster(WebServer.Parse(log)).Length > Config.ErrorClusterThreshold) { Alerts.Add(Messages.BruteForce); } }
      
      





プログラミング言語は人間の言語に近づいています。 4GL言語非常に記述的であるため、実行される命令のリストというよりは、宇宙の形而上学的な説明に似ています。 開発された技術はプログラマーを環境から非常に抽象化しているため、プログラマーは自分のプログラムを何を、どこで、いつ実行するのか分からないことがよくあります。 暗い過去から現代のプログラマーのために残っている唯一のものは、ユーザーと彼の要件です。



ユーザーは私たちのすべてです!

だから、ユーザーは私たちのすべてです。 マーケティングのでたらめではなく、知的努力の焦点という点で。 ユーザーとユーザーのみが、プログラマーが作業するメインオブジェクトです。 プログラマーは、ユーザーのボキャブラリーを、使用されているテクノロジーの言語に翻訳します。 プログラマーは主に翻訳者です。 ちなみに、 階層化アーキテクチャはこの翻訳の続きであり、自由形式で概説されたユーザーの考えを、シリコン結晶格子が理解できる形式にします。 プログラマーは、50代前半でこのような翻訳を行い、頭の中でそれらを作成しましたが、多くの場合、すべてのステップに気づいていませんでした。 今日では、さまざまなテクノロジーにより、プログラマーは近くにあるテクノロジーへの翻訳ステップを減らすことができますが、これはまだ翻訳です。 そして、ユーザーの脳の内容を理解するというプログラマーの仕事は、60年前と同じように重要です。







プログラマーと抽象化

ユビキタス言語を使用するという設計の大御所の呼びかけは、基本的に声明の言い換えです。つまり、テクノロジーを可能な限りユーザー抽象に近づけることです。 つまり ユーザー要件を実装するためにプログラマーが作成するテクノロジーは、ユーザーの頭の中にある概念クラスに準同型でなければなりません。 プログラマーの職業の非人間化者が定期的に忘れている重要なポイントが1つあります。 ユーザーの頭の中にある概念は暗黙的です。 つまり ユーザーのニューラルネットワークは、これらの概念によって各特定のエピソードの対象分野に適切な決定を下せるように構成されていますが、これらの概念を説明することはできません。 つまり 生殖に関する知識ではなく、反応的です。 そのため、ユーザーが自分の考えを積極的に定式化し始めると、一貫性のないナンセンスのように聞こえます。 これらの要件を彼の技術の言語に翻訳するプログラマーの仕事は、これらのすべての要件を生成する暗黙の概念をこれらの単語の流れで識別することです。 プログラマーは、ユーザーの概念クラスに対応する抽象化を識別するタスクに直面します。 抽象化が正しく識別された場合、新しい受信要件はそれを破ることはありませんが、スムーズかつ明確にそれに適合します。 間違っている場合、抽象化を再構成する必要があります。 プログラマはこれをリファクタリングと呼びます。 そして言語学者-語源。 カスタム抽象化の検索は、言語心理学的なイベントです。 はい、変数-関数、クラス、ファイル、モジュール-命名は、既存の記号システムと一致する新しい記号を識別するために、自分の脳を掘らないことと似ていますか? プログラマーは昼夜を問わず新しい言語を作成します-名詞、動詞、文法による抽象化レベルの言語。 言語学者はこれを夢見ていない!



おわりに

この記事では、すべての職業の中で、プログラマの職業が最も人道的であることを示しました。 人文科学とは異なり、プログラマーは、決定論的で魂のないデバイスのためにそれらを定式化できるように、ぼやけた人道主義の抽象化と定式化をよく理解することを余儀なくされます。 優れた翻訳者と同様に、プログラマーは人間と技術の両方の言語に堪能でなければなりません。 そして、一般人のプログラムと呼ばれるプログラマーの翻訳は、世界の古典の傑作のタイトルを主張する権利を持っています。



All Articles