【エンジニア】非エンジニアがエンジニアになるために悪戦苦闘している話
はじめに
僕はエンジニアとして仕事を(職に就いているという意味で)しています。しかし、現場ではまだまだ力不足でコミットできず、パワーも時間もすごくかかってしまっています。
そんな中研修を受けながら、技術力・理解力ともに上げるフェーズを今踏んでいるのですが、かなり苦戦しています。
苦戦の内訳としては、理解力が深まらない⇛情報収集能力が低いことが露呈⇛組めるけど、ロジックを完全に理解できていない
という負のレールの上を走っています。
そこで、今回1つずつ理解を深めるためにどのようにすればいいのか、そして同じようにエンジニアリング力であったり、エンジニアと会話をするために必要なノウハウを発掘していきたいと思います。
前提として、僕は勉強が苦手
僕は中学受験、高校受験、大学受験とまともにしていません。
その結果コツコツと暗記したり、考えたりすることが苦手どころか、机に向うことがまず苦手です。場所を選ばずに学べるところで好きなように自由にスキルを習得してきてしまいました。
メリットとしては適応能力が少し上がったことと、OJTでのスキル習得は速いです。しかし、地道に基礎から習得するスキルが逆に乏しくなってしまいました。
そのため、まずは勉強をするためのマインドセットとそのために必要なモノをリストアップしてみました。
- モチベーションが上がる環境を作り出す
- モチベーションが上がるための道具を使う
- モチベーションが持続する時間を算出する
- なにがモチベーションを上げるか考察&洗い出す
- 1つに集中してやり遂げることに集中する
これぐらいかな?なにかあれば、追記します。
これらの項目についてそれぞれお話していきながら、まずエンジニアとはなんなのかの定義についても話していきたいと思います。
エンジニアに必要な能力とコーダーとの違いのお話
まず、エンジニアの技術力(能力)とはについて、とあるツイートを見たので、それを参考に考察してみたいと思います。
- 情報収集能力(=受動✕能動)
- 分析能力
- コーディング力
- 推進力(=ドブに手を突っ込む勇気) の4つに分解できる
というツイートがありました。
これをベースに考えてみると、自分で考えて自分で進んでいける者がエンジニアとしてやっていけるイメージを持てます。
情報収集能力の仕方
僕の仕方は様々ですが、Googleにお世話になるのは変わりないのですが、そこから先が結構ハードル高いです。
まず、わからない原因であったりエラーが有る場合、それを突き止めるのに様々なプラットフォームを回ります。徘徊します。
まず最近良く使うのが、Qiitaです。1年以上前に更新された記事でもコアな部分は変わっていないProblemもあったりするので、コチラよく読んでいます。
そして、Qiitaと同時に使っているのが、そのProblemとなっているフレームワークなり、言語なりの公式ドキュメントです。
公式ドキュメントを見れば大抵のことは書いてあります。と先輩に言われたことを思い出しながら、ひたすら読み漁ります。
また、ただ情報を収集したって意味が無いので、網羅するためにもFeedly使ったりして、日常的に情報が入ってくるようにしています。
インプットした情報を、更に自分でまとめて何が必要で何が不要なのかも取捨選択しながら、情報を整理しています。
問題として挙げられるのは、情報が古くなってしまった場合どうする問題です。情報は古くなるものですが、それをまとめておくのは大事なことだなと感じております。
なので、僕個人としては情報は整理して、ノートなり、オンラインドキュメントとして管理しています。
分析能力
これは、問題が発生したとき、バグが発生した時に何が原因なのかを突き止める能力ですね。
僕はこれが非常に不得意です。原因究明が不得意が故、なんで動かないのだろう?なんで○○の機能が作動しないのだろう・・・。といつも悩んで時間を取られています。
時間を奪われるのが非常にコスパとして悪く、非常に無駄が多いです。なので、この部分のスキルを重点的に上げていきたいと考えています。
じゃあ、どのようにすればいいのか?ということに関してはそれぞれに対して下部に書きたいと思います。
コーディング力
これはひたすら真似をして、レビューをしてもらい、コピーアンドペーストから、コードアンドレビューに切り替えていくことが必要ですね。
あとは、GitGistなどを見て、他の人の同じ言語で書き方の違いなどを学ぶといいと思います。僕はそのようにして、書き方を少しずつですが、納得できるコードが書けるようになってきました。
何が一番自分に向いているかはわかりませんが、書籍で学んだほうが僕はやりやすかったので、書籍を開いて、ペンとノートでサマライズを書いて、あとから見直しながら、手を動かしてコードを書いています。
夜間は頭が動かないので、昼間にやれるところまでやっています。
推進力
これも僕に足りていないスキルの1つです。自らドブの中に頭を突っ込んでいく必要があるのに、頭いっぱいになってそれどころではなくなってしまいます。
推進力を上げるために僕がしている事例も下部に書きますが、推進力とはそもそもなんなのかが非常にキーになってくると思います。
企業によって違ったり、社風によって違ったりというのは部署によって違ったりもすると思います。
しかし、人を巻き込んで物事をゴールに向けて走らせる、走るというスキルは今後生きるために必要になってくると思います。
推進力・・・なかなか難しいですが身につけたいです。
これらを習得するためのモチベーションの維持
モチベーションの維持のためにやっていることは、単純です。
環境を自分にあっているように整えているだけです。
僕の場合Bullet Journalというものを作って、その日毎の目標であったりやったことをまとめています。
海外で大流行中!自作手帳 Bullet Journal の作り方
上記のブログに詳しく作り方、マネジメントの仕方などが詳しく丁寧に書いてあります。
Bullet Journal 手帳の見直し
こちらも非常にわかりやすく書いてあるのでオススメです。
そもそもどういうものなのかは以下の動画をご覧ください。
このBullet Journalを作り始めるところから、僕のエンジニアへの道は始まりました。
そして、今も進んでいます。
エンジニアの定義として、
- 情報収集能力(=受動✕能動)
- 分析能力
- コーディング力
- 推進力(=ドブに手を突っ込む勇気) の4つに分解できる
とあるように、これらをどのように効率よく、モチベーション高くやっていくかのために考えたのが僕の場合はBullet Journalだったというだけです。
モチベーションの維持の方法は個人でそれぞれあると思います。そのためにやることとして、
- モチベーションが上がる環境を作り出す
- モチベーションが上がるための道具を使う
- モチベーションが持続する時間を算出する
- なにがモチベーションを上げるか考察&洗い出す
- 1つに集中してやり遂げることに集中する
と挙げましたが、環境はオフィスならオフィスで仕方がないので、その中で音楽を聞きながらなのか?、それとも、会議室にこもるなのか?と様々だと思います。
僕の場合は音楽聞いて外の音をシャットアウトした上で、本とノートを開いて、黙々とやっています。まるで研修生のように。(*研修中です*)
道具はBullet Journalが楽しく出来るようなノートを使っています。
持続する時間は始める時間を記録して、次時計を見るまでの時間ですね。それが僕の集中している時間だと思います。
モチベーションの上げ方、上がる瞬間はたいていわかった!これは楽しぞ!となった瞬間が一番集中していますということに気づいたので、その瞬間を作ることにフォーカスしています。
そして、あれこれやろうとせずに、1つに集中してやっています。ツールも同じであれこれ使おうとするとややこしくなります。
エンジニアへの近道は”Be Lazy”です。効率よくするためにはどうすればいいのかを考えることはLazyになってはダメですけど、どうやれば・どうすれば楽できるかを考える必要はあります。
分析能力と推進力をアップするためにしていること
分析能力はひたすら分析です。わからなければ調べる。それを繰り返すしかありません。
徐々にスピードが上がっていくことに期待しながら、ひたすら調べて壁にぶち当たります。何個か壁にぶつかると、超え方がわかってくるので、なんとなくマスターしてきます。
また、パターン化が見えてくるので、そのパターンに沿って解決していくと何通りかのストックが出来るので便利ですよ。僕はそれで「今回は前回のあれに似ているからこうかな?」というのがだいぶわかってきました。
推進力をアップするためには、とにかく実力をつけることだと思います。
相手を巻き込むためには自分の信頼銀行に預金がないと厳しいと感じています。
僕は貯蓄マイナスなので、そのあたり厳しいと感じています。周りからどう思われているかもわからない、というのも危険です。
ヒアリングして、自分はどう見えているのかを認識することはとても大切だと感じました。
さいごに
今後もエンジニアになるべく、もっともっと修行が必要ですが、その過程でぶつかること多々あると思います。
1つずつ着実に解決できるよう、そして応用できるよう精進していきたいと思います。