JUNのブログ

JUNのブログ

活動記録や技術メモ

N予備校 「プログラミング入門 Webアプリ」を修了した.

タイトルにもあるとおり, N予備校の 「プログラミング入門 Webアプリコース」を修了しましたので, 完走した感想を書きたいと思います.

プログラミング入門 Webアプリコース とは


まずはじめに, 今回終了したN予備校の「プログラミング入門 Webアプリコース」(長いので以下 入門コース と略します) がどんなコースなのかというのは, N予備校公式サイトから引用すると,

完全な未経験者向けのプログラミング入門講座です。 JavaScriptというプログラミング言語でセキュリティ上の問題のないWebサービスが開発できるようになります。他にも数値集計プログラム、Slackのボットなどを作成しながら、エディタやLinuxの開発環境などの基礎知識を身につけます。なお学習にはPCが必要です。

www.nnn.ed.nico

とのことらしいです.

他にも 「大規模Webアプリコース」 や 「スマートフォンアプリコース」などもあり, N予備校公式ページではプログラミング経験者は入門コースを飛ばして, 先程紹介した他のコースから始めてみよう 的なことが書いてありました.

自分は一応プログラミングは3年半くらいは独学でやってきたので, 入門コースを飛ばそうかと思いましたが, カリキュラムを見た感じ自分が知らなさそうなこともあったので, とりあえずやってみようということで入門コースを始めました. (この選択が大正解になったわけですがそれは後ほど)

コースの内容的にはChromeのインストールから始まり, 最後はGitHubログインを組み込んだ予定管理アプリを作成するところまででした. (このあとに付録がありますが, これはまだやってないです.)

最後のプロジェクトで作ったもの

sheltered-temple-97492.herokuapp.com

完走した感想


とにかく 最高 でした.

教える順番, 情報の取捨, 概念から具体への持って行き方, 新たな概念や知識を教えるタイミング, 全体を通して身につけることができる技能, etc... これらすべてにおいて 最高 で, 100点満点中1017点付けたいくらい良かったです.

一言で表すなら

体系的に学べて実践的なプログラミング教材の最高峰

と言い表したいと思います.

私の場合だと, 今まで独学で必要なときや勉強したいときにその技術を勉強して, 全体的にぼんやりとは理解しているけれど, 必要なものを食いつまんで勉強していただけなので, 今まで必要になったことがあれば知っているけど, 必要になったことがないものは知らない みたいな状態でした. なので, 私はここ数年ずっっっっっと体系的に学べる教材や場が欲しかったです.

この願いに対してN予備校のプログラミングコースはまさに私が求めていた理想のものでした.

一応私は経験者ですので, 半分くらいはすでに既知のものでした. しかし, 今まで必要にならなかったが故に勉強していなかったり, ライブラリに任せて実際の中身を理解していないことを多く知れました. そして, 入門コースを終えた時点では今までそれぞれ点だったものが点と点とが繋がり線になり, それぞれの技術の関係性や役割を理解できました. 私の望んだ体系的な知識というものを会得できました. コースをやっていけばいくほど頭の中にある今まで積み重ねてきた知識がどんどん繋がっていく感覚はまさに感動を覚えました.

N予備校の入門コースの「身につくスキル」には

「一般的なWeb企業においてアルバイトやインターンできるだけの実力が身につく。」

N予備校 プログラミングコース

と書いており, 実際に始める前は ホンマか〜?? って思いましたが, これは本当でした.

もし, 今友人に「プログラミング始めたいんだけど, おすすめの教材やスクールある?」って聞かれたら1つの迷いもなく「N予備校したらいいよ」って答えるでしょう(実際最近質問されてそう答えてる)

初心者はもちろんですが, 私のように独学で必要なときに食いつまんで勉強してきて, そろそろ体系的に学びたいという人にとっても最高の教材だと思います.

