理解すること

 だいぶ更新が滞ってしまいました。私は良くも悪くも結構気分の変化が激しい性格でして、その気になるとあきれるほどの文章を書いたりするのですが、その気にならないと全く書けません。プログラムも同じで、その気になるかどうかがポイントなのですが、どういうきっかけでその気になるのかは自分でもまだ完全に把握できてません。

 まあ、そんなことはどうでも良いのですが、このところ新卒採用活動で、学生の方々とお話をする機会が多くあり、最近は著書の効果も少しはあってか、もともと私の勤務先の仕事内容を大体把握した上で応募して下さる方も増えて、プログラミングが好きで、その分野で活躍したい、という明確な目標を持ってきてくれる方が増えてきて、とてもうれしいと同時に責任を感じています。基本的にはプログラミングが「好き」な人なら必ず成功できる会社だと思っていますが、会社間の関係や人間関係など、実力だけではない部分も仕事では多いものです。そういう部分を先輩や会社の責任者たちがしっかり維持していかねばせっかくの若い力が活かされません。もちろんそういう部分まで含めて我こそ!とがんばってくれても良いのですが。

 このところ週に2〜3冊の勢いで本を読みまくりました。上の子が小学5年生になり、かなりの文章を読めるようになったことから、主に日本の昔の文学書を買い与えているのですが、私もせっかくなので毎回読んでいます。そのほかに、自分で気になった本を片っ端から読んでいまして、IT関連の本も少しは読んでいるのですが、本を読むたびになんとなく自分が少しだけ大人になった気分がするものですよね(私だけでしょうか?)。

 我が家では子供たちにゲーム機は禁止にしています。もちろん親もやりません。ゲームが100%悪いとは思わないのですが、子供の精神力ではゲームをやりたい気持ちを抑えることが難しいと思っています。世の中の多くの子供たちが電車の中でもレストランでも、友達の家でもゲーム機に集中し、呼ばれても気がつかないくらいの状態になっていると思います。子供の時期には多くのものを見たり聞いたり感じたりすることが大切です。それを全てゲーム機を通してバーチャルの経験だけで補えるはずはありません。テレビもついつい見すぎてしまうのでどちらかというと子供には不要と思いますが、ゲーム機はそれ以上に悪い影響が強いと思います。その代わりにたくさんの本を与え、一緒に本の話をし、ブロックや組み立てキットなど、考えながら自分の手や指を使って組み立てたりする遊びを一緒に楽しんだり、散歩しながらいろいろな話をしたり、サッカーやキャッチボールをしたり、ラジコンを一緒に走らせたり、会社のレクレーションや知人との集まりに参加させたり、そういう機会をできるだけ作るようにしています。

 今朝、たまたまテレビの特集でインドの教育の話題が放送されていました。インドといえば2桁同士の掛け算を暗記しているとか、暗記をするのに歌で覚えるなど、賢い民族として名が通っていますが、教育も結果だけではなく、過程をとても大切にする教育をしているそうです。また人前で話をする経験をさせるなど、日本では社会人になってようやくやるような指導も受けているようです。海外の良い面を何でも取り入れれば良いというものではなく、日本には日本の文化がありますが、それにしても最近のゆとり教育の弊害はさまざまな問題を引き起こしている気がします。子供に大切なのは、まずはとにかくしっかりした国語教育、日本の歴史を学び、そしてとにかくたくさん本を読むこと、人の話を聞くこと、そして考える力を養うことではないでしょうか。そのテレビで紹介していたことで一つ私自身勉強になったことが、インドの子供たちは、2桁の数字の二乗で、1桁目が5の場合、簡単に計算する方法を知っている、ということです。たとえば、65×65の場合、6×(6+1)×100+5×5=4225、つまり、答えの下二桁は25で、上二桁は、十の位の値×(十の位の値+1)、で計算できる、ということです。筆算で2桁同士の掛け算は少なくとも掛け算九九を4回、さらに足し算、繰り上がりの計算が必要です。どう考えてもインドのやり方の方が簡単確実です。小学5年生の子供もこれは簡単!とびっくりしていたので、私は早速方程式で証明して、それを小学5年生の子供に理解させてみました。まだ方程式は学校でやっていませんが、答えが出るだけではなく、なぜその式が他の数字でも使えるのかを理解しておくのが大切ということで。

