努力と根性….だけじゃダメなんだよなぁ

ここ数日データベースの設計のまねごとをしている。

平易に説明すれば、1億以上のレコード(データ)を、毎月1回総入れ替えに加えて、運用時にはそから特定の条件に合致したものの件数をできるだけ瞬時に数える。

というような事をしたいのだが、まっすぐ考えてしまうと、そんなの無理!って気になってくる。

DBへのレコード追加は、SQLの INSERT 文 を使うのが通常だが、そんなもの使っていたら、100万件くらいでも1時間とかかかってしまう。 検索に至っては、1億のデータを総なめして数えていたのでは、瞬時どころか、夜が明けても終わらないかもしれない。

ところが、この一見不可能と思える要求に答える方法は、しっかり用意されているのだ。 バルクロードとインデックス。

DBに詳しい人には当然のことなのだが、詳しく無い人はそれを知らずに、努力と根性で解決しようと試みるかもしれない。

HDDは遅いから、DBのデータを巨大なメモリに入れてみたり、プログラムをあーだこーだ改良してみたり、テーブルを分割してみたり、検索条件を絞りこんで、予め結果を用意しておいたりと、様々な血と汗と涙が考えられるが、そのどれもが正解にたどり着かないか、正解への道のりを遠くするものだ。

正解とは、最もスマートで理にかなっていて、少ない努力で対処できる方法だと思うが、その方法を取った結果として、必ずしも他の方法より優れた結果(高速に処理するといった)方法では無いかもしれない。

目的を達成するのに十分な方法でかつ、応用がきき、合理的であることが理想だ。つまりバランスが大切。

 

DBとは離れて、通常のプログラムでも、同じ事が言える。

例えば、プログラムにバグが見つかったとして、新米プログラマと、ある程度慣れたプログラマでは、全くアプローチが異なる。

新米プログラマにバグを直せと言うと、その問題の解決だけに突き進む事が多い。 しかも、コードのあちこちを良く考えもせずに修正してみては、問題が起きなくなるかどうかを試してみるといった、場当たり的な対処になってしまうことが多い。

一方慣れたプログラマは、いきなり問題に対応したりしない。その問題とされる現象が、本質的にはどういう問題なのかを推測し、その原因の調査に注力する。調査で原因さえわかれば、どのように対処すればその周辺のコードが合理的なものになり、そのようなバグが発生しなくなるのか、といった事まで考えてから、ようやく、プログラムの修正を行う事になる。

結果、同じ時間かかってそのバグを修正したとしても、新米プログラマが修正した結果は、確かにその問題は出なくなったが、別の問題が発生した、あるいは、今後のメンテナンスで、別の問題が発生する要因を作り込んでしまった、一定の条件ではその問題が出ないが、別の条件では問題が再現する。といった対処になり、慣れたプログラマは、その問題の解決にとどまらず、それに関係する部分のコードがより合理的になり、問題の解決だけでなく、速度の向上や、今後のメンテナンス性の向上といったおまけまでついてくる事になる。

 

これはほんの一例であって、最近みかこさんから聞いた話では、ピアノの練習方法も、同じ様なところがあるらしい。

少し難しい曲を練習する場合、なまじ根性のある人ほど、合理的な練習ができず、努力と根性型の練習になってしまい、良い結果に結びつかないようだ。

もちろん、スポーツもそうだが、ピアノを弾くといった技術を習得する場合、毎日の指のトレーニングといった基本的な努力は必要不可欠だが、闇雲な努力では、なかなか「正解」にたどり着けないと思う。

闇雲な努力の典型的な例が、「演奏でつっかえたところの前の小節あたりから弾き直す。」という形で現れたりするらしいが、これは、「何度か(何度も)やっていれば、いずれ弾ける。弾けないのは努力が足りないのだ」という気持ちの現れではないかと想像する。

本当は、「どこでつっかえたのか」を知り、「何故つっかえたのか」を推測し、「どうすればつっかえずに弾けるか」を考えるのが大切なのだそうだ。 私の様な初心者の場合は、たいてい指使いが間違っていたとか、右手が弾いている間、左手が止まっていたとか、そんなたわいのない事が原因で、それさえ気づけば、いままで「無理!」と思っていたフレーズが、一気に「楽々」に変わってしまったりするのだが、努力と根性では、多少は良くなっても、「楽々」にまではたどり着けない。

1小節とか2小節とかでそうなるので、曲全体では、そういうところが何カ所もある。 でも沢山あるけど、原因は同じだったりすることが多いのだが、それを、その小節ごとに努力と根性で乗り越えようとしてると、「あ~この曲弾けるようになるには何年かかるのだろう…」と憂鬱になってくる。しかも、「正解」にたどり着けないので、いつまでたっても、気持ちよく演奏できない。なんて事を繰り返してしまうと、ピアノそのものが楽しくなくなってくるかもしれない。

 

そんなわけで、「努力と根性」。何かを成し遂げるのに、それが必要なのは確かだが、それを使う前に、十分な分析と検討が必要なのではないだろうか。

 

なんてことを、ノルディックウォーキングしながら考えてたりするんだよなぁ。 もちろん自己反省も含めてね。

カテゴリー: ZAKKI, ウォーキング パーマリンク