はじめに
私は新卒からSIerに務めて5年目のSEです。
業務の中で感じた(弊社での)優秀なSEの定義と一般的に優秀だとされるPGが真逆だと感じましたので記事を書きたくなりました。
完全に個人的な意見です。会社としてそういった人を求めているというわけではなないと思います。
優秀なPGとは?
定義は様々にあると思いますが、私はラリー・ウォールのプログラマの三大美徳を持っている人だと考えています。
三大美徳とは、下記の3つです。それぞれの解説はこのサイトから引用しています。
1.怠慢
同じ作業を繰り返すことが面倒ではないという人もいれば、面倒だという人もいます。そこで、面倒だと思う人はその状況をどうにか打開できないかと考えることでしょう。
その面倒なことを打開したいというキッカケとなる「怠惰」が、プログラムを組む上で大切になってくるのです。制作したプログラムが無事に作動して活躍することになれば、多くの人たちの作業負担をグッと抑えられる可能性が見えてきます。
また、制作したプログラムを使用する顧客から都度都度質問が挙がらないように、あらゆる質問を想定して予め丁寧な顧客用のマニュアルを作成する工夫などを行う傾向も高いようです。
2.短気
せっかく制作したプログラムでも、後々挙動がおかしくなったり、処理速度が遅くなったりしては苛立ちを覚えてしまうでしょう。そこで、「短気」である人は事前にそのような問題を想定して、時間が経過しても苛立つことのないプログラムを組むことを心掛けるようです。
さらに、後々の仕様変更や要望などに対しても、根本的な部分から大きく変更を行う必要性が出てこないよう、そういったことを予見した余裕のあるプログラムの組む努力をします。
3.傲慢
「傲慢」である場合、誰にも指摘されないような問題のない完璧なプログラムを組むことを目指すケースが多いようです。そのため、プログラムは人に見られても恥ずかしくない、簡潔でキレイなものとなるでしょう。故に、万が一何か問題が起きた場合でも修正がしやすく、顧客も快適にそのプログラムを使用できます。
優秀なSEとは?
社内で評価されているSEを観察してみるとこのような特徴があると感じました。
1.勤勉
たとえ無駄だと感じる作業も根気強く続け完遂できる忍耐力、勤勉さが必須です。
Unitテストは手作業で実行しエビデンスをExcelに記録します。テストコードって何ですか?
ビルド/リリース作業ももちろん愛情込めて職人の手作業により行います。継続的インテグレーション?Jenkins?って何ですか?
2.気長
お客様の要望を忠実に実現するためなら多少の性能が遅くても気にしません。だってすべてお客様が望んでいることですから。。。(というよりも要望を聞いても性能劣化の懸念があるか全くわかりません。)
また、後々の仕様変更や要望があり大きな変更が必要になったとしても、必要工数はお客様にすべて請求するためじっくり変更要望の検討/実装をします。
3.謙虚
SEとしての仕事は、顧客の言うことを何でも謙虚に受け止め(御用聞き)、それらをPGに伝えてマネジメントすることだと思っています。
従って、技術的なことについてはずぶの素人で専門家の言うことには謙虚に聞き入れます。
(エンジニアとしての自覚はありません。)
さいごに
改めて整理してみると会社辞めたくなりました。。。(´;ω;`)ブワッ.