100日後にエンジニアになるキミ - 2日目 - 学習方法について

#2日目 - 勉強方法について

ITエンジニアは誰でも成れると思います。

ただし、エンジニアとして続けていくことが出来るかどうかや
うまくいくかどうかは勉強方法にかかっています。

日々新しい技術が出てきて
それに着いていかなければなりません。

知識を身につけて
それを実践出来るようにならなければ
エンジニアとして生き残ることは難しいでしょう。

と言うわけで
今回は勉強方法についてお伝えします。

かなり昔、何も考えずに仕事をした場所が
システム開発の現場だったりしました。

そこではテスターとして雇われていた訳ですが
周りの人が何をやっているのか
その当時は全く分かりませんでした。

・どうすれば良いのか
・何を勉強すれば良いのか

そこら辺が最初の壁になると思います。

ここではシステム開発をする人向けに
何から始めていけば良いのか
どう言う勉強すれば良いのか
と言うのをやっていきたいと思います。

#何から始めようか

## step01 - コンピューターの基礎知識を身につける
ITエンジニアに関して言えば
コンピューターの上で動くソフトウェアを開発したり
コンピューターにまつわる仕事をする訳です。

まず最初はコンピューターに関わる部分知識から
身につけていきましょう。

手元にコンピューターがないと難しいと思うので
端末選びや操作方法、ソフトウェアのインストール方法などから
覚えるのが良いでしょう。

ある程度コンピューターを扱えるなと思ったら
次にプログラム言語を覚えてみるのが良いと思います。

ただ、プログラム言語よりももっと簡単な
マークアップ言語というものがあります。

## step02 - HTMLを覚えてみる
プログラム言語をやる前にHTMLなどの
マークアップ言語を使ってコーディング(プログラムのソースコードを記述すること)
というものを体験してみましょう。

HTMLの段階で難しいと思ったら
あなたはエンジニアには向いていないので
そこで勉強をやめ、他の職業につくことをお勧めします。

HTMLは大丈夫そうだと思ったら
次はCSS(+@ Javascriptの一部)に手を出してみます。

後日掲載しますが
ここら辺まで来ると、覚えることも多くなり
難易度も上がってきます。
勉強についてこれたらならエンジニアになる素質はありそうです。

次はプログラム言語を学んでみましょう。
ここからは選択肢が出てきます。

始めて覚えるプログラム言語です。
プログラミングを続けていけるか挫折するかが
ここで決まります。

## step03 - プログラミングを覚える
Google3大言語というものがあります。

Google社で社内標準として使われているプログラミング言語で
C++、Java、Python だと言われています。

もしこの中で初めてやるなら
自分はPythonをお勧めしています。

理由としては
・自分が今Pythonで仕事をしている
・人気がある言語である
・文法が難しすぎない、覚えやすい

ということが挙げられます。
なので、後日Python言語の講座をお送りします。


とは言っても、自分が初めて覚えたプログラム言語はJavaです。
当時Ver1.3とかVer1.4くらいだったかと思います。

ただ、今は仕事でもプライベートでも
Javaを全く使っていません。

プログラム言語には流行りスタリがあるので
エンジニアは生涯、複数言語を覚えることになります。

自分はPythonをメインで使っています、その他に
Javascriptを使っていて、ゲーム作りをしていた際はC#
アプリ作りをしていた時はJavaとSwiftを使っていました。
Webサイト作りをしていた時はPHPも使っていました。

用途に合わせて、その用途にあった言語を用いていくのが
普通だと思うので、言語を覚えるというより
プログラミングを覚えるということが重要かなと思います。

基本を抑えれば、他の言語にすぐ応用が効きます。

## step04 - データベースについて勉強する

次に覚えることはデータベースについてです。
現在稼働しているアプリケーションのほとんどは
データベースを用いています。

ユーザーデータを貯めたり管理したり
データベース無しには実現することが出来ないことが多いです。

データベースとそれを操作するための言語SQLについてを
学ぶのが良いでしょう。

## step05 - サーバーについて学ぶ

ITエンジニアでもない限り
普段サーバーを使ったことがない人たちがほとんどのはずです。

世の中で出回っているほとんどのアプリケーションは
サーバー上で稼働しています。

データベースも、ソフトウェアも全てその上で動いています。

なので、開発をするにもサーバーの上で動くようにしなければならないので
サーバーを操作する方法を学ぶ必要が出てきます。

ほとんどのサーバーがLINUXというOSの上で動いているので
LINUXの操作方法を学ぶということになります。

操作はコマンドというものを用いますので
コマンドの使い方を覚えるということと同義になります。

ここまできたら、サーバー上でアプリケーションを動かせるようになるでしょう。

加えてネットワークの知識なども押さえておきましょう。

## step06 - クラウドについて学ぶ

サーバー上で動くプログラムを開発するのには
昔はサーバーを買わなければなりませんでした。

今ではクラウドサービスというものがあり
レンタルサーバーなど、様々なサービスを使うことが出来ます。

余程のことがないかぎりサーバーを自分たちで用意することは稀です。
大手のIT専門の会社ですらも
自前で用意せず、クラウドサービスを借りる方針に切り替わってきています。

