がじぇっく

0 ➡︎ 1エンジニアの、開発 / ライフハック / ガジェット + α

「プログラマー」とは、コードを書く職業ではない

先日、togetterというまとめサイトにこんなトピックが上がっていた。

togetter.com

詳しくは上のまとめを読んでいただきたいのだが、ことの始まりは以下のツイートである。

個人的なこれに対する感想は、理解していない仕事をあおるなの一言であるが、これでは身もふたもないので、現役プログラマーの視点から、プログラマーの仕事をざっくり解説して行きたいと思う。

プログラマーの仕事は、「できていない状態にあるものを、できている状態にすること」

プログラマーの仕事は、この見出しの通りである。あるいは、その前後にある調査やテストも含まれる。

決して、コードを書くことではない。

コードを書くことは最終作業であって、コードを書いているときには9割仕事が終わっていると言っても過言ではない。

小説に例えるなら、最終的なコードを書くのは清書の段階である。


小説を書くことを想像してみてほしい。想像しにくいなら、作文でもいい。

はじめにあなたは、何をするだろうか?

いきなり清書するだろうか?

普通、しないはずである。

0からの場合、大抵の場合はその作品のテーマを考えたり、あるいはアイデアを出したりするだろう。

そして、方針が固まったらちょっと書いてみる。

うまくいきそうになければ初めから書く。

うまく書けそうならそれなりに書いてみて、時々見直しをする。

一通り書けたら、全体を読み直して、小説として構成がしっかり成り立っているか確認する。

そして最後に、校正・校閲(誤字脱字をなどがないか確認して、修正)して、清書。これでようやく完成である。

プログラムを書くときにも似たような過程をたどるのだ。

はじめに実装方針を考え、アイデアを出し、どうしたらうまくいくか試行錯誤をして、うまく言ったら全体を見直して、綺麗なコードにして終える。

その最終結果が数行のコードになることだってある。

これを考慮しても、「ちゃんと仕事しろww」なんて本当に言えるだろうか?


俳句や短歌にたとえると、もっとわかりやすいかもしれない。

「数行しか書いてないの?」と、俳句や短歌を書く人に言えるのか?

ということだ。

ただ、確かにプログラマーの仕事はわかりにくい

ただまあ、「ちゃんと仕事しろよ」と言いたい気持ちもまったくわからなくはない。

なんせ、プログラマーの仕事はわかりにくいのだ。

仕事がわかりにくいというより、1つの仕事にかかる時間が把握しにくい、と言ったほうがいいだろうか。

これは、プログラマー本人でさえなかなか難しい。プログラムを全くかじったことのない人なら、わからないのは当然である。

あまりにも不確定要素が多すぎるのだ。

  • 改良を加えるプログラムの構造
  • 開発環境、本番環境
  • プログラミング言語のバージョン
  • 使用しているプラグインやライブラリ、それらのバージョン

などなど。

ぱっと見同じ作業に思えても、これらの要素に応じて、5分で終わるものもあれば1週間で終わらないものもある。

だから、「時間」と「コード量や成果」だけで仕事をしているか判断することには、そもそも無理がある。

では、どうすれば良いのか?

単に仕事をしているかどうか判断するのであれば、以下の条件がそろえばおおよそ問題は解決される。

  • 仕事しているかどうか判断する人が、最低限のプログラム知識を持つ
  • プログラマーは、作業ログを残す

ここでいう「最低限のプログラム知識」というのは、プログラマーの作業ログをみてだいたい何をやっているか理解できる、という程度のことである。

これさえできれば、なぜその仕事にそれだけの時間がかかったのか、お互いに納得できる。

作業ログに不自然な点がなければ、「だいたいそれくらいかかるよね」となんとなく納得できるし、作業ログを読むことによってその経験値もたまる。


「成果に対してかかった費用が見合ってない!」ということであれば、そもそもの見積もりや前提が甘いか、仕事の進め方に問題がある。

先ほど述べたように、プログラムを書くという行為には、不確定要素が多分に含まれている。だから、「見積もり」も相当難しい。

これを解決するには、一括で見積もりをして仕事を進める「ウォーターフォール型」と呼ばれる仕組みをやめて、少しずつ進めていく「アジャイル型」に切り替えるか、それに準じた仕事の仕方を模索する必要がある。

もしこれらの単語の聞き馴染みがなければ、調べて欲しい。それぞれメリット・デメリットがあるが、選択肢として知らないのはあまりにも損だ。

一番大切なことは、信頼関係

あれこれ述べてきたが、一番大切なことは信頼関係を築くことである。

プログラマーであれなんであれ、信頼関係がなければ良い仕事はできない。

だから、仕事を任せるなら信頼しよう。仕事を任されるなら、信頼される人になろう。

以上です。