先日弊社の人事が下記のブログをあげていました。

「優秀」とはなんなのか。「優秀」を7つの軸で定義してみました。

この記事をよんで僕も思いました。

よくあの人はすごいできるプログラマーで 「技術力がある」 、なんていう話をよく聞くかもしれません。
でもプログラマーでいう 「技術力ある」 ってなんでしょう?

4月から新しい生活が始まる人も多いかと思い、せっかくなので新人向けエントリとして僕の考えを書いてみたいと思います。


プログラマー以外の他の専門職で言えば技術力があるっていうのはわかりやすいと思います。

  • 画家であればめっちゃ絵を書くのがうまくて、まるで写真のようだとか
  • 下町ロケットにでるような町工場の人であればミリメートル単位まで正確な商品を作り出せたりとか

でもプログラマーの場合はつくったものを見てもいまいち技術力が判断できません。プログラマーの目線で見ればまだわかるのですが一般ピープル目線だといよいよよくわかりません。
Googleの検索エンジンとかのレベルにまでいけば、「なんかすごい技術!」っていう判断はできますが
一般のWebサイトみても、例えばcookpadのサイトみて技術力たけー!っていう感想はなかなかもたない。
(ちなみにエンジニア界隈では有名ですがcookpadのエンジニアの技術力はくそ高いです)

要は作ったものでは判断しにくい状況です。
ではプログラマーにおける「技術力がある」っていうのはどういうことなのか?

僕は

  • 知識
  • 基礎技術の応用力

この2つだと思っています。

圧倒的な知識!

できる人は知識量が圧倒的にすごい。
これは結構容易に想像がつくところではあると思いますが

「アー、そういう場合は、rubyのこのメソッドを使えば、、、」

「その場合はcurlのこのオプションを使えば、、、」

「なんか重い場合はvagrantでこういう設定をすれば、、、」

「cssでこういうプロパティあるから、、、」

「javascriptのこのライブラリを使えば、、、」

「chromeのdeveloperツールのこの機能を使えば、、、」

と、あらゆる場面でそれに適した回答が瞬時にでてくる人は間違いなく技術力が高いです。
当然知っていることが多くなるとググる回数も少なくなりプログラムのスピードもあがります。

知ってるか知らないかっていうだけの話なので、たまたま知ってた/知らなかったっていうのはもちろんあると思うのですが、今世の中に次々とでてくるツールや新しい技術や用語についていくには、ぼーっとしているだけではすぐにおいていかれます。

なので意識的に情報を得るようにして、その得た情報を自分のなかに知識として溜め込むために自分で実践をしている人

というのが技術力があるという人の1つの条件になるかと思います。

単に知っているだけ、というよりはちゃんと使えるレベルにまで消化させているっていうのがポイントですね。

基礎技術をちゃんと理解している!

もうひとつの「技術がある人」が持っている力が基礎応用力です。
とはいえ応用力も結局知識にがあることが前提ですが。

知識は数学で言えばいろんな公式を覚えまくっている状態で、公式そのままで当てはまらないような応用問題が解ける状態が応用力があるといえる状態だと思います。

例えば、、、

  • アプセトネデブ(※1)はみんなしっていると思いますが、「サイトにつながんねー」って言う場合にどの層で問題が起きているのかというのを意識できているのかとか
  • この処理はMVCの概念から言うとControllerの責務ではないから~みたいなの言えたりとか
  • インフラ設定うまくいかないときに、「これpermissionの設定のせいじゃね」、「いやこのパッケージないからじゃね」、「そもそも設定ファイルの記述ミスってね」
    っていうのが、なんの問題なのかの勘が働いたりとか

他にもオブジェクト指向とはとか、ネットワークはどうやってつながるのかとか、メモリ管理ってどうなっているのかとかといった普遍的な話をきちんと他人に説明できる
レベルになっているか、というのが肝だと思います。

ぶっちゃけ最近はツールやインフラ周りは発達してきて、こうした基礎知識はほとんど意識せずに開発ができるのですが障害とか予期せぬ事態が起きたときに、この辺の力が試されます。

「なんかサイトにアクセスできない、でもサーバ負荷は特にない、Webサーバも立ち上がっている、いったい何が起きているんだ!うわー!」
っていう事態にならないようしっかり基礎理解するようにしましょう。(自分を含む)

※1:アプセトネデブ
ネットワークでデータを通信相手に届けるためのルールを7つの層に分けてあるのですが、それぞれの層の名前を覚えるための語呂。
「OSI参照モデル」で調べるといろいろ出てきます。

どうすりゃいいのか?

なるほどいろんな知識をつけていくことはわかった、基礎を大事にすることもわかった。
ではその力をつけるためにはどうすればいいのか?

エンジニアとして成長するためには、みたいな記事は世の中にいっぱいあるし、ちょうどQiitaでも新生活応援キャンペーンをやっているので、そうしたところを参考にするとよいかと思います。

ちょうど最近もいい記事があがっていました。
新人プログラマ向け・スキル向上のための具体的なアプローチと考え方

でもせっかくなのでここで、冒頭に紹介をしました弊社人事のブログから自分が重要だと思うところを抜き出すと

その5:とにかく素直で謙虚な「精神性」を持った人が強い

これ!

素直さ が大事。

入社したては基本的には周りの人のほうが優秀です。なので周りの人がいっていることを素直に受け入れましょう。自分の考えは、そのアドバイスを受けたうえでアドオンするイメージでいるほうがうまくいくと思います。

素直さがあれみんなやさしくしてくれます。
そんな素直な人たちと僕は一緒に働きたいと思っています。