開発の主流がクラウドサービスを用いて開発する手法に
切り替わってきたため、主戦場であるクラウドサービスの知識を
習得しておく必要があると思います。

## step07 - 開発手法について学ぶ

システムを開発の方法に関しては
昔はウォーターフォール型という手法で開発が行われていました。

今ではアジャイル型という手法もでてきて
チームで開発をするという手法も変わってきています。

チームで開発をするに当たっては
ソースコードの管理方法も重要です。

ソースコードの管理では
gitという管理ソフトウェアを使うことが多くなってきましたので
ソースコードの管理方法なども併せて
開発の手法を学ぶと良いでしょう。

ちなみにgitとgithubは全くの別物です。
似ていますがJavaとJavascriptくらい違います。

開発ではソフトウェアが正しく稼働しているかどうかをみるのに
ログと言って稼働状況の情報を出力して
稼働チェックをしていたりします。

そう言ったロギングについても
押さえておくと良いと思います。


## step08 - テスト手法について学ぶ

お勉強をしている時は一人で開発することがほとんどですが
業務での開発になると、複数人で開発することになります。

その場合は、必ずプログラムが正しく動くかどうかをチェックするための
テストを行います。

テストの工程も複数存在します。

開発者側の観点からいくと
・単体テスト
・結合テスト
・システムテスト

顧客側の観点では
・受け入れテスト
・ユーザビリティーチェック

テスト内容の観点だと
・ブラックボックス
・ホワイトボックス

その他
・セキュリティーテスト
・負荷試験
etc

などなど、色々な観点でのテストがあり
これらを全て網羅して行わないと
製品として出荷ができないわけです。

テスト手法について学び、抜け漏れが無いようにチェック出来ないと
ソフトウェアの品質を保証することができません。

## step09 - 押さえておいた方が良い知識を身につける

システム開発をするには
他にもたくさん押さえておかないといけない事があります。

例えば、昨今では大量のデータを取り扱う事が多くなってきています。
ユーザーが増えるほど、その大量のデータを素早く処理する手法を覚えておかないと
結構大変です。

データの取り扱いでは、アルゴリズムなんかも関わってきます。
ここら辺になると、数学的な観点での勉強が必要になってきます。

データは文字列で構成されており、文字列パターンを効率良く取り扱うには
正規表現というものも重要になってきます、覚えておくと、全然違います。

昨今ではデータを用いた機械学習と、それを用いたAI開発が
ブームになっています。
その動作原理だけでも押さえておくと良いでしょう。

機械学習を学んだ事がない人が100日で
データサイエンティストになるのは難しいでしょう。

ただ、データサイエンスを学んだ事がある人であれば
100日後にデータサイエンティストにはなれるかもしれません。


ゲーム作りをしたい人にとっては
ゲーム専門の知識が必要になってきます。
ゲームエンジンなどの知識や、VRなどの専用端末の知識なども
押さえておく必要があります。

そして、これから流行りそうな技術というのについて
知っておくことも重要です。

## step10 - その他について色々学ぶ

ここが最後のstepですね。
システム開発に関わらず、人として社会で働くために
必要になるであろう知識を学ぶといいと思います。

コスト
マーケティング
SNS
業務知識
業界知識
ロジカルシンキング
マネジメント力
交渉力
提案力

ここら辺のキーワードを押さえておくと
良いんじゃないかなというキーワードです。
最後の方に余力があったら調べてみてください。

転職の方法についてなんかも
お伝えしようと思います。

まとめです。


step01 - コンピューターの基礎知識を身につける
step02 - HTMLを覚えてみる
step03 - プログラミングを覚える
step04 - データベースについて勉強する
step05 - サーバーについて学ぶ
step06 - クラウドについて学ぶ
step07 - 開発手法について学ぶ
step08 - テスト手法について学ぶ
step09 - 押さえておいた方が良い知識を身につける
step10 - その他について色々学ぶ

#勉強法について

現在では学習方法も色々な選択肢があります。
昔は書籍も少なく、Google検索しても有益な情報も少なく
かなり大変でした。

現在では学習サービスが充実しているので
それを使わない手はありません。

ここではITエンジニアになるための
幹の部分しか触れません。

枝葉の部分は御自身で補完してもらうしかないです。

そのための勉強方法としては
以下が考えられます。

## 書籍を買う

もっともベーシックな方法です。
プログラム言語によっては何100冊も本が出ていて
本を選ぶのに迷ってしまうと思います。

本屋に行ってみて、棚のはじから終わりまで読んでみましょう。

その中で一番分かりやすいと思える本を買うのがいいでしょう。

なるべく情報量の多いものが手元に一冊あると
足りない知識を補うのにすごく役立ちます。

最初に選ぶコツとしては

オライリー　か　オライリーじゃないか　です。

初めての一冊にオライリーの書籍はオススメしません。
慣れてきてはじめて、オライリーに手を出せるようになります。

そこだけ注意して見てみてください。

## 公式サイトをみる

