読者です 読者をやめる 読者になる 読者になる

本当は怖い情報科学

情報系大学院生の趣味&実益ブログ。

Re:Re:『学生プログラマの「実力差」は、「麻雀」と「囲碁」の差』

人気エントリーに載ったりして思わぬ反響があった、このエントリー (以下、「元記事」)だが、ブクマコメントでもいろいろな反応をいただいて、持ち前のスルー力を活用して拝見させていただいていた。

たが、ZAPAブロ〜グ2.0『頭脳戦であるプログラミングは「麻雀」と同じである』で反応をいただいて、これは返答せねばと思った次第。というのは、このZAPAさんのエントリーを読んだ人は、僕の元エントリーの趣旨を大きく誤解するであろうからだ。

反応をいただいて反省した部分も踏まえて、元記事の趣旨をまとめてみる。

元記事の趣旨であったこと

  • 学生プログラマーの実力(技術力・専門知識・常識)のばらつきは、均質に分散したものではなく、上と下にそれぞれ偏っていて、大きな2つの文化圏に分類されるように思える。
  • その原因(あるいは隔たりの実体)は何かと考えた。
  • それは、プログラミングに対する学生の意識が、「囲碁に対する意識」か、「麻雀に対する意識」かの違いである。
  • プログラマとしての成長は、「個人差・能力差が大きい」というプログラミングの性質を理解し、積極的・能動的に勉強してコードをたくさん書くことで磨かれる。
  • 元記事の趣旨をもっとも象徴しているのは、『「まぁ役とか覚えてコツをつかめばそれなりに強くなるけど、そんなもんでしょ」』という比喩の部分である。

元記事の趣旨で無いこと

  • 囲碁
  • 麻雀論
  • プログラミングとはどういうものか
  • プログラミングと囲碁は同じである
  • 麻雀は運のゲームである
  • 麻雀は囲碁よりしょぼい

補足(1)

ブクマコメントでも(予想通りの)コメントをいただいたが、「麻雀の本質」とか、「囲碁の本質」とかは重要ではない。keisukefukudaは囲碁をわかってない、とか、麻雀をわかってない、とかいう批判も意味が無い。すべて元記事の趣旨には関係が無い。「学生が麻雀や囲碁に対して持っているイメージ・意識・姿勢」が比喩の対象だ。

だから、麻雀を本格的にやっている人が元記事を「麻雀の記事」として読めば、確実に話がおかしくなる。囲碁にしても同様。それと同時に、「学生プログラマのレベル差」を実感したことがない人が元記事を読んでも、たぶんピンと来ないと思う。

あと、個人的には「ランダム性」と「運」は違うと思うが、この点については僕の書き方が非常にまずかった。

補足(2)

さて、以上を踏まえてZAPAブロ〜グ2.0『頭脳戦であるプログラミングは「麻雀」と同じである』にレスさせていただこう。

それらは経験や勘によって培われる場合もあるし、その人特有の「センス」である場合もある。
いくら情報を集めて、頭でっかちに「強く」なったとしても、「センス」のある人間には勝てない。「勢い」に勝てない。「流れ」に勝てない。「天才」に勝てない。

調子の良い日は1000行書けることがあっても、次の日調子が悪くなって10行しか書けないこともある。場合によっては、ミスに気づいて-100行のこともある。

書かれていることはその通り。ただし、囲碁でも天才には勝てないし、囲碁でもセンスは大いに重要であるし、コンディションも関係する。何を批判しているのか正直わからない。別に僕はプログラミングがまじめに勉強したもの勝ちの秀才の業だとは一言も言ってない。言っている事は理解できるし大いに賛同するが、元記事に対する反論としてはピントがずれている。上にも書いたように、プログラミングがどういう活動か、については元記事では一言も言ってない。元記事の主題は「学生の意識」だから。

ただ一応書いておくと、いくらセンスがあっても、情報が無くては勝負にならないと思う。「3日でわかるPerl」みたいな本しか知らなくて、それがプログラミングだと思ってる人は井中の蛙であって、いくら潜在的なセンスがあっても開花することはないだろう。

