見出し画像

汎用性の高いエンジニアリングスキルを身につけたい

僕は以前からずっと汎用性の高いエンジニアリングスキルを身につけたいと考えていました。最近、そういったスキルを手に入れ始めることができたのでnoteにまとめます。

汎用性の高いエンジニアリングスキルを身につけたくなった元々の理由は、自分が尊敬するエンジニアたちが、そうしたスキルに関する話題で楽しそうに盛り上がっている様子を見ていたからでした。漠然とした憧れです。尊敬する優秀なエンジニアと楽しく話がしたかった。

ここで言う「汎用性の高いスキル」というのは、状況によって使い分けの判断が必要になったり、プラットフォームの流儀に縛られないスキルのことです。
その逆には限定的なスキルがあります。具体例を挙げると、プラットフォームの流儀に則った、「逆引き的なスキル」です。「この時はこうする」みたいな。「このフレームワークで画面遷移を行いたい場合は、このクラスのこの関数を使う」みたいな。
(もちろんプラットフォームに対する理解は重要で、汎用性の高いものごとを考える素として、そのスキルは欠かせません。)

最近は汎用性の高いスキルを身につける一環として、「設計」や「テスト」というトピックに軸足を置いて活動しています。
設計やテストといった概念は、プラットフォームに(ある程度)縛られることなく、結合度と責務の分割、機能の妥当性やその担保の仕方など、理想の形を持っています。

『情熱プログラマ』という本の、第9節「自分の人生を他人任せにするな」という部分に、関連する話が出てきます。

そのうち自分の見方が自然に変わっていくのを感じるはずだ。〜
実装の詳細がわかると、背景となる高度な概念のパターンが見えてくる。〜
君の脳みそが分類して理解した概念やパターンは、特定のベンダのテクノロジよりもはるかに拡張性があるし普遍的だ。

汎用性の高いスキルは、仮にたずさわっているプラットフォームが廃れたとしても、次の環境でも活かせるスキルですし、より多くのエンジニアと会話ができるようになります。

実体験として、抽象度の高い概念や汎用性の高いスキルを身につけ始めると、雲の上のように感じていた優秀なエンジニアと会話ができるようになりました。
今僕はiOSを専門にやっていますが、Webエンジニアとペアプログラミングをするときにも、設計の話で盛り上がることができました。

「このフレームワークを使っていて、こういうことをやりたい場合にはこうすればいい」「この機能はこう使う」というような、逆引き的なスキルを学ぶこともはじめは楽しいですが、いずれはもっと応用が求められる広い世界に憧れを持つようになります。

僕は「設計」を学ぶことで、「汎用性の高いスキル」を身につけて色々なエンジニアと楽しく会話するという憧れを叶えられました。
続けていくと、次に「テスト」という壁が見えました。応用にはさらに続く応用が待ち受けていることを知りました。エンジニアという生き物はきっとこうして成長していくものなんだな、と実感しています。
すごく楽しい。

今回は「汎用性の高いスキルが欲しい」ということをテーマに書きました。
もし僕と同じような欲求を持っている方で、設計から始めてみようかな、と思った方が居れば、僕も共著させていただくこちらの書籍をぜひ。

iOSアプリでよく使われる設計パターンを網羅したバイブルにします。その設計パターンはどういったものか、どういう動機で選択されるのか、他のパターンと比較してどういう判断基準で採択するのか。
そういった考え方が身につく(そう書くつもりだ)し、様々なエンジニアとの議論の軸になる一冊になるはずです。
ぜひお買い上げを!

この記事が気に入ったらサポートをしてみませんか?