個人ブログ

インフラ、アプリケーションまわり

エンジニアとして成長するために必要な考え方

背景

エンジニア研修を進めるにあたって、先輩エンジニアの方から助言を頂いたのでメモ。

研修内容

5月いっぱいを使って、エンジニア研修(プログラミング研修)を行っている。

中旬までは、外部サービス・書籍などを使って学習。 業務で使う言語はもちろんのこと、Git、HTTPプロトコルなど、Webエンジニアとして必要な基礎を網羅的に学ぶ。

その後、研修の総仕上げとして、擬似的なサービスを実装してみる。 「インプット → アウトプット」の流れ。

自分が行っていた学習

関数・モジュール・ライブラリなど、逐一暗記しようとしていた。 なんのことだかチンプン・カンプンだったから、ひとまずインプットしようという発想。

だが、暗記に時間を書けすぎて、タイムロスが多かった。 また、キャパシティオーバー気味でもあり、結局学習内容が身についていない状態だった。

助言内容1:暗記は必要ない

たとえば関数・ライブラリの文法などについて、逐一暗記する必要はない。

ネットを探せば、情報は無限に転がっている。 それらを調べて、使える状態にしておくことが大切だ。

「知っている」ではなく「調べて使いこなせる」を達成レベルにおくと良い。

たとえば、ある機能を実装したいとする。 その時に「あの関数使えるかも」という発想に至るかどうか。 そこが重要だ。

「知識にフックをかけておく」とも表現できる。 このケースであれば、あの関数・ライブラリが使えたかな? と考え、インターネットの引き出しから情報を引っ張り出せる力を身につける。

助言内容2:完成図をイメージし、仕様に落とし込む力

たとえば「動くサイコロを実装してほしい」という要望があったとする。(適当)

まずは、完成図をイメージする力が必要になる。 どの手段を用いれば、最適にゴールできるのだろうか?

次に、そのイメージを仕様に落とし込み、機能ごとの実装を考える。

こういう機能を実装したい。だったらこの言語の、この関数・ライブラリを使えばいいんじゃないか。

ここで初めて、知識が登場する。

もちろん、ただ知識を使うのではない。 使いたい知識のフレームを思いつくことが一番大切だ。 日頃の技術研鑽は、この思いつきを作るために行えばいい。

どうすれば思いつくか。 一例をあげると、

-技術を実際に触ってみること

-手を動かして、自分の体を通過させること

-なぜその技術があるのか。その背景を考え抜くこと

これらを意識したい。

助言3:強いエンジニアとは

強いエンジニアとは、引き出しが多いエンジニアだ。 たとえば、とあるゴールがあった時に、 その地点に到達するための道筋・手段を多く提供できるという事だ。

そのために必要なものの1つは、上にも書いた「知識にフックがかかっている」状態。 問題の解決手段に応じて、適切な知識を採択できる力だ。

もう1つは、技術の根っこを理解していること。

どの言語にも汎用できる、共通項がある。 クラス・モジュールの概念だとか、より深いレイヤーでいうと、 HTTPプロトコルTCP/IP、などの部分。

これらについて深く理解していること。 理解の到達レベルとしては、 その分野について詳しくない人にも伝わる説明ができる というところ。

意識して鍛えていきたい。

日々意識したいマインド

昨日の自分を超える

昨日の自分と比べて、何ができるようになったのか。 毎日言語化する。

できる事の積み重ねが人生を変える

と、某著名編集者も言っていたし。

自分が今何を疑問に抱いているのか、明確に言語化

自分の疑問を言語化できないのは、ボキャブラリーが少ないからだ、 と先輩エンジニアの方も言っていた。 ボキャブラリを増やす努力は毎日しよう、、、

加えて、技術的に詰まる部分があれば

-何に詰まっているのか

-なぜ分からないのか

-何が分かれば、疑問が解消できるのか

に立ち返って、疑問点の浮き彫りを行う。 解決方法をログ・健忘録に残しておけば、さらなる成長に寄与できるかも。

自分自身の現状を俯瞰する

どちらかというと、自分は視野が狭くなる傾向がある。 だけど、自分自身のキャリア・現状を考えた上で、 今行うべき行動を組み立てたい。 そのために「鷹の目」を持ち自分を俯瞰するマインドが超重要になる。

ゲームの主人公を見るかのごとく、自分を見る。

「まぎれもない自分自身が人生の主人公だ」

と、某有名作家も言っていた(多分)

センスを磨く

これは別記事に詳しく書く。

まとめ

がんばる。