直感的なプログラミング

比較的短い作業経験(約6年)の間に、経験豊富な初心者プログラマーのフレーズをよく耳にしました。直感的なインターフェイス」など。 これはすべて、開発およびプログラミングプロセスにおける直感の現れです。

彼女について、さらに会話を続ける。





oprah.comから取得



そもそも、「直観」という概念そのものを定義したいと思います。



直観(後期緯度Intuitio-「熟考」、動詞intueorから-私はよく見る)は、 想像力、共感、以前の経験、「直観」、洞察に基づく 1回限りの潜在意識の結論によって問題を解決する方法です。



ウィキペディア


直観(緯度Intueriから-注意深く、注意深く見る)は思考プロセスであり、論理接続の認識が不十分な問題の解決策をほぼ瞬時に見つけることで構成されます。


直観(緯度Intueriから-注意深く、注意深く見るために)-受信の方法と条件を意識せずに発生する知識。これにより、被験者は「直接裁量」の結果としてそれを取得します。


これらの定義の基礎は、直観が意思決定の方法であるということです。 この方法にはいくつかの理由があります。これは以前の経験、想像力、不合理な「フレア」などです。



そして、これらの各方法はプログラミングプロセスに反映されており、プラスとマイナスの両方の効果があります。



したがって、まず、「直感的な」プログラミングを2つのコンポーネントに分割します。-楽観的および悲観的



楽観的で直感的なプログラミング



その本質は、コード作成プロセスに対する直感の楽観的または肯定的な影響にあります。 この場合、直観はアシスタント、「仲良し」、開発者の手にあるツールです。



経験ベースの直観



ここでの主なアイデアは、開発経験を蓄積するプロセスで、特定のステレオタイプ、コードに関連付けられた関連付けを開発し、思考プロセスに深く入らずに決定できるということです。



作業プロセスでのこのような直感の使用例の多くは、AcronisのDmitry ChepelによるHabréの記事で説明されています 。 まだ読んでいない場合は、必ず読んでください。



別の実験例を提供したいと思います。 以下にSidefコードの例を示します(多くの人に知らないことを望みます)。 彼が何について話しているのかを推測するために、実際に詳細を掘り下げないでください。



loop { var swapped = false { |i| if (arr[i-1] > arr[i]) { arr[i-1, i] = arr[i, i-1] swapped = true } } * arr.end swapped || break } return arr
      
      





答え
これは古典的なバブルソートです



おそらく、コードのなじみのある部分を見て、何が起こっているのかを推測した人もいれば、そうでない人もいます。 慣れ親しんだプログラマーの小さなグループでこの実験を行った結果、半分以上(約65%)の人々が非常に短い時間で議論されていたことを理解できました。



私は彼らにどのように推測できるか尋ねました-そして最も人気のある答えは次のとおりでした:

「使い慣れたコードを見て、すぐにそれが何であるかを提案しました。」



したがって、経験を積むことで、脳は追加の精神的な努力なしで、私たちが作業するコードに関する決定を非常に迅速に行うことができます。



このため、経験豊富なプログラマーはプロジェクトやプログラミング言語に関して特定の「フレア」を持っているように思われます。



論理ベースの直観



次の行を続けてみてください。



1、3、5、7、9、11、...


確かに、次に何の数字が来るのか一瞬考えていませんでした。

これは、文字通り考え続けないパターンの簡単な例です。



しかし、次のPythonコードを例にとるとどうなりますか:



 def sum(a, b): ... def mult(a, b): ... def subtract(a, b): ... def divide(a, b): ... def calculate(a, b, strategy): ... calculate(4, 2, sum) #6 calculate(4, 2, mult) #8 calculate(4, 2, subtract) #2 calculate(4, 2, divide) #??
      
      





ソースコードを見なくても、リストの最後の関数の結果が「直感的に」感じられます。



これは、関数の名前を分析し、得られた結果と比較し、分析されたコードに関するいくつかの法則と仮定を構築するという事実によるものです。 したがって、このようなコードを読み取るために、ロジックにバックアップされた直感を結び付けます。



ここで、私たちの仮定、直観に一致するコードは、通常、「読み取り可能な」、「理解可能な」コードと呼ばれます。 これは、脳のリソースだけでなく直感も使用するため、コードの読み取りと理解が簡単になるためです。



直感的なインターフェース



そして今、私は「直感的なインターフェース」のような頻繁に使用される表現に移りたいと思います。 これは、ソフトウェアとユーザーインターフェイスの両方に適用されます。

上記の点を考えると、直感的なインターフェースは、プログラマーであろうとエンドユーザーであろうと、ユーザーの期待に応えるインターフェースであると言えます。



これらの期待は、2つのコンポーネントに基づいて形成されます-私たちの以前の経験と論理的なパターンと仮定。



メニューがウェブサイトのすべてのページの一番上にあるが、左側のメニューがフィードバックページにある場合、「彼の直感」はメニューが一番上にあることを彼に告げるので、エンドユーザーは多少混乱するかもしれません。



しかし、なぜ、元のデザインや新しいモバイルアプリケーションを使用していくつかのWebサイトにアクセスしたときに、このサイトがかっこいいまたはひどいように感じるのはなぜですか?



無理としての直観



このような判断の根拠は、多くの場合、直感は何かの感覚として生まれ、結論、論理、または経験に裏付けられないことです。



このタイプの直感は開発において最も危険ですが、同時に複雑な問題を迅速に解決する方法でもあります。



これはまさにプログラミングの「マジック」と呼ばれるものです。1つの変数またはフラグの値を変更すると、コードは奇跡的に動作を開始しますが、この決定は絶対に直感的です。 そして、この種の直観こそがその真の現れです。



悲観的で直感的なプログラミング



しかし、デザインでは直感も否定的なものになります。



前述のように、「不合理な」直感は命の恩人であり、プログラマーにとって危険なツールでもあります。



このような本能的な決定に基づいて、「魔法」が発生し始めたコードに自信を失います。



重要なのは、そのような決定は、後続の決定を行う際にある程度の懸念を形成することです。 開発における感情、感覚、不合理の優位性は、ロジックの助けを借りてすべてを実証することを不可能にし、その結果、コードの理解を複雑にし、読みやすさを失います。



結論として



一般に、ソフトウェア開発における直観の問題は初めて提起されたものではありません。

これは、ロジックや思考に関係のないプロセスがコードを書くプロセスに与える影響の問題が関連し続けるという事実によるものです。なぜなら、このプロセスは感情、偏見、「不合理」を持つ人によって占められているからです。



PSソフトウェア開発の直観のトピックに興味がある人のために、私はあなたにピーター・ナウアーレポート「ソフトウェア開発の直観」を読むことを勧めます



よろしくお願いします!



All Articles