全体を通した感想は以上です. 以下に個人的に感動を覚えたパートを書いたので興味があれば見てください(順番はバラバラです).

  • 計算量: まさか入門コースで計算量の概念を出してくるとは思っていなかったのでびっくりしました. 確かフィボナッチ数列を再帰で生成するのをメモ化再起で計算量を減らすみたいな内容だった気がします. 計算量という概念はコードを書く上で非常に重要ですが, 多くのプログラミング入門書や教材には書いていないと思います. (自分もアルゴリズムの勉強始めてから知った). しかし, N予備校では入門コースの割と最初の方で紹介しており, その説明が本当にわかりやすく, さらに実際に計算量の改善を経験することで, 計算量がいかに重要かというのを理解できるようになっていました. これには思わず「すげぇ」と声が出てしまいました.
  • Webpack: これは自分が今まで調べても, なんだか詳しく書かれすぎていてずっと理解できずに放置していたのですが, 入門コースで「JSファイルなどを1つにまとめるもの」という説明をしてくれて一発でわかりました. この「技術をどのくらいの詳しさで説明するか」といのは難しく, 細かく正確に説明するとわけわからんし, だからといって大雑把に説明すると正しく説明できなくなってしまったりするわけで, その点 N予備校 での説明は絶妙な塩梅で素晴らしかったです.
  • 開発環境: 第2章以降ではvagrantでubuntuを立ち上げて, その上で開発していくわけですが, これは合理的でとても賢いやり方だと思いました. Macならともかく, Windowsでのプログラミングは環境的にあまり快適とは言えない(個人の感想です)し, 問題ないとしても これから教材を進めていくにあたり本格的な開発に入る前に環境の差異は解消すべき問題です. そこで第2章の最初でLinuxの説明と必要性を説明し, vagrantの設定を行い, 開発環境をubuntuで統一することでこの問題に完璧なアプローチを行っていました. 開発環境は統一できるし,受講者はLinux環境とCUI環境に慣れることができるしまさに一石二鳥って感じです.
  • 要件定義からデプロイ: 多くの入門書や解説書では技術の解説や本に従って進めていくとWebアプリなどの目に見える成果物が得られます. しかし, じゃあ実際に自分の作りたいものを作るという段階になると, 実際にどういう手順で何に考慮し, 何をするべきかというのがわからなくなります.(自分もこのコースをやるまでは行き当たりばったりで開発してました.) しかし, このコース内では要件定義から始まり, コードの大まかな設計, DBの設計, セキュリティ対策, デプロイ, など実際に自分で作成したいものがあるときに応用できる発案から開発の流れが習得できるようになるようになっていました.
  • ライブラリを使わずに開発する: 最初はライブラリを使わず, 素のHTML, CSS, JSでサイトを作成し, セキュリティ対策なども行います. 素のJSなどを使っているのでもちろん結構大変なのですが, 仕組みと大変さを知った後に ライブラリが出てきました. そこで, 実際に自分たちが今まで書いてきたものがライブラリを使うとこんなに楽にかける. ライブラリを使うと楽に実装できるが, 内部の処理は知っておく必要がある. と言った説明をしていました.
  • HTTP通信, TCP/IP: ネットワーク関連の説明に関しても秀逸でした. TCP/IP参照モデルの説明を細かく詳細にはせず, 必要なところやエンジニアとして常識として知っておいた方が良いことを選んでわかりやすく説明してくれました. また, これに限ったことではありませんが, このコースでは多くの技術について説明しているのですがそれら全てに手を動かす内容が含まれているのは素晴らしいと思いました. 私が思うに, テキストだけで知識を得ても記憶に残りにくく, 実際に自分で手を動かすのが重要だと考えています. このコースではまさに手を動かして学ぶことができたので楽しく学べ理解できました.
  • セキュリティ対策: 実際にWebアプリに関数有名な脆弱性への対策を行いました. それら脆弱性がどのようなものか, どのように攻撃され, どのような被害が発生するか, どのように脆弱性への対策を取るか が説明されており, これは非常にわかりやすく, 実際に自分でWebアプリを作成する際にも活かすことのできる素晴らしい内容だと思いました.
  • テスト: このコースをやるとわかりますが, このコースの後半ではテストをバンバン書きます. 自分はテストは必要になるか技術バイトなどをしないとなかなか知ることがないし, 知ったとしても実際にテストを書く習慣はなかなか身につかないと思っています. しかし, このコースでは当たり前のように新しいハンドラーを実装するとその後直ぐにテストも書きます. これによりテストを書くことが当たり前になり, 自然に技術的負債の少ない保守性のコードが書けるようになりそうです. テスティングフレームワークを使ってガッツリテストを書いていくのは第5章の「実践サーバーサイドプログラミング」という章なのですが, まさに「実践」でした.
  • WebSocket: WebSocketについてはなんとなく知っていましたし, Node.jsで昔書いたことが少しあるのですが, 実際にどういう仕組みで動いているのかは知りませんでした. このコースではWebSocketの説明から使用用途, オンラインゲームではUDPが多く使われていてそれはなぜか など私がぼんやりとしか知らなかったWebSocketについて少なくとも言語化できるくらいには理解できました.
  • CI(継続的インテグレーション): これもびっくりしました. まさか入門コースでCIを扱うとは思っていなかったです. このコースでは CircleCI を使ってCIを行いました. 私自身そろそろCI/CDに触れようと思っていたのでこのコースで説明,実践してくれて本当に助かりました. おかげで随分とCI/CDに対する心理的負担が下がりました.

完走した感想を書いた感想


N予備校のプログラミングコースが良いらしいという噂は聞いてましたが, まさかこんなにも良いとは思ってもいませんでした.

N高生はこの完成度の高い教材を使ってプログラミングを勉強し, その上で他の生徒とコミュニケーションを取っているならば, それは最高のコミュニティだと思います.

このコースは入門コースということで, N予備校のHPでは 経験者はこのコースを飛ばして大規模Webアプリケーションなどの別のコースから始めよう 的なことが書いてありましたが, CS学部を出て仕事でコードを書きまくってる人など以外は入門コースからやるべきだと思います. もし, その文言を真に受けてこの入門コースを飛ばしているなら本当に勿体無いと思います. 私自身本当にこの入門コースを受講し修了して良かったと心の底から思います.

N予備校は新型コロナでの無料公開がきっかけで始めたのですが, 本当に素晴らしいです. これからも契約していきたいと思います.

N予備校のおかげで多くのことを学べましたし, これからも多くのことを学びたいと思っています.

N予備校のわかりやすく素晴らしい教材を作った方々に感謝です.

とりあえず次は「大規模Webアプリコース」しようかなぁ.

では, 今日はこの辺で. ではでは〜👋