抽象指向プログラマー

繰り返し聞いたプログラマーの話から始めましょう。



Joeに、<xyz>を実行する簡単なプログラムを作成するように依頼しました。 数時間、最悪の場合は1日、仕事がありました。 彼には数日かかり、そのために必要以上に複雑なフレームワークを作成しました。 なぜ彼は再び洗練されたのですか?



おそらく、ジョーは抽象指向プログラマー( AOP )であるという事実でしょう。

テンプレートフレーズ( snowclones )をいくつか紹介します



プログラムを頻繁にオーバーエンジニアリングする場合は、 AOPである可能性があります。



現在の問題よりも明日の問題に多くの時間を費やすなら、あなたはAOPかもしれません。



深い関係を探したい、無意識の洞察から心地よい振戦を感じたい、または類推による理由があるなら、あなたはAOPかもしれません。



抽象化の必要性


ソフトウェア開発は、抽象化に常に対処しなければならない数少ないアクティビティの1つです。 プログラミング言語、データ型、グラフィック表現、制御フローなど 実世界の抽象化、ハードウェアの抽象化、そしてしばしば抽象化の抽象化です。



プロセッサのパフォーマンスが( ムーアの法則に従って)急激に向上すると、抽象化の必要性が生じます。 私は、プロセッサーのあるコンピューターでプログラミングを開始しましたが、トランジスターの数は数百になりました。 Motorolla 6800には4100個のトランジスタがあり、クロック周波数は1〜2メガヘルツでした。 Zilog Z80には8500個のトランジスタと2〜8 MHzの周波数がありました。 プロセッサのレジスタ、割り込み、ある意味では物理プロセスの動作を理解することは、これらのコンピューターに本当に役立つことをさせる必要があるときに大いに役立ちました。



数十億個のトランジスタを搭載したプロセッサは現在量産中です。 たとえば、Intel Core i7には約10億個のトランジスタが含まれ、クロック周波数は2〜3.5 GHzです。



これは30年前のコンピューターの計算能力の約10億倍です。 しかし、人間はそれほど大きく進化することができませんでした。 プロセッサの電力の増加を効果的に使用する必要がありました。 その後、コンパイラ、仮想マシン、複雑なインターフェース、あらゆる種類のオプティマイザー、高レベルのプログラミング言語、その他のツールが登場しました。 ハードウェアと最新のソフトウェアの間には、多くの抽象化層があります。 そして、もちろん、それらは必要です。



したがって、プログラミングが抽象的思考の傾向を持つ人々を引き付けることは驚くことではありません...そして、おそらく、抽象的思考を持つ人は仕事を楽しみ、この分野で成功を収めるより多くの機会を持っています。



しかし、このように推論すると、すべての人が抽象的な思考によって特徴付けられるわけではないことを忘れがちです。 すべてのプログラマーが抽象指向であると結論付けることも、抽象思考が彼らにとって最良の選択肢であると誤って結論付けることさえできます。



抽象的思考


まず、定義を検討します

アブストラクト(形容詞)



アブストラクト(名詞)



抽象化は、定義により、情報の単純化であり、多数の例を調べて、それらを共通のテンプレートに圧縮することにより達成されます。



抽象的思考が自然な人もいれば、特定の事実を好む人もいます。 抽象的に言えば、それは人々が情報を処理する方法についてです。



ビジネスで広く使用されているMyers-Briggsパーソナリティタイプインジケータを検討してください。 このインジケーターを使用すると、直感と常識(タイポロジー表記を使用する場合はNとS)、それぞれ抽象的な思考と具体的な思考に基づいた4つのタイプの性格を識別できます。 (性格タイプの同様の分離を持つ他の心理学的研究があります)



抽象的かつ具体的な思考で明らかにされるいくつかの機能をリストします。



多くの人が自分の行動を状況に適応させるという事実により、与えられた情報を抽象的または具体的な意識の現状として解釈することもできますが、すべての人が支配的な傾向を持っていると考えられています。



抽象的/直感的な思考の兆候




