開発中に求めること
7月1日にCookpadにインターンとして参加してから1週間が経過した。「インターンに参加する」では齟齬があり、「インターンとして参加する」が最もしっくりくる雰囲気。ここでは時間が過ぎていくのが速すぎて恐ろしい。月と太陽まで高速なサイクルを回さなくてもいいのに。
今まではてなで働いた経験しかなかったけど、今回クックパッドで働いた経験が1週間貯まった。これまでは「はてなだからこうしているのかもしれない」という捉え方しか出来なかったけど、この時点で「ああどこも共通してこうなっているのかも」という視点に立って考えることが出来る状態になった。その視点から考えてみて、幾つかの共通する意見が明確になってきた。
学習コスト
Cookpadの開発は、途中からJoinしやすい環境が整っていた。Railsを採用しているところは特に、内製フレームワークに対する理解の為の学習コストが発生することなく、開発に取り掛かれる。勿論、内部で独自の管理機構を持っている場合は、そこの実装を理解する為の学習コストは発生する。
自分は、冷静に考えると、既存プロジェクトの開発時に以下のような割合で時間的コストを割いている気がする。
| 既存のコードの理解 | 70% | | 実装方法の提案 | 10% | | 実装(try&error) | 20% |
今日@Cside_君と話したことだけど、コードの理解に時間を費やすのは避けたい。
- 既存コードの学習時間はかなり苦痛である
- 既存コードの学習時間が開発速度に大きく影響する
望ましいかどうかはとりあえず置いといて、結果論としてそうなっている。既存のコードの理解の速さは開発速度に大きく関わるので、学習コストは出来る限り低く抑えたい。その割に、自分が学習コストの低いコードを書けているかと言えば、そういうことを考えてなかった。なんでだろう、今度から考慮しよう。
ざっくりと全体を俯瞰した説明
新規にプロジェクトにJOINして開発するときに自分が1番知りたいと思うのは、プロジェクト全体(ファイル構造等)についてのざっくりとした説明なのだけど、あまり共有されていない気がする。このファイルはこの責任を持つクラスが書かれたコードである、ということは個別のファイル単位では分かるのだけど、全体を俯瞰した時にどこがどうなっててどう連携している、ということが最初に1番知りたい。自分が見てきている限りでは、ドキュメントは結構個別の機能に対して書かれていることが多くて、全体についての説明はあまり見たことがない。書きにくいっていう理由は勿論分かる。
実例で言えば、今回のインターンではそれを知るために、プロジェクト全体に対して理解を持つ開発者の方に1時間ほど時間を割いてもらうことが出来て、ざっくりと説明してもらった。これによって、短時間でかなり理解が深まった。何が言いたいのかと言うと、この「ざっくりと全体を俯瞰した説明」は個人的にかなり重要な部分だと思っているのに、口頭で説明してもらわないと知れない、または最悪の場合知らないまま自分で勝手に理解を深めていくという状態が存在する。なんとなく、これは良くない状態かなと思う。
まとめると、新規にプロジェクトにJOINするときに、ざっくりとした説明の言語化と共有に対する要求があるが、質問ビリティが高くないので聞きにくい現状がある。とりあえずの解決策として、1度聞いたことを共有出来る形で文書化してまとめて後続の人などの為に残しておくことと、そういう欲求があることを表明して共有しておくことにしてるけど、ちゃんと仕組化したい。
質問ビリティ
インターンやアルバイト、及びその他の開発で、人に聞けない場合どうしてきたのかと言うと、ファイルの命名規則とgit grepだけに頼って独自に理解を進めてきた。あとは、本当に時間のありそうなときを狙って、クリティカルな部分について一瞬だけ聞いていた。インターンやアルバイトの立場で何か質問をする場合には、前提として、聞きたい人の生産性に比べて自分の生産性が圧倒的に低いことが分かっている。仮に時間を取ってもらって聞いた場合に、以下のようなことを秤にかけると結局聞かない方がいい場合もあって、結果聞けないこともある。
- 相手の時間損失リスク
- 質問による問題解決の可能性
- 質問による相手の認識への貢献
- 自己解決の可能性
- 自分の今後の成長速度への貢献
開発に慣れたエンジニアはなんとなく雰囲気で暗黙のうちに理解してしまうのでそれはそれでスゴいんだけど、そういうコードの空気の読めない自分は、ぐぬぬってなってる。
誰が何してるか分からない
もう1つ思ったことは、誰が何してるかが分からない、ということ。別にいまの開発現場が特別にそういう状況にあるわけではなくて、そういう現状はどこにでもあって、解決すべきじゃないかなと思ってる。はてなでアルバイトしてる時も分かってないし、いまクックパッドでも大体分かってない。
問題を分割すると、(A)全体としてどこで何やってるか分からない問題と、(B)特定の相手が何やってるか分からない問題がありそう。(A)全体の問題は、各チームがいまリアルタイムで何を行っているかというのが知りたくて、〇〇の移行作業に取り組んでいる最中とか、〇〇のための簡単なブレストをしているとか、今週の目標はこれだとかを、パッと俯瞰したい感じ。(B)特定の相手の問題は、いまPCに張り付いて集中している人はどういうタスクを抱えているのか、時間を割ける余裕があるのかとか、今どこにいるのかとか。
自分が所属している研究室でもこれは当てはまっていて、どの学生がどんなタスクを抱えていて、いま何の作業をしているのかは全く分からない。分かるのは、PCに向かっているということだけで、まとめブログ見ている人もいれば、実験データ取っている人もいる。いま研究室用のグループウェアを開発して運用しているところなので、研究室についてはこれをベースに仮定と検証を進めて解決出来るか試してみようと思ってる。
まとめ
単純に自分の理解力が圧倒的に足りてないせいなので、この類の欲求があることを表明するのはとても恥ずかしいことなんだけど、言わないより何かに貢献できると思うし、とりあえず書いた。思ったこと書きなぐったけど、噛み砕くと「俺は馬鹿です。俺のような馬鹿は他にも居そうなので協力してください^q^」ということです...。