ボクココ

個人開発に関するテックブログ

エンジニアの2タイプの考察

ども、@kimihom です。

f:id:cevid_cpp:20190330182837j:plain

今回はエンジニアを2タイプに分類してみて、それぞれについて考えてみる。もちろん全てのエンジニアがこの2つのタイプに完全に分かれるってわけではないけど、一つの参考にはなるだろう。

大学時代の友人の話

この記事を書くきっかけは、私の大学時代の友人である。彼は学内で相当優秀な生徒だった。私は興味のない科目などで何度か彼に助けてもらっていた。

私と彼はプログラミングを学ぶ学科にいたこともあり、ある日なんか一緒に作らないかという話になった。そこで私は当時から使っていた Ruby on Rails を採用することを提案して、実際に作り始めることになったのである。

しばらく開発をやってみて、彼はあまり満足いかない様子だった。私が使い慣れていることもあって開発スピードは私の方が速かったのは当然だが、それ以上につまづいている点があったようだ。どうしたのかと理由を聞くと「このプログラムがなんで動いているか、 Ruby on Rails のソースコードを読んでもぐちゃぐちゃでわからない。」とのことだった。

まさにその通りだ。Ruby on Rails は開発者の効率を意識して中はメタプログラミングを駆使したソースコードなのだ。Visual Studio でメソッド名をクリックすれば該当の定義元のメソッドのソースコードにたどり着く、といったことができないのである。とりわけ当時の Ruby on Rails は User.find_by_name といったように単純な ActiveRecord でのデータ取得でもメタプログラミングが使われていた。純粋に find_by_name でソースを検索しても見つからないのである。そんな Ruby on Rails に霹靂とした彼は、結局開発を止めてしまった。プログラミング言語やフレームワークも、人によって合う・合わないがあるのかなってことで、その開発は止まってしまった。

そこまでソースコードにこだわりのある彼は、結局 C++ でプログラミングを極めている。カーネルを含めて全て自分の頭の中に入った状態で、素晴らしいクオリティのプログラムを磨き続けることに価値を感じているのである。

自分で全てを把握して理想を追い求める考え方が一つ目のタイプだ。まさに技術一筋といった印象を受ける。

私の話

私は学生時代から Ruby on Rails のファンだった。何故 Rails が私をそこまで引き付けたのかというと、このフレームワークは自分の思ったことを最速で実現できるものだったからである。多くのライブラリが提供され、一般的な実装はそれらを取り込むだけで実現できる。C言語と Java しか知らなかった私にとってはそれだけで衝撃だった。

私は先の友人とは違い、Rails を使って「何故動くのか」ってのはほとんど気にならなかった。それよりも最終的にモノを作り上げるってことにひたすら集中していた。問題が起こった時には渋々中のソースコードを見にいくこともあったけど、時間はあまりかけたくないってのが正直なところだった。

私の友人ならインフラストラクチャも自前で構築して問題が起きたら自分で調べるっていうところまで突き詰めていくことだろうけど、私はインフラストラクチャもできる限り時間をかけずに、問題が発生しづらくメンテナンス不要なものを好んでいる。

プロダクト開発に集中して技術はそれを実現するために使うっていう考え方が二つ目のタイプだ。

2タイプの比較

今、純粋なウェブアプリケーションの開発を2人が同時に始めれば、私の方が早く作り上げることができるだろう。多くのウェブアプリケーションを開発してきて、テストコードやソースコードの整備などの力もついてきた。開発速度が速いから、そのトレードオフでソースコードは汚いって意味ではない。

それでも、私が友人を絶対に超えられない部分がある。それは彼が突き詰めてきた C++ のローレベルの開発だ。そこでしか実現できない何かを開発する時、私はどんなに時間をかけても、(外部API がなければ)それを実現することはできない。彼なら時間がかかったとしても、今まで誰も実現できなかったことが実現できるはずだ。

終わりに

ここまで書いて、どっちにも魅力があることに気づいていただけたはずだ。

一般的に、技術者は私の友人のような、他に誰も開発できなかったような全く新しい技術を作り上げるといったエンジニア像が理想とされているように思う。それはそれで研究職のキャリアパスとして大いに検討する価値があるだろう。

ただ私のようにビジネス思考がかなり入っている効率重視なエンジニアってのも面白いよ、ってのをプログラミング初心者の方で今後のことを考えているのなら知っておいて欲しいと思う。

効率重視なエンジニアの面白い点は何か、それは私なら語れるので この記事に評判あれば書いてみるとしよう。