エンジニアを志し、本やインターネットで自己学習をしてみたもののゴールが見えずに挫折…そんな経験がある方、あるいはこれから経験をするかもしれない方は世の中に多いのではないでしょうか?
そうした事態を防ぐべく、エンジニアを目指すにあたって「最も効果的な学習方法とはなにか」について、クラウドエンジニアであり企業研修講師を勤める古里栄識さんにご説明をいただきました。(アンドエンジニア編集部)
はじめに
多くのプログラミングスクールやエンジニア学習法が乱立する中、「最も効果的な学習方法とは?」というテーマは、これからIT業界に転職する方、これからエンジニアを目指す方にとっては気になるテーマなのではないでしょうか?
筆者は、
・少しでも早く成長する勉強法を知りたい。 ・確実に成長する勉強法を知りたい。 ・未経験でも挫折しない勉強法を知りたい。
という初学者エンジニアの悩みをたくさん伺ってきました。
企業のエンジニア講師やプログラミングスクールでの指導を通じて、数千名を見てきた筆者が語る「失敗しないためのエンジニア学習ロードマップ」をお読みください。
目指すゴールはどこか?
まずは、ゴール設定が大切です。 皆さんは、エンジニアの職種をいくつご存知でしょうか?
エンジニアと一言で言っても以下のように、多種多様な職種があります。 厄介なことに、これらには厳密な定義はなく、フルスタックエンジニア(なんでもできるエンジニア)なんて呼び方すらも存在しています。
・フロントエンドエンジニア ・バックエンドエンジニア ・iOSエンジニア ・インフラエンジニア ・データサイエンティスト ・ホワイトハッカー ・クラウドエンジニア
しかし、これでは皆さんは困ると思いますので筆者なりに分けてみました。 昨今のエンジニア市場、エンジニアスクール市場を見てみると大きく二つに大別できると考えております。
1. ウェブ制作をするエンジニア Web制作として綺麗なHP等の制作を行えるようになる。
2. システム開発をするエンジニア エンジニアとしてシステム等の開発できるようになる。
それぞれに求められるスキルは
【ウェブ制作の場合】 ・HPのデザインスキル ・XDやFigma等のデザインツールを扱うスキル ・HTML/CSS/jQuery等の簡単なコーディングスキル ・WordPressを扱うスキル
【システム開発の場合】 ・プログラミングスキル(Python,Ruby, Javascript, Java,,,,) ・ネットワークの知識 ・Linuxシステムの知識 ・クラウドの知識(AWS/Azure/GCP) ・データベースの知識 ・Docker/k8s ・Rest API/GraphQL ・設計概念(オニオンアーキテクチャー、クリーンアーキテクチャー)
その他にもたくさんあるかと思います。
ご覧の通り、「ウェブ制作」と「システム開発」では求められる知識が全く異なります。どちらかと言うと、ウェブ制作は「デザイナー」「マーケター」の領域に近く、システム開発は「コンピュータの世界」に近いと考えています。
よって、ウェブ制作に関しては「エンジニア」という趣旨から少しずれると思いますので、今回は、「システム開発をするエンジニア」をゴールとしてお話しします。
世の中にある大きな誤解
昨今のプログラミングスクール市場を見ていると、「3ヶ月-6ヶ月」の期間でエンジニアになるという文言をよく見ますが、これは大きな誤解であると思っております。
確かに、6ヶ月ほどの学習でIT業界に転職することは可能ですが、皆さんにとって転職は「ゴール」ではなく、「スタート」であるべきだと考えています。特に、近年のIT業界の進展は非常に激しく、去年まで動いていたプログラムがバージョンアップデートのために動かなくなってしまうなんてこともありえるのです。
3ヶ月程度で身につけた知識では、すぐに時代に淘汰されてしまいます。
従って、私たちは、目先の技術の使い方(例えば、APIの使い方、フレームワークの使い方)を覚えるのではなく、いついかなるときにも応用できるITの基礎力を身につけていく必要があると考えています。そして、この基礎力は決して「3ヶ月-6ヶ月」では身につきません。少なくとも1年以上の継続的学習によって身に着けることができると考えております。
筆者は、このIT基礎力を「ITの基礎概念」と定義することにしました。 以下、基礎概念に関するお話しをさせて頂ければと思います。
ITの基礎概念とは?
筆者が定義するITの基礎概念とは大きく4つの領域に分かれます。
・ネットワークに関する知識 ・サーバー管理(UNIX)に関する知識 ・プログラミングに関する知識 ・ウェブに関する知識
こちらに、ネイティブアプリ(スマホアプリ)に関する知識も含めてもよかったのですが、ネイティブアプリ開発に一生触れない人もいるかと思いますのであえて抜いています。
これらの知識がなぜ重要であるかというと、ネットワーク・サーバー管理・プログラミングスキルについては、この10年でほとんど変わっていない技術なのだからです。例えば、近年流行っているようなDockerやk8s、vue.js/react.js、Django/Laravelのような知識は、流行に左右されます。今後10年は流行の中にいたとしても、今後20年の話をすると正直わかりません。もっと便利な技術が存在しているかもしれません。
つまり、流行ばかり追っていては本質的な知識をおろそかにしてしまうことになります。
基礎概念に代表されるような知識は、この20年に関して、さほど進化していない状態にあります。(革新的・破壊的な変更が少ないという意味です。)基本的な技術、概念であるため、これ以上進化しようがないといのも1つの理由でしょう。
さらに、新技術というものは、基本的には従来の技術をいくつか組合わせた物であることが非常に多いです。新しい技術は、意外と新しくなかったりします。
従って、皆さんは基礎概念をしっかりと押さえておくことによって、今後数十年とエンジニアで食べていくための知識を身につけていってほしいと思います。
どの順番で基礎概念を学ぶべきなのか?
こちらの順番は、筆者が数百人の受講生にテストし実験した結果、導き出したものです。
- ネットワークに関する知識を学習する
「インターネットはなぜ繋がるのか?」を自分の言葉で説明できるようになるのが目的です。OSI参照モデルやTCP/IPのような基本的なネットワークの知識を押さえた上で、それらの知識を繋げて考えられるようになれると合格です。
- Linuxコマンドを練習する
Linuxコマンドの練習をしましょう。ここでは、「環境構築」と呼ばれるプログラミング言語のインストールやデータベースのインストールについて学びましょう。なぜLinuxの知識が必要かというと、何かのサービスを開発する際に、環境構築はきっても切り離せないからという理由が一つ。そして、AWSやAzure、GCPなどのクラウドサービスを利用する時には、環境構築の知識がないと詰まることが非常に多いからです。筆者の体感では、90%の初学者エンジニアの皆さんがこの「環境構築」でハマります。ここを突破できるようになれば、一気に学習の幅が広まると考えています。
ちなみに、Linux系の学習はEnvaderというサイトで学習できます。
- プログラミングの勉強をする
一般的な学習カリキュラムでは、プログラミングから教えることが多いと思うのですが、筆者はネットワークとLinuxを学んだ後でプログラミングを学ぶことをお勧めします。ここで注意しておきたいのが、いきなり複数の言語を学習しないことです。まずは、なんでもいいのでプログラミング言語を一つ決め、その言語だけを極めるつもりで学習しましょう。筆者おすすめの学習方法は、まずは本を1冊購入して、全部読みます。まだPCは触りません。本を読み切ってなんとなく概念がわかってきたらProgateというサイトを利用します。初めのうちは、毎日エラーにぶつかり、時間をロスしがちなので、先に本で知識のみインプットすることをお勧めしております。
- ウェブの勉強をする
ウェブと言っても非常に幅広いので、「ウェブを構成する技術を学ぶ」と理解してください。例えば、データベース、http通信の細かな仕様、Cookie、Session、XSS、CSRFなど幅広い知識を学習します。この時に、1-3で学んだ知識がおそろかになっていると大幅に苦戦することになるでしょう。
まとめ
以上のように、学習を重ねることで皆さんは「一生」使える技術を手に入れることができるでしょう。冒頭にも申し上げましたが、これらのような技術を網羅することは非常に大変です。完全未経験からでは、確実に1年以上の時間がかかると想定しております。
しかし、逆を言えば1年しっかりと学習を続けられれば、比較的多くの企業で通用するスキルが手に入るのです。もちろん、その他のソフトスキルや、開発経験によってのみしか培われない一種の経験的スキルもございます。
しかし、全てのIT知識の根底には、この4つの基礎概念があると思いますので、ぜひ実践してみることをお勧めします。
ライター
編集部オススメコンテンツ
アンドエンジニアへの取材依頼、情報提供などはこちらから