特定の思考の兆候




ジョーに戻る


この記事が始まったJoeの話に戻りましょう。彼は(オーバーエンジニアの)コードを複雑にしました。 抽象指向のプログラマーにとって、すべては論理的です





しかし、ジョーと話をしたとき、私は彼に問題Xだけを解決するように頼みました。彼はYとZは将来避けられないことを知っていましたが、質の悪い仕事や将来の自信のために彼にフラストレーションを非難しました極端にします。



ここで、現在の状況が前面に出ます。 先を考える能力はあなたをヒーローにすることができます。 また、先を考える能力は簡単にあなたを負担に変えます。 瞬間的な問題に専念することで、あなたはヒーローになります...または負担になります。



秘trickは、特定の状況でどのアプローチが適切かを理解することです。



また、選択した戦略を同僚と調整する、つまりコミュニケーションすることも非常に重要です。



抽象指向のプログラマーについて聞いたフィードバックをお聞かせください...



ポジティブ










...そして、特定指向のプログラマー( CPC )についても同じこと



ポジティブ










ミニテスト


リストA.その中のどの項目があなたを最もよく説明していますか? (ためらうことなく答える)



  1. あなたはその実装の微妙さよりも一般的なアイデアに興味があります
  2. 人類の運命についてよく考えますか
  3. 特定の例から一般的なパターンを簡単に識別できます。
  4. あなたはしばしば人生の複雑さについて話します。
  5. ほとんどすべてを分析できると思う
  6. 新しい理論的原理を簡単に理解できます。
  7. あなたはしばしば、もっと良いことをする方法について考えることに時間を費やします。
  8. 状況が発生するさまざまな方法を簡単に把握できます。


リストB.その中のどの項目があなたを最もよく説明していますか?



  1. あなたは理論的な本を読んで退屈しています
  2. 理論的な選択肢よりも経験に頼ることを好む
  3. あなたが自分で何かをしようとすることが重要です
  4. 状況を分析し、起こりうる結果ではなく、現在の状態に焦点を合わせます
  5. 原則として、現在のクラスは将来の計画以上にあなたを興奮させます。


リストAのアイテムの数がBよりも多いことに同意する場合は、抽象指向でなければなりません。 逆に、リストBのステートメントが優先される場合は、特定のタイプの人格に関係します。



[すぐに予約したい。 まず第一に、性格タイプは運命ではありません。 多くの場合、人生は家族、仕事、友人などのために私たちの行動を適応させる必要があります。 第二に、現在の状況に応じて、同じ質問にさまざまな方法で答えることができることがわかります。 第三に、それはあなたの支配的な考え方を説明することです-これを行動を促すフレーズとしてとる必要はありません。]



適応思考


数年前、私は良いアナロジーを聞いた。 右利きでも左利きでも構いません。 ほとんどの人は、片手をプライマリとして使用し、一部は両方に堪能です。 しかし、誰かがより頻繁に右手を使用するという事実から、彼はまったく左を必要としないということにはなりません。 さらに、一部のタスクでは特定の手を使用する必要があります。右手で左手でハサミを使用するか、自動車を運転して、間違った手で速度を切り替えてみてください。



私たちは皆、事実と一般化されたパターンの両方を処理する方法を知っていますが、多くの場合、私たちは一つのことをする傾向があります。 同様に、特定のタイプの思考がより適切なソリューションのタスクがあります。 私自身の経験から言えば、プログラマーは自然な傾向を理解すると強くなりますが、必要に応じて適応することを学びます。



特定の種類の思考が優先されるタスクの例を次に示します(すべて一般化されています)







どのスタイルの考え方が優れているかを示すという目標を自分自身に設定しませんでした。 代わりに、私は思考とコミュニケーションにおける自己認識とトレーニングの柔軟性のアイデアを提唱します。



絶対抽象主義者である私は、抽象的な思考の素晴らしい例で終わりたい



すべての一般化は偽です。 これを含む。 マーク・トウェイン


そして、マーク・トウェインは抽象志向の作家でした...



All Articles