2024.12.02
徹底的に基礎を学ぶと、いろいろなことが分かってくる。あらゆる知識の土台になる「基礎概念」を固めよう
#LinuCレベル1 #エンジニア育成 #新人教育 #未経験者
株式会社var
代表取締役 CEO
古里 栄識 氏
日を追って進化し、さらに高度化するテクノロジーの中で、「なに」を「どのようなステップ」で「どうやって」学習すれば一人前のITエンジニアに成長できるのか。キャリアアップの意欲はあるのに、それをどう伸ばしたらよいか悩む若手エンジニアは少なくない。クラウドエンジニアとして、またIT技術の教育者として活躍中の、株式会社var代表取締役 CEO古里栄識氏は、「新しい技術や特定の領域にばかり目を向けるのではなく、基礎を徹底的に学び、自分の中に『基礎概念』を育てることが将来の成長につながる」とアドバイスする。その詳しい考え方や学習法について、講演からダイジェストでご紹介しよう。
目次
何もできない自分にショックを受けて、「ゼロから勉強し直そう」と決意
私は、現在はクラウドエンジニアとしてWebセキュリティ領域を手がけていますが、元々はWebのバックエンドからスタートして、その後セキュリティに移りました。警視庁のセキュリティ対策の講義など、貴重な経験もさせていただきました。その後AWS Japanに入社してクラウドの世界を体験し、現在のvarを立ち上げました。そうした私の経験の中から、皆さんの参考になることをいくつかお話ししたいと思っています。
今日は初級ITエンジニアやエンジニア志望の方が対象のセミナーなので、私も自分のキャリアをスタートした当時の話から始めたいと思います。始まりは学生の時、Web系のインターンに参加して、そこでCakePHPというオープンソースのWebアプリケーションフレームワークがありますが、そのバックエンドのプログラミングを担当しました。ところが全く知識がなくて、5時間かかってもわずか5行しかコードを書けなかったんです。
周りには、同じくらいの年ですごく優秀な方もいます。なのに、自分はこれではいけないとCakePHPの入門書を頑張って読んだりしたんですが、1カ月経っても全然理解できない。とことん自分の実力を思い知らされて、「これではダメだ。もう一度、ゼロから勉強し直そう」と思いました。これが、私の現在につながる大きな転機になったのです。
さて「もう一度勉強し直そう」と思って、それでスムーズにいけば苦労はありませんが、むしろ勉強の仕方では、他の人より試行錯誤したのではないかと思っています。それでもなんとか自己流で始めた、当時の私の勉強法を少しお話ししましょう。
ひとことで言うと、基本から徹底的にやり直しました。どれくらい基本かと言うと、例えば「http://」って、そもそもどういう意味なんだっけとか。あるいは、ふだんの仕事で「Linuxコマンドでポートを開放して」と指示されたのはいいけれど、何を言われているかわからなくて、「じゃあ、そもそもLinuxって何だっけ?」とか。教科書の1ページ目みたいなところから調べて、納得のいくまで理解するようにしたんです。
例えばデータベースにしても、単にSELECT文やINSERT文を「使える」だけではなく、「データベースを速くする方法は?」「JOINの実行って、どうすれば効率よくできるのか?」といった、「使いこなす=チューニング」のレベルまで徹底して勉強し直しました。
そうやって勉強していった結果、摩訶不思議ですね。CakePHPが分かるようになり、プログラミングもできるようになりました。あれだけ入門書を熱心に読んでも理解できなかったのが、なぜかこの「基本を徹底的にやり直す」ことで理解できるようになったんです。
このセミナーに参加されている方は、すでに現場で仕事をしている方も多いと思いますが、皆さんもそんな経験はありませんか。今まで全く理解できなかったことが、3カ月後に見直してみたら、「なんでこんなことがわからなかったんだろう?」と思うくらい簡単に理解できてしまったといった経験。というのも実は、この変化の理由を客観的に理解することが、効果的な勉強を進めるポイントであり、今日、私がお伝えしたいメインテーマでもあるからなのです。
1つのことを理解するには、その土台となる複数の知識が必要という「法則」
私は、上の「基本を徹底的にやり直す」勉強法を通じて、「知識を本当に理解し、身につけるための法則」を発見したと思っています。その法則とは、「知識Aを理解するためには、知識B、C、Dという土台が必要だ」ということです。
例えば、IPアドレスというものを勉強する時には、その前提としてOSI参照モデルとか、あるいは住所ってどんな考え方なのか、さらにネットワークってそもそも何なのか……といった知識を知っておかなくては、なかなか前に進めません。
ところが私たちは往々にして、「知識A」を勉強する時には「知識A」だけを勉強してしまいます。それで「こんなに頑張っているのに、知識Aの理解がどうにも進まない」という時は、上の法則のように「知識B、C、D」といった、知識Aを理解するに必要な知識が足りないのかもしれません。わかりやすいように、具体的な例を挙げましょう。
最近の注目の技術に、コンテナによる仮想化のプラットフォームであるDockerがあります。このDockerが難しいという方が結構いるんですが、実はそういう方たちはネットワークのことが分かっていないケースがほとんどです。
同様に、そういう人はLinuxにも弱い。そもそもDockerというのはLinuxのOSの機能を使ったアプリケーションなので、LinuxがちゃんとわからないとDockerを本当に理解するのはまず無理なんです。
さらにもう1つ、「仮想化とは、どういう考えに基づいて実装されているのか」という基本を勉強していない人が、非常に多いと感じています。だから、もし「Dockerって難しい」と感じたなら、自分のネットワークの知識を見直して、弱い部分を徹底的に勉強してみてください。それができたら、そんなにDockerを難しいと感じなくなるはずです。
これはどういうことかと言うと、ITの新しい技術は、既存の技術の組み合わせであることが多いからなんです。だからDockerだけを勉強しても、いつまでたっても理解できない。でも、そういう間違いを犯している人は非常に多い。例えばクラウドの知識が必要だとなると、じゃあAWSを勉強しようとなりがちです。でも、これはお勧めできません。というのもAWSというのは、いわゆるオンプレミスの拡張版だからです。
オンプレミスで進化してきた技術の延長線上に、クラウドもあるのです。だからAWSを深く理解しようとしても、オンプレミスの物理的なサーバーなどの世界が理解できていないと、掘り下げていくことができない。同様に、上のDockerやあるいはkubernetesのような最新の仮想化技術にしても、長年にわたって進化してきたインフラやプログラミングの知識の土台がないと、簡単には理解できないということを知っておいてください。
「基礎概念」を構成する7つの分野を、広く厚く固めていくことが大事
上でご紹介した、最新の知識を理解する土台となるものを、私は「基礎概念」と呼んでいます。いわゆる基礎知識とはちょっと違う、個々の知識をつなげた「考え方」みたいなものと言えばいいでしょうか。この基礎概念という土台を高く厚く積み上げるほど、その上に乗ってくる新しい知識や、よりハイレベルな知識がすごく簡単に理解できるようになるのです。
では、この基礎概念というのは、具体的にどんな知識を指すのか。私なりに、7つに分類してみました。例えばWebシステムなら、単にログインできて終わりではなく、「そもそもログインって、何でできるのか?」を、インフラやセキュリティの知識を用いて説明できる幅広い周辺知識(基礎概念)が求められてきます。そこまで究めて、知識は本当に使えるレベルになります。
あるいは「良いデータベースの設計とは何か?」という問いに対しても、単にレスポンスが速いとかではなく、アーキテクティング(設計)の観点から論じることができる知識が必要です。皆さんが興味ある最新の生成AIにしても、深く掘り下げていけば統計学や機械学習の話に行き当たるので、そういったこともしっかり勉強しておかなくてはなりません。そういう「土台=基礎概念」をしっかり固めていくほどに、難しいものがすんなり理解できるようになっていくでしょう。
もちろん、そこにたどり着くまでに根気は要ります。私の場合、上でお話しした基本の学び直しには、丸1年の時間をかけました。また直接Webアプリとは関係ない統計学の勉強なんていうのも、正直楽しいものではありません。でもそういう基本を積み重ねたからこそ、他の人なら1カ月かかる課題を1〜2週間で終えられるようになったと確信しています。
「資格」は、習得したい技術の知識をまんべんなく学べる最短のルート
「基本を勉強する必要があるのは分かった。でも、具体的にどこまで勉強すればよいのだろう?」と思ったかもしれません。その目安に使えるのは、やはり資格です。私はIT技術者の研修も手がけているので、生徒からよく「資格は取ったほうがいいんですか?」と質問されますが、もしその気があるなら取ったほうがよいと答えます。
とはいえ、ことさら難しく考える必要はありません。若い方はこれから自分のキャリアを作っていくわけですが、その時、履歴書に資格があると書いてあるのとないのでは、書いてあるほうがアピールできるに決まっています。それくらいの、「ないより、あったほうがいい」くらいのシンプルな捉え方がいいと思います。
また資格にもいろいろな種類がありますが、例えばLinuCにしてもAWS認定ソリューションアーキテクト-アソシエイト(SAA)にしても、資格というのはその技術に必要な知識を偏りなく、全体を網羅して学べる点が、基礎作りには非常に向いています。だからあまり難しく考えず、1つ1つの資格の勉強をしていくことが、「基礎概念」を構築していくうえでも有効なのです。そうやって必要な資格を取得して土台を十分に固めた上で、現場の仕事でリアルなプロジェクトを経験していけば、基礎知識と、その応用としての経験値もあわせ持ったITエンジニアに成長していけるでしょう。
個々の知識の寄せ集めでない「考え方そのもの」を身につける学習が大事
実際に私自身、その基礎概念を勉強した成果はどうだったでしょうか。ちょっと自慢になってしまうかもしれませんが、その後のキャリアは、自分でも驚くくらいトントン拍子に進んでいくことができました。
例えば、あるプログラミングスクールからは、「基本がしっかり理解できている」と認めていただいて、資料や開発環境まで全部作り直しを依頼されたり、大手企業の研修の講師に呼んでいただいたりしました。
また当時はまだ普及し始めたばかりの、大規模クラウドの内部の開発を担当する機会にも恵まれたのですが、この時はプログラミングとインフラの知識の両方を持っている強みを実感しました。面白いことに、インフラの世界で突き詰めて勉強すると、プログラミングの世界でも似たような話が出てくることがあるんです。
私が「基礎概念」という言葉を使っているのも、そういう「発見や出会い」があるからです。基礎概念では、個々の知識の集まりではなく、「考え方」そのものが大事です。例えば、ログインする時に「どういう通信の送り方をするのか」という知識が、別の認証システムを開発する時の通知の流れにもつながってくるとかですね。そういう基礎概念を自分の中に積み重ねて、厚い層を作っていくのにチャレンジしてみませんかというのが、今日の私からの提案です。
関連記事