プログラマ(SE含)のやるべきこととは?

ある人と話してて、言われた言葉にちょっと引っ掛かりのようなものがあったので考えてみた。

プログラマの仕事ってなんだろう?

コーディング?
顧客との打ち合わせ?
新しい技術を追いかけて勉強すること?

うんにゃ違う。

プログラマの仕事とは、

とことんまでにサボり倒すことだと思う

ってことだけ書くと誤解を生むので以下、補足。

サボり倒すっていっても、本当にサボってはいけない。
でも、サボる。サボり倒す。
そのためにすることは・・・

サボるために最大限の努力をする

ってこと。

例えば、お客さんから「見積もりソフト」を作って欲しいと言われた。
そして作って納品した。
お客さんは大喜び。

だって今まで、Excelを使ってせっせせっせと枠組みを作って計算式を入れて、ファイルはここのフォルダにこういうファイル名で名前をつけて保存して・・・なんて時間をかけてやってたことが、短時間でできるようになる。
数字だけいれて、金額などに間違いがないことを確認して、印刷すれば終っちゃうんだから。

プログラマは、お客さんが見積書作成するって手間を必要最低限のことだけにしてしまった。
お客さんが見積書を作成することをサボらせることができた。

でも、普通の社員プログラマはたぶんここまで。
お客さんをサボらせているだけ。
それはそれで大事なこと。ご飯食べなくちゃいけないからね。
(自分でブログなりサイトなりを運営している人は、”普通の社員プログラマ”とは言わない)

でも、もったいないと思うの。
そのパワーを自分自身がサボるためにも使わなきゃ。

ちょっと話が脱線するけど、学生の頃のテストの時間を思い出して欲しい。
どの教科でもいいんだけど、50分のテスト時間の中で、30分くらいで解いてしまってうつ伏せになって寝ている人、時間ぎりぎりまでがんばってやっと全問埋めれた人。
こういう人たちって自分がそうじゃなくても、周囲にはいなかったかな?
そして、テストが帰ってきたとき、どちらの人のほうが点数が高かっただろうか?
おそらく、30分で解いて寝ていた人のほうが点数が高いかと思う。

プログラマという仕事は、まさにこれ。
Aさんがコーディングすれば1ヶ月かかる。Bさんがコーディングすれば2週間かかる。
AさんもBさんも、完成した時の画面も機能もまったく同じとする。
で、納品する。
バグの発生率が高いのは、Aさんでしょうか?Bさんでしょうか?
たぶん、Bさんのほうがバグが少なくなるか、どちらも同じくらいの割合でしょう。

Bさんのほうが早く終らせたのに、バグの発生率は同じかAさんよりも少ない?

はい。それには理由があります。

大阪から東京に移動するためには、バス、飛行機、新幹線など、様々な方法が用意されています。
もちろん迂回路もあります。

プログラムも同じで、ある目的を達成するための方法は、迂回路も含め様々な方法が用意されています。
プログラマは、目的にあった方法を選んでコーディングしていきます。

Aさんは、「バス」で行くことしか知らなかったのです。Bさんは、「バス」の他に、「飛行機」や「新幹線」で移動できることも知っていたから、「飛行機」を使ってプログラムを書いたのです。

プログラムというのはコードが長ければ長いほど、バグの混入率は増加し、実行速度が遅くなります。短いコードほど、バグは発生しづらくなり、実行速度が速くなります。

Bさんの書いたコードは、短く簡潔だったのです。
書くコード量が少ないから早く完成する。
書くコード量が少ないからバグの入る余地が少なくなる。
書くコード量が少ないから早く動作する。

そして、早く完成させることができるBさんはスケジュールに余裕が持てる。
スケジュールに余裕ができると、見直す時間も増え、バグも少なくなる。
スケジュールに余裕ができるということは、Bさんがサボる時間も獲得できる。

・・・これって、Aさん / Bさんじゃなくって、A社 / B社に置き換えても同じだよね。

Aさんは、これまでの業務経験上の知識しか持ち合わせていないため、「バス」という方法しか知らなかったのです。
一方、Bさんがナゼ、「飛行機」や「新幹線」のことを知っていたかというと、ごく当たり前なんですけど・・・勉強してたんですよね。

日頃からサボるための努力を怠らなかった

ということです。

さて、これでBさんは、サボる時間が持てたのか?というと、そうでもないかもしれません。
サボっていたら、同僚に仕事を手伝って欲しいって言われちゃうかもしれません。

で、頼まれたことは、ごく簡単なデータ作成の仕事です。
簡単とは言っても、膨大な量があり、とても時間がかかりそうです。

そこでBさんは、同僚に質問をします。
「これ、本当に全部作成するの?
いや、そもそも私がしなければ、あなたがするつもりだったの?」
と。
元々は同僚の仕事なので同僚は「うん」と言います。

Bさんは、こんなデータ作成なんて面倒くさくてやりたくありません。
量が多いだけで、作業としては眠たくなるようなことだからです。

そこでBさんは、考えます。
「なんで人間がせなあかんねん。コンピュータにやらせりゃええやん」
って。

Bさんは、1時間掛けて必死で、自動データ入力ソフトを作成しました。
そして、実行!!
10分後、PCからデータ出力完了を知らせるアラームが鳴ります。
それを持って、同僚のところへ向かいます。
おっと、その前にコーヒーでも飲んで休憩を入れましょうか。
そろそろかな。と時計を見つついざ同僚のもとへ。

同僚 「えっもう終ったの?早すぎ!!」
データ作成に半日は掛かると予想していた同僚は驚きです。

一方、Bさんにとっては「当たり前」のことをしたまでです。
Bさんはまたサボる時間を手に入れました。

ここでBさんがしたことは、せっせとデータを作成するのではなく、データを作成してくれる自分の分身を作ったことです。もし、今後、同じようなデータ作成が必要になったら、Bさんは何もせずに作成したソフトを実行するだけです。

Bさんはここでもまた、サボるために最大限の努力を行いました。

さて、以上を読んでいかがでしたでしょうか?
プログラマの本当の仕事はサボること。

。。と、書いている途中で、昔に読んだ記事を思い出したので、リンクしておきます。
まつもとゆきひろのハッカーズライフ:第1回 ハッカーとの遭遇 (2/2)