先日、togetterというまとめサイトにこんなトピックが上がっていた。
詳しくは上のまとめを読んでいただきたいのだが、ことの始まりは以下のツイートである。
プログラマの仕事
— 邪悪の帝王ヴァネロピ (@Vane11ope) May 27, 2018
「うーんなんだこのバグ」
→コード読む
→わからん
→わかってきた!
→やっぱりわからん
→またコード読む
一週間後にしてほんの数行のコードで解決することが判明
コードなんもわからん人
「ほーん一週間で数行しかコード書いてないの?wwちゃんと仕事しろww」
→そして戦争へ
個人的なこれに対する感想は、理解していない仕事をあおるなの一言であるが、これでは身もふたもないので、現役プログラマーの視点から、プログラマーの仕事をざっくり解説して行きたいと思う。
プログラマーの仕事は、「できていない状態にあるものを、できている状態にすること」
プログラマーの仕事は、この見出しの通りである。あるいは、その前後にある調査やテストも含まれる。
決して、コードを書くことではない。
コードを書くことは最終作業であって、コードを書いているときには9割仕事が終わっていると言っても過言ではない。
小説に例えるなら、最終的なコードを書くのは清書の段階である。
小説を書くことを想像してみてほしい。想像しにくいなら、作文でもいい。
はじめにあなたは、何をするだろうか?
いきなり清書するだろうか?
普通、しないはずである。
0からの場合、大抵の場合はその作品のテーマを考えたり、あるいはアイデアを出したりするだろう。
そして、方針が固まったらちょっと書いてみる。
うまくいきそうになければ初めから書く。
うまく書けそうならそれなりに書いてみて、時々見直しをする。
一通り書けたら、全体を読み直して、小説として構成がしっかり成り立っているか確認する。
そして最後に、校正・校閲(誤字脱字をなどがないか確認して、修正)して、清書。これでようやく完成である。
プログラムを書くときにも似たような過程をたどるのだ。
はじめに実装方針を考え、アイデアを出し、どうしたらうまくいくか試行錯誤をして、うまく言ったら全体を見直して、綺麗なコードにして終える。
その最終結果が数行のコードになることだってある。
これを考慮しても、「ちゃんと仕事しろww」なんて本当に言えるだろうか?
俳句や短歌にたとえると、もっとわかりやすいかもしれない。
「数行しか書いてないの?」と、俳句や短歌を書く人に言えるのか?
ということだ。
ただ、確かにプログラマーの仕事はわかりにくい
ただまあ、「ちゃんと仕事しろよ」と言いたい気持ちもまったくわからなくはない。
なんせ、プログラマーの仕事はわかりにくいのだ。
仕事がわかりにくいというより、1つの仕事にかかる時間が把握しにくい、と言ったほうがいいだろうか。
これは、プログラマー本人でさえなかなか難しい。プログラムを全くかじったことのない人なら、わからないのは当然である。
あまりにも不確定要素が多すぎるのだ。
- 改良を加えるプログラムの構造
- 開発環境、本番環境
- プログラミング言語のバージョン
- 使用しているプラグインやライブラリ、それらのバージョン
などなど。
ぱっと見同じ作業に思えても、これらの要素に応じて、5分で終わるものもあれば1週間で終わらないものもある。
だから、「時間」と「コード量や成果」だけで仕事をしているか判断することには、そもそも無理がある。
では、どうすれば良いのか?
単に仕事をしているかどうか判断するのであれば、以下の条件がそろえばおおよそ問題は解決される。
- 仕事しているかどうか判断する人が、最低限のプログラム知識を持つ
- プログラマーは、作業ログを残す
ここでいう「最低限のプログラム知識」というのは、プログラマーの作業ログをみてだいたい何をやっているか理解できる、という程度のことである。
これさえできれば、なぜその仕事にそれだけの時間がかかったのか、お互いに納得できる。
作業ログに不自然な点がなければ、「だいたいそれくらいかかるよね」となんとなく納得できるし、作業ログを読むことによってその経験値もたまる。
「成果に対してかかった費用が見合ってない!」ということであれば、そもそもの見積もりや前提が甘いか、仕事の進め方に問題がある。
先ほど述べたように、プログラムを書くという行為には、不確定要素が多分に含まれている。だから、「見積もり」も相当難しい。
これを解決するには、一括で見積もりをして仕事を進める「ウォーターフォール型」と呼ばれる仕組みをやめて、少しずつ進めていく「アジャイル型」に切り替えるか、それに準じた仕事の仕方を模索する必要がある。
もしこれらの単語の聞き馴染みがなければ、調べて欲しい。それぞれメリット・デメリットがあるが、選択肢として知らないのはあまりにも損だ。
一番大切なことは、信頼関係
あれこれ述べてきたが、一番大切なことは信頼関係を築くことである。
プログラマーであれなんであれ、信頼関係がなければ良い仕事はできない。
だから、仕事を任せるなら信頼しよう。仕事を任されるなら、信頼される人になろう。
以上です。