知識とパタン・ランゲージ
新人の日報的なサムシングを読んでいると、よく「技術を身につけるためにもっと勉強しなきゃ!」 って書いてあって、意気込みはいいんだけど、仕事を遂行するために必要な素養って知識よりもパターン認知能力のほうが重要だと思うんですよね。(絶対的な知識量も大切だけど)
例えば、自分は普段Rubyを書いているけどcase文やelsif(これ毎回「なんでelse ifかelseifとちゃうねん!」って思いません?)の書き方とか、各種文字列操作の処理を実装する時、 いちいちURL欄に「ruby 文字列 連結」みたいに入れて検索している。
もしくは、自分のローカルPCにある過去のプロジェクトで同じような処理を実装したコードをみて、 それをコピペしてアレンジして実装している。
そういう意味では自分は圧倒的な「コピペプログラマ」だ。
今までのプログラマ生活でかなりいろんな言語をいじってきたけど、完璧に文法を覚えている言語は何一つない。 しかし、仕事における実装作業は割りとできているという自負はある。
じゃあ、実装において必要な能力というのはなんなんだろうか?
それは知識ではなく、パターン認知能力なんじゃないかと思う。
IF文の正確な文法を覚えるんじゃなくて(それぐらい覚えろよ、って話もありますが)、 「分岐の処理を書きたいなー、当然プログラミング言語なんだから分岐用の構文があるはずだ」 となって「じゃあ『PHP 分岐』でググるか―」と調べることまでできたら、別にその言語のことを知らなくても、 自分の書きたい言語で分岐処理を書くことができる。
「特定言語の分岐処理の文法を覚えている」より「分岐というパターンの認知」の方が応用力があって強力だ。
IF文はあまりにも基本的な概念だけど、ActiveRecordの扱い(ORM)やデザインパターンも概念が複雑になっただけで メソッド一覧やGoF本を丸暗記するよりも、それを扱うことで身につくパターン認知のほうが遥かに役に立つはずだ。
最後に、パターン認知力の鍛え方だけど、何かを覚えようとする作業より実践の反復の中で身につくものだと思う。 俗に言う「勉強をするんじゃなくて実践しろ」ってやつ。
知識量を増やすんじゃなくて、パタン・ランゲージの認知量を増やす努力をするほうが成長が見込める気がします。 いや、知識を吸収する過程でパターン認知が身につくのかもしれないけど。
Tag: プログラミング