はじめに
プログラマたるもの業務をスマートに行うためには、何が重要かと考えてみたところ3つ思い浮かびました。
スポーツ選手にとって心技体を鍛えるのが重要と言われるように、プログラマもこれらの要素をまんべんなく鍛えないといけないのじゃないでしょうか。
1.言語力
- 複雑な仕組みをいかに、今使用している言語の仕様にそって簡潔に表現できるかという能力。例えばCでプログラムを書く場合は「やさしいC」を読むと多少身につく1。
- qiitaではこれに関する記事が圧倒的に多い。技術者が自分自身を評価するときに、この能力しか用いないのではないかと心配になる。
- 新しいプログラミング言語を取得するたびに、勉強し直す必要がある。しかし、ある程度使いまわしが可能。覚えることが多く勉強のしがいがある部分。
- よくプログラミング適性がない2とプログラマは厳しいと言われるが、プログラミング適性はこの部分しか関係してこないんじゃないかと思う。
2.設計力
- 概要設計書とか詳細設計書とかを書く能力のことではない。
- クラスのインタフェースのデザインであったり、クラス間の関係の構築であったり、プログラミング領域全体の設計を考える能力。
- 典型的な悪い例は一つのメソッドに全ての処理が詰め込まれているパターン。
- 勉強の仕方がいまいちわからないせいか、現場で軽視されている気がする。この部分についての知識がないと誰かが考えた構成を何も考えず持ってきて、なにも手を加えられない状態におちいる。
3.業務知識
- 作りたいシステムに関する業務知識。例えば銀行業務なら、入出金のフローを知っておく必要があるといったようなこと。
- 現場独自のマイルールが企業には存在している、それをうまく汲み取って作業しないといいシステムはできない。現場でシステムを見ていると、わけわからないことが多々ある。1レコードに所在地が2箇所入っていたりと。
- 概要設計書、詳細設計書を記述する際に重要なのは上2つよりこちらの方ではないかと思う。
- 学校の勉強と同じで、やっただけ身につく。プログラミング適正とかいらない、上2つより覚えるのは簡単。ただし、異動で業務内容が変わった場合、上2つと違って全く使い物にならなくなる可能性あり。
おわりに
- プロならどれもある程度できていないとダメ。「プログラミングできないから、業務知識でカバー」という風に、どこかで補えるものではない。
- 業務知識は時間を書けて勉強すれば誰でも覚えられるので差がつきにくい。言語力や設計力は意外と日常業務で身につかない。