こんにちは、かきぴーです。
「未経験からシステムエンジニアになるときにやったこと5選」でも触れましたが、僕は異業種からプログラミング未経験でエンジニアに転職しました。
当時の僕を思い返すと、プログラミング学習においてたくさんの疑問点をもっていました。
- 何から始めれば良いのか分からない
- どのプログラミング言語をやれば良いのか分からない
- どこまでやれば良いのか分からない
- 自分がやっている勉強が正しいのか分からない
ふりかえると、学習の地図みたいなようなものが欲しかったんだと思います。
今回は、PHPエンジニアとして1年半働いた経験を元に、当時の自分に送る「学習の地図」を作ってみます。
ウェブエンジニア視点なので、ウェブアプリの話に偏っていますが、プログラミング初心者の人は参考にしてみてください。
目的を決める
学習するときは、まず目的を決めるのが大事です。
プログラミングを学習してどうなりたいのか、考えてみましょう。
- システムエンジニアとして転職したい
- 副業として、ウェブ制作の仕事を受けたい
- 副業として、プログラミングの仕事を受けたい
- 自分のアプリを開発したい
- 自分のサービスを作って起業したい
- どうしても入りたい会社がある
- どうしても関わりたいサービスがある
ITと一言でいっても、めちゃくちゃ広いですし、何をしたいかで勉強することが変わります。
最初に作りたいものが明確だと、学習すべきことも明確になりますよ。
作りたいものがあるなら作ってみよう
もし、今の時点で、こんなサービスが欲しい!とかこういうの作ってみたい!というのがあるのなら、作ってみるのが一番勉強になります。
作っていく中で出てくる疑問を1つ1つ解消していくことで、一気に開発力がつきます。
以降は、
- いまのところ、特に作りたいものはない
- エンジニアとして転職したい
- エンジニアとして採用された後、困らないようにしたい
そんな人を対象にかきます。
「プログラミングとはなにか?」を知る
まず、「プログラミング言語」について理解しましょう。
プログラミングとは、コンピュータに指示を出すための、指示書を作成することです。
プログラミングをすることで、「〇〇にメールを送って!」「Youtubeを再生して!」「洗濯機を動かして!」などの具体的な動作をコンピュータに行わせることができます。
コンピュータは基本的に機械語と呼ばれる0と1の羅列しか認識しません。
ですが、人間は0と1の羅列を見ても何がなんだかわからないので、「プログラミング言語」という言語を使って指示を出します。
プログラミング言語は、「コンパイラ」や「インタプリタ」と呼ばれる翻訳装置によって、実行ファイルというコンピューターにとって理解しやすい形に変換されてから、コンピュータで実行されます。
あなた「メール送ってほしい」 →プログラミング言語で指示 →コンパイラ(インタプリタ) →実行ファイル →コンピューター「了解しました」 →メールを送る!
という形ですね。
なので、エンジニアとしてできることを増やそうと思ったら、プログラミング言語だけではなく、コンピュータに何ができるのか?ということも学ばなければいけません。
参考書籍:プログラムはなぜ動くのか
「サーバー」と「クライアント」の関係を知る
Webサービスを作るに当たって、次に知らないといけないのが「サーバー」と「クライアント」(フロント)の関係です。
Webサービスを動作させるには最低でも2台コンピューターが必要になります。
1つは、今あなたがこのブログを見ているコンピューター。
こちらを「クライアント」(フロント)と呼びます。
もう1台は、インターネットの先にあるサーバーです。
このブログの場合は、Xサーバーを使っていますね。
サーバーと言われてもなんだかわからないかもしれませんが、あなたのコンピューター(クライアント)から受け取った情報を元にページを作ったり、データベースを調べたりしてくれるコンピューターです。
クライアントでは、サーバーから受け取った情報(HTML/CSS,JavaScriptなど)を元に、画面に色々表示したりします。
Webサービスは、サーバーから送られてくるウェブページの情報を、あなたのパソコンが受け取り人間にわかるように表示することで動いているわけです。
- 「情報をどのように表示するか」を扱うのがフロントエンドの言語
- 「受け取った情報をどう処理し、何を返すか」を扱うのがサーバーサイドの言語
それぞれを専門にやっている人をフロントエンドエンジニアや、サーバーサイドエンジニア(バックエンドエンジニア)などと呼んだりします。
両方できる人はフルスタックエンジニアと呼ばれます。
参考サイト:「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
html , css , JavaScriptを勉強する
ここまで理解したら、実際にプログラミング言語を勉強してみましょう。
オススメは
- HTML / CSS
- javascript
- サーバーサイド言語1つ
にしぼって勉強することです。
それぞれ簡単に説明します。
HTMLは「HyperText Markup Language」の略で、ブラウザに文字や表を表示する言語です。
これは正確にはプログラミング言語ではなく、マークアップ言語と呼ばれています。ウェブページの骨組みになります。
CSSはHTMLで生成した画面を装飾するための言語です。
文字の色や大きさを変える、図形を書く、色々な要素の場所を変えるなどができます。飾り付けですね。
javascriptは、ブラウザ側で動くプログラミング言語になります。
特に通信を行わなくても画面を変更できたり、ユーザーが入力した値を元に計算したり、ポップアップを出したりできる言語です。
この3つができると、画像が切り替わったりするおしゃれなサイトを作ることができるようになります。
現代のウェブサービスは、ほとんど3つとも使われているので、ウェブサービスに携わるなら必須です。
サーバーサイド言語(Java , PHP , Ruby , Pythonなど)を1つ選んで勉強する
また、HTML/CSS、JavaScriptに加えてサーバーサイドの言語を1つだけ勉強しましょう。
サーバーサイドの言語で有名なのは、Java , PHP , Ruby , Python などです。
種類がたくさんあるので、つい複数に手を出したくなりますが、初学者のうちはとりあえず1つに絞って勉強してください。
「どの言語が良いんだろう?」と悩んでしまう人も多いですが(僕は悩んで全部手を出しました)、うえで書いたようにプログラミング言語とはコンピューターに指示を出す言葉です。
どの言語を選んでも、コンピューターにできることが大きく変わるということはありません。
(厳密には、言語ごとにコンピューターから引き出せる機能が違ってきたりしますが、初学者が気にするレベルではありません)
あえていうなら、狙っている就職先が使っている言語が良いでしょう。
各言語の特色は、
- Java→アンドロイドアプリ開発で使われている
- PHP→ワードプレスで使われている。多くのウェブサービスが作られている
- Ruby→一時期スタートアップで多く使われていた。
- Python→機械学習に強い。海外のスタートアップでよく使われている。
といった違いがあります。
狙っている就職先などがない場合は、今の時点で興味のある言語を1つだけ選んでチャレンジしてみてください。
プログラミング言語の勉強にはProgateがおすすめです。
また、実際に動くものを作ってみたい!と思ったらドットインストールをためしてみると良いでしょう。
いずれにしてもHTML/CSS と javascript と サーバーサイドの言語1つをちゃんと勉強するだけでもかなり大変なので、頑張ってみてください。
データベースについて学ぶ
プログラミング言語がかけるようになったら、データベースについて勉強しましょう。
データベースは、様々なデータを保管したり取り出したりできます。
イメージとしては、エクセルがわかりやすいでしょう。
(実際にはエクセルのようなテーブル形式のもの以外にも、色々あるのですがここでは割愛します。)
ウェブサービスを作る際には、エクセルではなく、サーバーから操作できるデータベースを扱うのが一般的です。
例えば、会員登録をするときの大まかな流れは下のようになります。
<新規登録> ユーザー(情報を入力)→ブラウザ(サーバーに通信)→サーバー(情報の形式があっているかチェック)→データベースに保存
<ログイン> ユーザー(IDとパスワードを入力)→ブラウザ(サーバーに通信)→サーバー(データベースを検索)⇄データベース(情報があればデータベースに)→情報が一致すればログイン情報をブラウザに返す
よく使われているのがOracleデータベース、MySQL、PostgreSQLなどです。
OracleDBは有料ですが、MySQLとPostgreSQLは無料でダウンロードできます。
これらのデータベースを操作する言語を、SQL文と呼びます。
SQLもProgateで勉強できるので、ぜひチャレンジしてみてください。
参考書籍:スッキリわかるSQL入門
HTTPについて学ぶ
HTTPはブラウザとサーバー間で使われる通信プロトコルです。
プロトコルとは「お約束ごと」という意味なのですが、ブラウザとサーバーが同じルールで通信をしなければ何を言っているのかわからなくなるので、HTTPという約束にしたがって情報を送っています。
会社や市役所などでなにか大事な手続きを進めるときは、決まった書式の用紙に必要な情報を書いて提出すると思います。
それと同じように、サーバーとブラウザの間でも決まった書式でやりとりしている、というイメージだとわかりやすいかもしれません。
HTTPがどんな形式なのか、どのように使われているかは軽くで良いから勉強しておくと良いでしょう。
参考サイト:「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
参考書籍:今夜わかるHTTP (Network)
セキュリティについて学ぶ
ウェブサービスは、BtoBのサービスと異なり多くの人の目にふれ、常に不特定多数のアクセスがあります。
大量の個人情報を扱っている場合も多いので、セキュリティについては最低限の知識が必要です。
経産省のHPに、セキュリティのガイドラインがあります。
一回読んでみると勉強になります。
参考サイト:経済産業省
綺麗なコードの書き方を学ぶ
チーム開発や大規模開発を行う場合、自分が書いたコードを他の誰かが読むことになります。
そのとき「汚い」コードを書いていたら、他の人がわからず開発に支障がでるでしょう。
なので、綺麗なコードを書く習慣をつけておく方が、現場では喜ばれます。
下の本が、一番わかりやすく書かれていますので、ぜひ一読してみてください。
参考書籍:リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック
「基本情報技術者試験」を受けると網羅的に勉強できるよ
もしIT業界のことを網羅的に学びたいなら、「基本情報技術者試験」の学習をおすすめします。
持っている人が多いので、「これを持っていたら年収大幅アップ!」みたいな資格ではありませんが、基本情報技術者試験の勉強をするとIT業界の全体像が一発でわかります。
資格自体じゃなくて、資格取得のための勉強が役に立つ感じです。
プログラミング言語のこと、ネットワークのこと、ハードウェア(パソコン自体)のこと、開発手法のこと、IT関連の法律、開発費用の算出方法など。
開発者や技術者だけでなく、営業の人とかにも役立ちます。
参考書籍:令和03年 イメージ&クレバー方式でよくわかる 栢木先生の基本情報技術者教室
全部できなくても良いので、できるところからやってみよう
今回書いたことを、すべて完璧にマスターしたとしたら、あなたは間違いなく即戦力になれます。
偉そうに書いてきましたが、僕もまだふわっとしかわかっていません。
業務を通して身に付けられる部分もあるはずなので、全部を100%こなそうとするのではなく、やれそうなところから学習していくのをおすすめします。
これからは、各分野についてもっと知識をつけていきたいなと思っているので、また学びがあったらどこかで共有しますね。
また書きます。
コメント