新しい技術でも、プログラム言語でも公式のドキュメントが存在します。

技術者であれば、まずは公式サイトを覗いてみることから入ります。

ただし、こういった公式サイトの多くは英語だったりしますので
英語が読めないと先に進めなかったりしますが

英語に抵抗感があるのであれば
エンジニアとしてやっていくのは難しいと思うので
英語のない職種に転職をオススメします。

また公式サイトだけでの勉強は少しハードルは高くなりますが
一番最初に情報が載るのはやはり公式サイトであるので
書籍などど合わせると効果的だと思います。

## 動画講座を買う

次に良い選択肢として
オンラインの動画講座を買うというものです。

[Udemy](https://www.udemy.com/)

というサイトがあります。

ここでは様々な動画講座を販売しています。
プログラム言語の学習方法、機械学習、システム開発etc

自分は隣の席の人に勧められて
Python言語の講座を買いました。
当時の価格で2400円くらいです。

それで今仕事ができているので
非常に安い買い物でした。

Udemyの講座は質の高いものが多く
動画であるために、知識への定着率が良いように思えます。

実際に動画を見ながら、一緒に手を動かせば
機能が同じように実現できるのですから
分かりやすいです。

セールの際に買えば最低価格1400円くらいにもなるので
非常にコストパフォーマンスが高いです。

## 人に教える

人に教わるでなく、教えた方が実は自分の知識力などが向上します。

教わるは受動的であり、一部の知識が抜け落ちてしまいます。

しかし教えるには全てを網羅しておかないとイケナイため
そのために必死になって覚えないと行けません。

人前で発表したり、マンツーマンで教えたりするには
それなりに自分をスキルアップさせる必要があるので
人に教えると、教えていない時よりも格段にスキルアップします。

ある程度覚えたら、それを人に教えてみましょう。
教えた人が出来るようになったら
それは自分が間違っていないという証明にもなります。

教えるという勉強法、これを試してみてください。

## 一緒に勉強する

一人での勉強はつまづきがあるとそこで挫折しがちです。
でも勉強を一人でなく、仲間と一緒にやることで
その壁を乗り越えることができると考えます。

是非、一人でやるではなく、仲間を集めてみましょう。
分からないことは皆で共有して、解決したら
それも共有しましょう。それが全員の財産になります。

## メンターをつける

一緒にやる人がいなくて一人でしか勉強できる環境にない場合でも
メンターをつけるという選択肢があります。

メンターとは意味合いとしては指導者、助言者ですが
平たく言えば家庭教師ですね。

現役のエンジニアとして活躍している人に
メンターになってもらう。

これは自己学習をするよりも
学びがあることだと思います。

レベルの高い人たちの中に入ることで
スキルアップを目指す方法です。

一つの欠点としては
良いメンターに会うことが大変だということです。

探すこと自体の難しさがあることと
費用もそれなりにかかることが想定されます。

最近では企業のインターンシップ制度などもあり
現役のエンジニアにメンターについてもらい
学習できる環境を提供してくれている会社さんもあります。

Gunosyさんみたいな会社さんは
良くインターン募集をしています。

倍率が高く
採用される確率は低いかもしれませんが
応募してみるのも一つの手です。

## スクールってどうなの？

システムエンジニアになるのにスクールに通うという選択肢もあります。

個人的にはあまりオススメはしません。

自分はスクールに通ってました！！！！！
そこでJavaやLinux、SQLなどを学んでいました。

でも費用は1年間の学費で100万円ほど支払っています。

あまりにも、コスパが悪すぎるんです。

これが10万円くらいなら全然いいと思いますが
プログラム言語を1つ覚えるのに数10万円払うのは
コスパが悪すぎます。

今ならUdemyの講座を10個買っても3万円ほどでしょう。

おそらくスクールで習えることの密度よりも
Udemyの講座10個の方が上でしょう。

スクールに通うメリットもあります。
それはお金を払ったから勿体無いと思う　ということです。

お金を払ったら、元を取りたいという心理が働くので
やる気は向上するでしょう。

また、ある程度のカリキュラムの質もみこめるので
時間を買うということの意味もあります。

お金に余裕があって、めんどくさいのが嫌な人は
スクールのカリキュラムに乗っかるのもいいでしょう。

でも、新しい技術が出てきた時って
都度スクールに通っていたら破産しちゃいますよね。

だから、自分の力で学習する、解決するということが
必要不可欠になってきます。

こういった部分はエンジニアリング力ということになるので
スクールに頼らずに覚えられた方が
お金も節約できるし、いいことづくめだと思います。

## まとめ

オススメの勉強方法としては

・書籍を買う
・公式サイトをみる
・動画講座を買う
・人に教える
・一緒に勉強する
・メンターをつける

以上になります。

格学習項目の詳細についてはまた後日やって行きますので
学びたい方は覗いてみてください。


君がエンジニアになるまであと98日


#作者の情報
乙pyのHP：
http://www.otupy.net/

Youtube：
https://www.youtube.com/channel/UCaT7xpeq8n1G_HcJKKSOXMw

Twitter：
https://twitter.com/otupython