いつもXでmondの回答拝見して参考にさせて頂いたいます。

今回初質問になりますが、よろしくお願い致します。

相談内容は「どうすれば自分がわからない部分を言語化して自分で解決して理解できるようになるか」です。

自分は普段Webアプリケーション開発に従事しておりエンジニア歴は6年目になります。

簡単なCRUDのAPIを実装したり、フロントエンドで画面を構築はできるつもりです。

しかし、少しでも知識の深掘りが要求されると途端につまづいてしまいます。

例としてパフォーマンスの高いSQLを書けるようになるためRDBMSにおけるB-Tree Indexの仕組み(なぜインデックスを貼るとクエリ処理が早くなるのか)を勉強したものの、どんな入門書やネットの解説記事、各種RDBMSの公式リファレンスを読んでも理解出来ませんでした。

他にもRDBだけでなくアルゴリズムとデータ構造やネットワークなどあらゆる分野で少し難しいレベルが要求されると何が分からないのかが分からず八方塞がりになってしまいます。

そんな状態がここ2,3年続いており、自分のエンジニアとしての技術レベルが停滞しています。認めたくないものの自分のエンジニアとしては限界なのかもしれないと感じています。

もちろん、他の方が自分の何倍も技術に向き合われていて単に自分の努力不足であることは承知しております。

しかし、「何を勉強しても何を勉強しても何が分からないのかを言語化できず、自学自習のサイクルを回せない」のではエンジニアとして失格であると考えています。

しかしエンジニアであることを諦められないため、「どうすれば自分がわからない部分を言語化して自分で解決して理解できるようになるか」をアドバイス頂きたいです。

お手数おかけしますがお手数おかけしますが、ご回答頂けますと幸いです。

基礎を学びましょう。

CPUやOSの仕組み、そしてそれを利用して動くRDBMSはどういう原理なのかを学べば「なぜインデックスを張ると速くなるのか」などは自明に感じられるようになります。

何がわからないのかがわからない場合、経験上では対象物に対する脳内モデルが完成していません。脳内モデルというのは常に完璧でなくても構いません、これまでに学んだ知識と実際の挙動について自分なりに納得の行く説明をつけられるようにすることでモデルの精度を高めていく事ができます。そして眼の前のソフトウェアが自分のモデルから乖離した動きをするたびにそのモデルを修正する、そのサイクルをアマチュアもプロも回し続けています。

脳内モデルといっても大仰なものではなく、例えば自動車を運転していれば「ハンドルを回せば前輪の向きが変わる」とか「走るにはガソリンが必要」とか「アクセルを深く踏むと速くなる」ぐらいの挙動に対して説明がつく程度の解像度でなら誰しもが無意識に脳内に持ち合わせているはずです。自動車の中身を生業にする人でないなら深入りする必要はありませんが、自動車のエンジニアとして生きていくのであればそこから深入りしていく必要があります。

ここでまた僕の好きな本である「禅とオートバイ修理技術」から一節を引用します。

そもそも彼らがオートバイに乗り始めた動機というのも、新鮮な空気と陽光に満ち溢れた田舎へ出かけてゆくことによって、テクノロジーから逃れることであった。ようやく逃げのびたと思っているそのときに、再びその場でテクノロジーを持ち出されることは、二人にとってひどく意気をくじかれることになるのだ。だからテクノロジーに関する話になると、いつも会話が途切れて、冷たい空気に包まれることになるのだ。(中略)明確には定義し難いが、テクノロジーを生み出すある種の力、いわば非人間的なもの、機械的なもの、生命を持たないもの、目に見えないモンスター、死の力、といったものがその正体であろう。彼らは決して逃れられないと知っていながら、何かそうしたぞっとするようなものから駆け足で逃げているのである。

テクノロジーとの向き合い方ひとつとっても、この二人(ジョンとシルヴィア)のようにテクノロジーの詳細からは逃げ続ける生き方もあります。しかし、ソフトウェアエンジニアとして生きていくのであればテクノロジーという非人間的で機械的な目に見えないモンスターと戦う覚悟を持ち合わせる必要があります。幸いなことにこのモンスターとの戦い方については定石があります。

「どうすれば自分がわからない部分を言語化して自分で解決して理解できるようになるか」という問いに対してですが、わからない部分を言語化する為のフォーマットを持ち合わせてないに過ぎないのではないかと思います。つまり物事がわからない時に「わからない」とだけ言うのではなく例えば「今の私の理解が正しければ○○になるはずなのに、実際のところは△△していて変だ。私の理解のどこからが間違っているのかがわからない」と言い換えるように努力してみてください。そうする事でその「理解」のどこから現実とのズレがあるかを探索するステップに進む事ができます。

ソフトウェア開発中に遭遇する謎挙動のほとんどは経験上使っているライブラリやフレームワークや言語に対する理解の欠如であることが多く、それらを深堀りしていくと遅かれ早かれOSなどの低レイヤーな問題にぶつかります。そこに対してもさらに深堀りを重ねていけるエンジニアこそが質問者様のいう「限界」がより高いエンジニアです。その低レイヤーを学ぶためにはつい最近発売されたBinary Hacks Rebootedが大変おすすめなので是非手にとってみてください。

2か月

利用規約プライバシーポリシーに同意の上ご利用ください

熊崎 宏樹さんの過去の回答
    Loading...