【日記】エンジニアの自分が"床上手な処女"に求める技術的スキル

「即戦力学生」という存在が目立っていたり、企業側もそんな存在を求めていたりする中で、エンジニアの自分が「エンジニアとしてこんなスキルを持った人間と働きたいな」と思っているスキル3つをまとめます。

タイトルについて

『床上手な処女』というのは下衆な表現だと思いますが、そもそも学生に即戦力性を求めていることそのものが状況として下衆っぽいよなと思うので、敢えてこの言葉を使います。

「そもそもお前そんな求められるぐらい実力有るんだっけ」とか言われると何も言い返せませんが、それを妄想する位は許されるといいな……。

1. Git / GitHubを用いた開発スキル

モダンな開発をやっている会社ではほぼ確実にGit / GitHubを使って開発を進めます*1
どの言語、どのフレームワーク、どんな環境であったとしても共通でほぼ確実に使います。

コードを書く時Gitで詰まるのはかなり大変です。
詰まっている間はアウトプットが出ませんし、他にも分からないことだらけなのにGitで詰まるというのは焦ります。
また、1コミットがデカかったり、1つの内容が2コミットに分かれていたり、プルリクの単位が大きすぎたり、チーム内の決め事が守られていなかったり、Gitを使いこなせないと他メンバーに迷惑をかけることにもなります。

また、ニーズ抜きにGitはとても便利なツールなので、使いこなしてる人の方がアウトプットが出るだろうなという期待も有ります。

求めるレベル

GUICUI問わず、以下の操作が呼吸のようにできれば十分レベルが高いなと思います。

  • 適切な単位でbranchを切ってcommitしてpushしてプルリクが出せる
  • 長いブランチをコミットやファイル単位で分解して複数のブランチに分けられる(cherry-picなどを問題なく用いられる)
  • rebase, reset, revertが問題無くできる

2. IDEを用いた開発スキル

現在のIDEには、以下のような機能が当たり前に付いています。

  • コード補完
  • よりよいコードの提案
  • コンパイルエラーをコンパイル前に表示
  • ソースの定義に移動
  • ソースが利用されている場所に移動
  • 行単位で簡単にデバッグ
  • Gitを絡めたコードの変更箇所のハイライト
  • etc...

これらの機能を使わずに開発をしても能率が上がりませんし、コードの品質も低下するため、最近では単純なプログラミングだけでなくIDEをどれぐらい使いこなせるかが生産性に大きく寄与するようになっています。

個人的には、Inellij系(JetBrains製)のIDEで開発している人なら、別言語だろうが作業するプラットフォームが変わろうがそれほど影響なくやっていけるだろうということで、バリューが高いなと思っています。
また、IDEでなくてもIDEと同じことができるというのは確かに有りますが、その環境構築の手間や環境依存を考えると今の時代はIDEに甘えた方がいいんじゃないかとも思っています。

求めるレベル

以下ができれば十分レベルが高いなと思います。

  • コード補完やより良いコードへの置換を使いこなせる
  • ブレークポイントを貼って行単位でデバッグできる
  • ソース定義・利用箇所への移動を使いこなし、ライブラリから必要なコードを持ってくることまでできる
  • プラグインを導入するなどしてIDEをカスタマイズできる

3. プロジェクトに区切りを付けるスキル

どんな素晴らしい設計であっても、どんな綺麗なコードであっても、リリースしなければ価値を生みません。
設計もコードも綺麗にすべきですが、そのために時間は必要です。
一方、そのような時間を取るだけの余裕が必ずしも有るとは限りません。

検討の死角は大概やってから気付くもので、好奇心やプライドより実利を優先するという判断力は必ず必要になってきます。

あるいは、その問題を放置することが大きな問題になるようであれば、目先の利益を捨ててでもその問題に対処する必要があるかもしれません。
その判断をチームで共有し、実行するためには、どちらの道をとった場合にどのようなメリットとデメリットが有るかを定量的に示す必要があるでしょう。

プロジェクトをどこで区切るかを決めていくためには、自分の直感がいかに正しいかを検証し例示することが必要になってきます。

自分がどう物を作ることが組織に対してメリットを生むかを判断する能力は実務経験を積むことで養われるものだと思いますが、だからこそ学生の内からこのようなスキルを研いでいる人と働けたらいいなと思います。

求めるレベル

個人・複数人やプログラミングだったかを問わず、期限があったり、お金が絡むような状況でプロジェクトを進めた経験が有るとレベル高いなと思います。
その内容が月単位など長期間で取り組んだものであればより凄いなと思います。

補足: 「どんな技術を使えるべきか」という問いに対して

あくまで個人的な意見ですが、学生の間は「どんな技術を使えるべきか」という問いを社会人に投げても無駄なんじゃないかと考えています。

理由は2つ有ります。
1つは、企業からすれば「自社で使っている技術 or バズってる技術」位しか提示しようが無いことです。
もう1つは場で勉強すれば何だってできるんだから、勉強の効率を上げたり本質的な内容に集中するためのスキルを磨いた方が長いこと食っていけるだろうと思っているからです。
意識の高いワードを使うなら"本質的な人間力の方が大事"ってやつです。

また、上に書いたようなスキルを得ているなら、必ず難しい開発に立ち向かったことが有るはずなので、今やっていることがどれだけマイナーなことであったとしても、その時点で技術力に不安は無いなと感じます。

最後に

ここまで書いたスキルは学校ではやらないような開発、即ち複数人か大規模か、その両方な開発をする上で必要になるスキルであって、学校に居たからって身に付くものではないなと学生生活を振り返って思います。
また、こういった内容はメンターが付いた状態で作業をしてやっと身に付くものが多いと感じるので、特に地方の学生でこの辺りのスキルを養うような機会が得られる確率はかなり低いでしょう。
だからこそ"床上手な処女"という訳ですね。

 書いてみて、「こんな社会人みたいな人材であることを学生に求めるのは下衆な考えだ」と改めて思いますが、とは言えレベルの高い・会社に貢献してくれそうな人材を探せばまず間違いなくこんな感じの属性が入って来ると思うので、どうにもならないなと悲しい気分になってきます。

学生の内から実績を求められるっていうのは何だかなあ……。
というか自分も今できてないようなことまで書いてるし……。

纏まらなくなったのでここで切ります。

こんな駄文を長時間読んでいただいてありがとうございました。

*1:GitHubに関しては、GitLabだったりGitHub Enterpriseだったりで差異が有るでしょうが、バージョン管理ツールは基本Gitでしょう。