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