これからWebプログラミングを学習したいと考え始めた人が読むブログ

2024年3月11日

テクノロジー 学習 日記

eyecatch 先日終了したPodcastラジオ番組を最近聞いたリスナーの人から、お便りをいただきました。 ずっと前に番組内で行った、番組特製初心者向けプログラミング塾(ユゲ塾)を「またやる予定はないか?」という内容でした。 番組の最終回に、ユゲ塾をやりたい人がたくさんいたら、また開催したい旨を伝えていたので、お便りを送ってくれたのだろう。 もし少人数であれば個別対応をしようと決めていたので、お便りを頂いた方に連絡をして、オンラインでお話をさせていただきました。 その方とお話をした内容を元に、これからWeb系またはソフトウェア系のプログラミングを始めたいと思った人の為のカリキュラムを作ってみました。

お便りをくれた人の個別事情をヒアリング

プログラミングを学習したいと考えた人の理由、経緯、またその背景、環境などは、人それぞれなのでここをしっかりとヒアリングしておく必要があります。 この理由や背景によって、プログラミングを勉強したい(詳しくなりたい)という目的が大きく違ってくる場合がありますからね。 例えば、副業としてプログラミングを勉強して今の自己収入の足しにしたいと考える人や、 仕事でプログラミングを求められる状態になったので、必然に駆られて学習を始めたけど、自分ひとりで学習をしていてもまるで理解が出来ないという人、 今自分が就いている仕事でプログラミングはやっているけど、組み込み系でシステム開発をやっているため、ホームページを作るというプログラミングではないため学習をしたいという人、 今の仕事に少し嫌気が指して、転職をしたいので、キラキラした業種に見えるWeb系に転職をしたいと考えている人、 概ねこれらのどれか(またはそれ以外)に分類されますが、個別に話を聞くと、それぞれが全然違った状態にあり、やりたいこと、目指す先がまるで違うという事がわかります。 転職をする人や、副業をする人は、意外と目的が見えていますが、プログラミングを上達させて就職をしようと思うととんでもない学習をしてスキルアップをしないと、そのスキルで会社に雇用してもらうことを考えると、めちゃくちゃ遠い道のりであることは間違いありません。 今回お便りくれた人は、仕事でプログラミングを求められ始めた為、C言語でのセンサープログラムはできるけど、Web系はまるでわからないという事だったので、初心者というレベルで考えられました。 また、自分ですでにHTML学習(初心者向き)の書籍などを購入して勉強をしているとのことだったので、その人向けのカリキュラムを考えてみます。

カリキュラムを考える

これまで話を聞いてきた、Web系のプログラミング学習を始めた人がまずやってしまいがちなダメポイントとして、 自分のホームページを作ることを目的として、最初にホームページを設置するサーバーを先に購入(契約)してしまうという点です。 そうすると、サーバーの設定がわからなすぎて挫折したり、継続が続かないためサーバーコストだけ払い続ける結果になる人が多いんです。

カリキュラム

  1. 環境構築
  2. 基本的な用語の学習
  3. Web系基礎言語学習 : HTML,CSS,Javascript
  4. サーバーサイドの学習
  5. ネットワークの学習
  6. 汎用プログラミング基礎学習
  7. データベース系言語の学習
  8. やりたいこと別プログラム言語

1. 環境構築

自分が勉強する時につかう手元のパソコンの事や、プログラミングを行うエディタやIDE(Integrated Development Environmentの略で統合開発環境の意味)を準備するのが一番最初に行うべき事です。 よくHTMLなどのテキストベースのスクリプト系言語は、OSデフォルトのテキストエディタでも十分と考えがちですが、この時点でVScodeなどを使い始める人とそうでない人とで、学習スピードに差が出ている点に気が付きました。 VScode以外にも、たくさんのIDEプログラミングツールはあるので、お好きなものを使うのがいいでしょう・・・というと初心者の方は戸惑うので、一番使われていて検索すると情報の多い、VScodeを使うのがいいでしょう。 どのOS環境(Mac、Windows、Linux)でも同じ様に使うことができるのも大きなメリットですね。 参考 : 社内で使われているIDEやエディタを調査してみた もしメンターの人がいる場合であれば、そのメンターの人の設定と同じ環境にするようにしましょう。 何かの不具合などの特定や、情報を伝えるのが格段に楽になるはずです。 メンターの人がいない場合は、まずはデフォルトで使い始めるだけで問題ないです。

2. 基本的な用語の学習