「時間と頭脳があれば原理的に何でもできる」かもしれないが、かかる時間も、できあがったプログラムの質も全然違う。

その通り。だから、僕も元記事で「プログラミング能力は個人差が激しい。」と書いているけど。

プログラミングは、理詰めで完璧にこなせるほどの、言わば定石のような、囲碁みたいな究極の一手は研究され尽くしていない。

囲碁にもそんなものはない。「究極の一手」なんてものが発見されたら、囲碁の歴史は終了でしょう。定石は部分解であって、それを覚えれば勝てるというものではない*1

プログラミングは、理詰めで完璧にこなせるほどの、言わば定石のような、囲碁みたいな究極の一手は研究され尽くしていない。
その場その場で流れが変わる「麻雀」に近い。
もちろん定石が生まれているパターンもあるし、誰もが定石に頼りたいと思っている。
でも実際はそんな簡単な局面ばかりではない。常に流れている。
仕様変更の流れも日常茶飯事なら、その日の調子も大きくプログラミングに影響する。

ZAPAさんの中では、囲碁は「定石に頼る」ゲームなのでしょうか。

少しでも被害を食い止めるため、コーディング規約に則ったり、開発手法を限定したりする。
複数で開発するには、個人の最適な生産性は無視される。
手戻りが発生しないように、理論上のドキュメントを増産する。
だがそれは、プログラマ本来が持っている、最速のプログラミングスピードとはほど遠いものになってしまっている。
運に左右される「麻雀」のようにしたくない人間の、一種の逃げだ。
運で負けてしまったらどうしようもないから、少しでもリスクを減らすために、最速の開発スピードは犠牲にする。

だからプログラミングは「麻雀」ではないという。
自分の書いたコードによって全てが決まる「囲碁」と同じなのだ、と。


でも、それは違う。

本来、プログラミングは「麻雀」と同じなのだ。
麻雀と同じように、流れやツキや勢いや調子やセンスやヒラメキで、大きく生産性の変わる頭脳戦なのだ。

繰り返すけど、元記事では「学生の意識」と「プログラマとしての成長」が主題なのであって、プログラミングそのものの話はしていない。
ただ、それを差し引いても、この部分で何をおっしゃりたいのかよくわからない。まず、「実際のコーディングの中身」と、「プログラマとしての成長」は、違う話である。元記事は、「プログラマとしての成長」が主題である。

コーディングそのものの話をすれば、「運に左右される「麻雀」のようにしたくない人間の、一種の逃げ」も、プログラミングを実力のうちだと思う。ZAPAさんの周りでは、「手戻りが発生しないようにする」イコール「理論上のドキュメントの増産」なのかも知れないが、世の中は違う。

早くからテストファーストとかユニットテストを取り入れていった優秀なプログラマの人は多いけど、その人たちも「逃げ」なんのだろうか?個人的には、徹底したTDDを実践していたPlaggerの開発が印象的だったけど、それも「逃げ」?本当に優秀なプログラマは、ひらめき一発のトリッキーなコードを書いたりはしない(たぶん)。

そして、プログラマの成長という意味では、これは確かに運が関係する。プログラマの成長とはすなわち、人生だから。職場にたまたまスーパーハッカーがいることもあるだろう。居ないこともあるだろう。残念ながら僕の周りにはそういう人は居ないので、勉強会とかカンファレンスに積極的に出かけるようにしている。1000speakersもその一例だ。僕の小さな「一手」である。

*1:ちなみに、僕は麻雀はやらないが囲碁は少し打つ(最近サボり気味だけど)。級段位とかは持ってないのでよくわからないけど、囲碁ゲームのAIの「弱い・普通・強い・最強」の「強い」には普通に勝てる。ソフトのパッケージ曰く、「最強=アマチュア二段」だそうである。とりあえず事実のみを書いておくが、自分でも強いのか弱いのかよくわからない。まぁ段位保持者とか本格的にやっている人からすれば弱いだろう。

【広告】