チェリー本はじめに最近ネットを見ているときに知ったのですが、世間には「パターンマッチとコピペ」と呼ばれるプログラミングスタイルがあるそうです。動けばOK、動かなければ他のコードを探してコピペするという手順を繰り返してプログラムを完成させるプログラミングスタイルなんだそうです。「パターンマッチとコピペ」というプログラミングスタイルが語られたのは、僕が知る限りこちらのツイートが最初です(もしかすると、もっと昔からあるのかな??)。プログラムを頭を使って書くのではなく、パターンマッチとコピペで書く人がかなり多そうだという命題については、いくつか証拠を持っていますが、有名な例としては、FizzBuzzを書けないプログラマが現にけっこういた、というので十分ではないでしょうか。今なら書けると思いますよ。2017このスタイルを良しとするかどうかは人によって意見が分かれるようですが、僕自身はあまり良くない考え方だと思っています。余談:本来のプログラミング用語としての「パターンマッチ」とはご存じの方も多いと思いますが、「パターンマッチ」とは関数型言語でよく使われる言語機能のことです。以下はパターンマッチを使ったF#のコード例です。Docs注意していただきたいのは、関数型プログラミングにおける「パターンマッチ」はただの言語機能(またはプログラミングテクニック)であり、それ自体にまったくネガティブな意味はない、ということです。関数型プログラミングを学んでいるときに「パターンマッチ」という言葉に出会っても、「これって使わない方がいいのかな?」とか思ったりしないようにしてください。塾講師時代の生徒にも「パターンマッチ」で解こうとする子がいたところで話は変わりますが、僕は大学時代、塾講師のバイトをやっていました。成績のいいクラスも成績の悪いクラスも、どちらも受け持っていましたが、今考えると「あー、あれは一種のパターンマッチだったのかもしれない」と思うことがあります。成績の悪い子のクラスを受け持っていたときによく見られたのが、こんな光景です。Aくん、ここの式はどうなるかわかる?↓う〜ん、y=3?(と言って、僕の顔を見る)↓(僕が首をかしげたのを見て)いや、違う違う、y=5分の3?(また僕の顔を見る)↓(相変わらずダメそうなのを見て)あー、そうそう、y=8!!なあ、そうやんな!?(と言いながら、また僕の顔を見る)↓(以下これの繰り返し・・・)このとき、Aくんは問題文に載っている数字を適当に組み合わせ、僕が「うん、そうだね」と言うまで、それらを足したり引いたり掛けたり割ったりし続けます。本質的なことは何も分かっていないので、そう簡単には正解にたどりつけません。仮にパターンマッチに成功して正解が得られたとしても、それはただの偶然なので、本番のテストではまったく点が取れません。成績のいいクラスではこういう光景はほとんど見られませんでした。同じような質問をしても、成績のいいクラスの子はすぐには答えず、じ〜っと問題文を見つめて頭の中で何かを考えます。経ってから静かに自分の答えを口に出します(で、だいたい正解します)。三つ子の魂百まで?(パターンマッチ魂も百まで?)プログラミングを学んでいる人の中にも、このように「じっくりとロジックを追いかけて正しいコードを見つける人」と、「とりあえずググる!コピペする!ググる!コピペ!ググる!コピペ!を延々と繰り返す人」に大きく分かれるのではないでしょうか。後者の人はもしかすると、小さい頃からパターンマッチで勉強の答えを見つけようとしてきた人なのかもしれません。学校の勉強や入試とは違い、コードを書くときは「ググる」というオプションは禁じ手ではありません。正直に白状すれば、僕自身もたまに「パターンマッチ&コピペ」で動くコードを探してくることがあります。「パターンマッチ&コピペ」が100%ダメだとは言いません。いえ、ググって答えが見つからなければそこで詰んでしまいますし、たとえ答えが見つかっても自分が書いたコードを自分が理解できていないので、それ以上自分のコードをどうすることもできません。考えるとやはり、「パターンマッチ&コピペ」プログラミングは害悪の方が大きいと言えるでしょう。あなたが「パターンマッチ&コピペ」ばかりを繰り返してコードを書いているプログラマなのであれば、一度立ち止まって、じっくりと順序立ててロジックを追いかける練習をしてみてください。2018.11.29追記:「パターンマッチ&コピペ」で帰納的に学習する?「パターンマッチ&コピペ」は害悪が大きいと書きましたが、次のような場合は例外かもしれません。それは「パターンマッチ&コピペ」でプログラムを目的通りに動かしたあと、自分が書いた(というかコピペした)コードをふりかえって、コードの意味や構文を理解しようとした場合です。これは「パターンマッチ&コピペ」を利用して帰納的に学習するスタイルです。この方法であれば「パターンマッチ&コピペ」でプログラムを書いたとしても、結果的にはきちんとプログラミングスキルを向上させたことになるはずです。このやり方はイージーではなく、むしろ高度な学習方法だと思います。「パターンマッチ&コピペ」を多用するプログラマで毎回この手順を踏んでいる人は、おそらくごく少数ではないかと推測します。まとめ(と宣伝)・・・などと、なんか偉そうにつらつら書いてしまいましたが、もともと言いたかったことはなんてことはありません。「あー、最近よく目立つコピペプログラマと塾講師時代に見てきたあの子たちは、きっと同じ部類なんじゃないかなー」とふと思ったので、それが言いたかっただけです(笑)。ちなみに、僕が執筆した「プロを目指す人のためのRuby入門」は読者のみなさんが「パターンマッチ&コピペ」プログラマにならないよう、しっかり順序立てて体系的にRubyプログラミングを説明しています。本書を読めば「今まで呪文のようにしか見えなかった不思議なRubyの構文」や「実はあまりよくわからないまま、見よう見まねで書いているRubyコード」も自信をもって読み書きできるようになるはずです。はてなブログPro株式会社ソニックガーデンで働くRubyプログラマ。2017年11月に「プロを目指す人のためのRuby入門」を出版。blog)はてなブログをはじめよう!JunichiItoさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。