「理解すること」

 さて、またまたあまりにも前置きが長くなりましたが、今回の話題は、理解することの大切さ、です。どんな仕事でも、単に結果を出せるだけの人と、なぜそうなるのかを知っている人の仕事では質が違ってきます。プログラミングの仕事でもまさにその通りで、出来合いのライブラリを使えるだけの人、どこかからサンプルソースを見つけてきて流用して仕上げるだけの人と、なぜそうすればできるのかを理解している人では同じ結果となったとしても仕事の質は全く違います。いまどきのプログラムはさまざまなものと連携して動作します。たまたまあるケースでは動くというだけでは安心して使えないのです。中身を把握していれば、どういう環境だと問題になるか、性能はどうか、異常発生時にどうなるかなどの考慮ができるのです。したがってもともと安心して安定して使えるものができますし、何か問題が発生した場合にも迅速に原因を解明して対策が取れるのです。

 どういう心がけの人がそうなれるのでしょうか。理由や背景を把握するためには気力が必要ですし、時間もかかります。好きでもないことを追求するのは精神的につらいものですので、やっぱり自分が好きな分野で勝負している人になるべきでしょう。好きなことなら努力も時間を使うことも苦にならないものです。そしてそういう、好きな分野を持っている人たちとチームを作ることで守備範囲が広くなります。

 私自身も、ネットワーク関連のプログラミングは日ごろからテストプログラムをいろいろと作っていたり、ライブラリを地道に作り改良するようなことを続けていますので、他のメンバーの仕事でネットワーク関連の相談を良く受けます。プログラミング自体だけでなく、プロトコルはどういう仕様にするのが良いのか、ネットワーク構成はこれで問題ないのか、などさまざまな内容になりますが、これによりまた自分の研究テーマが出てくることも良くあります。さらに深く広くネットワークプログラミングを追求できることになります。その代わり、データベースやWEB関連、C#やVBなどの技術では私はすぐに他のメンバーに相談します。私の部署では各自が得意分野をはっきり宣言していて、お客さんに紹介する際にもはじめから「**が得意な**です」と、得意分野を伝えます。大抵は得意分野以外のこともできるのですが、やっぱり得意分野にこだわっていてくれると、本当の「理解」をしていてくれることになり、メンバーが自分の仕事で相談したりして安心できるのです。

 自分が本当に理解できているかどうかは、第三者に説明してみることで確認できます。自分の頭の中では理解できていると思っていても、説明してみると意外と躓くものなのです。社内で勉強会を開催して持ち回りで得意分野の講義をするのも良いでしょうし、自らホームページなどに解説を紹介してみるのも良いでしょう。私も毎回著書を書くたびに実は理解しているつもりになっていただけのポイントを再確認しています。

 実際の仕事では工数の制約があったり、期間が短かったりして、真の仕様の理解ができなかったり、技術的にもやっつけ仕事で仕上げざるを得ない場合もあります。それはどうしようもない場合もあるのですが、そのまま放置してしまうのは良くないと考えています。納品したら仕事は完了ではありません。契約上でも請負契約では1年の瑕疵責任があります。お客さんが実際に運用を開始してからいろいろと相談や質問が出てくることも多いものです。実は本当の理解は仕事が終わった後の心がけで得られる気がしています。仕事を仕上げ、その後により汎用的に応用できないかを検討したり、技術的に本当に最適な解決ができているのかを考慮したり、性能面や安全面でより良い解決策がないかを模索したりすることにより、本当の理解ができるのではないでしょうか。そういう努力をしている人であれば、瑕疵責任や相談対応なども心配どころか、頼まれもしないのに改善提案をしたりしてお客さんがより頼りに感じてくれるのではないでしょうか。

 「理解」は実は仕事でも人生でもとても大切なことだと思います。

2007.5.6

フレームページへ

from 2007/1/13