プログラミングの学習を始めると多くの人が単語がわからなすぎて挫折をしてしまうという問題があります。 参考書に書いてある基本的だと思う単語がわからなかったり、詳しい人と話をしても、横文字だらけの話をされてまるで意味がわからないという経験誰もがあるはずです。 こうした単語は、英単語を覚えるように暗記をしても、覚えきれるはずもないので、わからない単語が出たらネットで調べるということでも十分なんですが、必要最低限の単語は必ず抑えておくようにしましょう。 ちなみに、パソコンに関する単語はプログラミング書籍などでは知ってて当たり前と考えられていて説明などをしていない場合が多いので、プログラミングには関係ないアプリやOSの単語をちゃんと理解するといいでしょう。 あと、IT用語を覚える時は、基本的に何かが略されている言葉というのが多いので、英単語で何の略かを理解すると覚えやすいと思います。 関連リンク: パソコン用語(PC用語)30選

3. Web系基礎言語学習 : HTML,CSS,Javascript

上記の工程でお腹が一杯になってしまう人も多いと思いますが、ここまでの工程を曖昧にやってしまうと、次からの工程が思ったとおりに進まなくなり、時間がかかる学習進行になってしまいます。 そして、Web系の基礎学習は、まずは、HTMLとCSSです。 実際に参考書を買ってそれに沿って学習を進めるのもいいですが、実際は0円でできてしまうお手軽な学習領域でもあります。 HTMLとCSSは、ホームページの見た目を司る言語ですが、プログラミングではなく、スクリプト言語です。 計算などはほぼ行わず、タグや設定を行うだけの言語学習ですが、周辺知識として、次のような内容を理解しなければすぐに行き詰まってしまうでしょう。
・画像(ファイル形式やタイプ、それぞれの形式の特性など) ・ファイルパスと階層構造(別のファイルを参照する絶対パスと相対パスの理解) ・命名規則(全角や絵文字などは使っちゃだめ的な内容、大文字小文字の厳密判定と曖昧判定) ・それぞれのデフォルトについての知識
他にも色々とありますが、これらは、知っていて当たり前と言われますが、初心者はこうした事もわからないレベルでもあるので、 知ってて当たり前の状態が理解できるまで学習しましょう。 (この時点で、マウスの右クリックやダブルクリックがわからないレベルの人も多いようです) HTMLとCSSが理解できたら次はJavascriptを学習しましょう。 プログラミングの基礎から、かなり高度なプログラミング知識を学習することができます。 でも、とりあえず、ホームページを作るレベルで、やりたいことができるレベル程度をゴールにすることがいいと思います。 きっと、その後、ホームページを作っていく度に、新しい課題が生まれてくるはずなので、その都度学習を深めていくというのが、モチベーションを落とさずに続けられるでしょう。

4. サーバーサイドの学習

上記のWebの基礎系プログラム(スクリプト)では、実際のインターネットに公開するサーバーにファイルを乗せるまで公開をすることができません。 この時点で初めてサーバーの契約をしてもいいですが、サーバーに関しての学習は、これまた大きな山が存在します。 サーバーOSは、ほぼLinuxの学習と言ってもいいですし、MacやWindowとはまた違ったOSなので、Window(またはMac)しか触ったことがない人にとっては、異次元のパソコン環境に感じるでしょう。 最近では、DockerやVM系エミュレートソフトなどを使って、ローカル環境でもサーバーの構築から運用の学習をすることができます。 中でも一番むつかしいのが、GUIではなく、CUI操作での、コマンド操作です。 自分のパソコンでは、マウスを使って簡単にファイルの移動や削除などができますが、コマンド操作でそれを行うのはまるで次元の違う操作になります。 実際にこれが難しくてサーバーが苦手と言っている人も多いので、この苦手がなくなった時にサーバーの苦手意識がなくなると言ってもいいでしょう。 次の参考サイトでは、Linuxをエミュレータソフトでインストールしてローカル環境にLinuxを実装する手順が紹介されています。 参考: 仮想マシンを作成して、Linux をインストールする これを利用して、公開サーバーを契約する前に、サーバーの勉強が手軽にできますね。

5. ネットワークの学習

サーバーよりも先に行うほうがいいかもしれませんが、本当はサーバーと同時にやったほうが効率的ですが、ネットワーク学習を順番として後にセットしました。 自分のパソコンのセットでもネットワークの設定が必ず存在するのですが、ほとんどの人がわからないのではないでしょうか? ネットワークに関しては、本当に深い学習になる事を覚悟して取り組みましょう。 難しくてわからない単語もたくさん出てくるし、理解できない内容もたくさん登場します。 確実に理解しなければいけない単語は、次のとおりです。
・LANとWAN ・IPアドレス ・DNS ・物理ネットワークと無線ネットワーク
これらが人に説明できるレベルになったら、ネットワークの仕事を引き受けても概ね問題ないレベルになるでしょう。 (それぞれが非常に深い知識料が必要になるので・・・)

6. 汎用プログラミング基礎学習

サーバーの学習をしていると、PHPやPerlやRubyなどのサーバーサイド系プログラム言語が出てきたかもしれませんが、それも含めて、いわゆる汎用性の高いプログラム言語の学習を始めることができます。 いろいろな種類のプログラム言語がありますが、大きく分けて、コンパイルが必要なコンパイル軽減後と、インタプリタ言語に分けられるので、

インタプリタ言語

・Perl ・PHP ・Python ・Ruby

コンパイル系言語

・C言語 ・C++ ・C# ・Java ・Go ・Rust
まずは上記インタプリタ言語、コンパイル言語、どれか一つを徹底的に学習すると、プログラミングの基礎が学習できると思います。

7. データベース系言語の学習

サーバーサイドプログラムをやり始めると、システムのデータを保存するためのデータベースが必要になります。 一番汎用的で使われているのが、SQLデータベースで、これもいろいろな種類や方式があるので、下記のメインどころから選択して学習する事になります。
・MySQL(MariaDB) ・PostgreSQL ・Sqlite ・MongoDB ・Cathandra ・Oracle ・SQL Server ・AWS系
一番メジャーて手軽なのが、MySQLなので、Web系で手始めに学習する場合はコレを学習しておきましょう。 SQLも実際に使い始めると、あまりの奥深さに気が遠くなる人もいるかもしれませんが、なれてくると、めちゃくちゃ楽しく感じるタイプの人もいるので、 自分を見極めてみてもいいかもですね。

8. やりたいこと別プログラム言語

最後のカリキュラムとしては、実際に自分がやりたいことを考えると、上記のたくさんあるプログラム言語の中から絞り込まれた状態になるでしょう。 それをひたすら、ゴールに向かってあーだこーだやり続ければ、自ずと学習もできていくでしょう。

目標別の学習サンプル

・ホームページ系 : PHP , Javascript ・ゲーム系 : C# , Javascript ・ビジネス系 : Java , Javascript ・ツール系 : どれでも ・AI系 : Python

フレームワークの誘惑

ホームページを作る時に、Wordpressや、RubyOnRales、Reactなどのいわゆるフレームワークが推奨される場合があります。 これらのフレームワークを使って学習を進めることは悪くはないのですが、プログラミング学習というよりは、フレームワークの使い方学習に切り替わってしまう場合が多いので、 その後そのフレームワークを使わないと、PHPやJavascriptが扱えないという、エンジニアも数多くいます。 こうした思い込みが強くなる思考の偏りをなくすために、是非、複数のプログラム言語、ネイティブの言語学習は、意識して行うようにしてみることをオススメします。 思考の偏りがなくなると、非常に世界が広くなるということをお伝えしておきます。

メンターが欲しい人へ

最後に、こうした事を、良くわからない人が一人で学習をすると、一体習得完了するまでにどのくらいの期間がかかるのか、気が遠くなりますよね。 そんな場合に、プログラミングスクールに通うことを選択してしまう人も多いようですが、お金と時間に余裕がある人はそれでもいいかもしれませんが、多くの場合は思った通りの結果にならないでしょう。 是非、自分に合ったメンターの人を探して見る事をオススメします。 できれば相互メンターになるようなお互いに何かスキルを教え会える関係の人を見つけると、学習、コミュニケーション、その後の成果など、いい感じの未来が築けるでしょう。 ちなみに、ユゲタにメンターしてもらいたいけど、お金が心配という人がいますが、初心者メンターは基本的に無料で行っているので、お気軽にお声がけください。 中級レベルからレベルアップしたい時のメンター対応は、ヒアリングしてから方向性を聞いて、お見積りさせてもらっていますが、このレベルになると、ほぼ仕事レベルですからね。

カリキュラムは大事

パソコンを買うところから、学習を始める人は、今回のカリキュラムの前に、もっと基礎的なパソコン知識などが必要になりますが、今回お話させてもらった方は、こうしたカリキュラムがおすすめでした。 最初から自分でこんなカリキュラムが作れたら何も苦労しないんですが、実際はこうした自分にあったカリキュラムを作ってくれるなんてそうそうないですよね。 自分個人も、カリキュラム作ってほしいと考えちゃいましたよ。 メンターじゃなくてもカリキュラムを作ってほしい人っているかもしれないな〜と思いながら、本日のブログを書き終えました。 カリキュラムのそれぞれの工程での細かな内容についてももっと深堀りして、またブログで紹介していこうと思いますので、もしリクエストなどあれば、おたよりくださいませ。

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。