プログラミングスクールを卒業しました

f:id:ksmxxxxxx:20210529212119j:plain
卒業証書

2021年4月にプログラミングスクールのWebデザイナー向けプログラミングコースを卒業しました。
受講していたのはRailsプログラマーコースだったのを、途中からメンターさんに相談してWebデザイナー向けにカリキュラム内容をカスタマイズしてもらって、受講してました。
受講していたスクールでははじめての試みだったということで、同じデザイナーの人でプログラミング勉強したいと考えている人向けに記事を残すことにしました。

プログラミングを勉強しようと思った経緯は以前投稿した記事に書いているので、そちらを参照してください。

ksmxxxxxx.hatenablog.com

スクールでやったこと

通っていたのはフィヨルドブートキャンプというプログラミングスクールになります。
実際に進めたカリキュラムは以下になります。

  • Linuxの基本
    • Terminal
    • Debianをインストール
    • ファイル操作の基本
    • aptの基本
    • sudoの基本
    • SSH
    • 標準入出力・リダイレクト・パイプ
    • SSL/TSL
  • Webサーバー
  • HTTPとCookie
  • データベース
  • Ruby
    • fizzbuzz問題
    • カレンダー(macのcalコマンド)を実装する
    • ボウリングスコアプログラム
    • Ruby超入門
    • Cherry本
      • この本で簡単なテストを書きながら実装をしていく手法とかも書かれているので、TDDとはみたいなところが勉強できた
    • lsコマンドを作る
    • wcコマンドを作る
  • Webアプリケーション
    • RESTとはなんぞ
    • Sinatraでメモアプリを作る
    • ↑のメモアプリのストレージをDBを使うようにする
  • オブジェクト指向プログラミング
    • OOPでボウリングスコアプログラムを作る
    • OOPでlsコマンドを作る
    • OOPでwcコマンドを作る
  • JavaScript
    • Node.js
      • nvm(人によってはnodebrewとか使ってるかも)
    • Linter(PrettierとESLint)
    • fizzbuzz問題
    • npm
      • npmを作成するプラクティスがある
    • カレンダー(macのcalコマンド)を実装する
    • 非同期処理
    • クラス
      • メモアプリ(CLI)を実装する
    • npmパッケージを作る
  • 継続的インテグレーション

f:id:ksmxxxxxx:20210529212224p:plain
学習時間

自分はプログラマになりたいかと言うとそうではなく、UIの実装のためにプログラミングが必要だったので、メンターさんと相談してカリキュラム内容をカスタマイズしてもらいました。
それがWebデザイナー向けプログラミングコースってことになるらしいので、もしデザイナーでプログラミングに興味がある方は相談してみるといいかもしれません。

これだけでも結構いろんなことを勉強したなぁと思いますが、いくつかのプラクティスはスキップしました。
スキップしたのはHTML&CSS、Git&GitHub、Vi(Vim)あたりです。仕事や日常的に使ってたのでやらなくても大丈夫そうってことで。ただ、CSS上級の課題は結構歯ごたえがあって「プログラマ向けでここまでやるの、ガチだな…」って思いました。
Railsプログラマーコースの学習内容については以下のページで確認することができるので、興味があれば見てみてください。

bootcamp.fjord.jp

もちろんRailsも触れるWebデザイナーってのも市場価値高いと思うので、Railsプログラマーコースを受講するのも全然アリだと思います。
自分はRailsにも興味があるので、また経済的余裕と時間が確保できるようになったら、今度はRailsのカリキュラムも受けるために再受講をしようと考えています。

できるようになったこと

最初はJavaScriptだけ勉強できればいいやなんて軽く考えていたんですが、カリキュラムの内容的にRubyの入門を通してプログラミングの基礎を学習していく流れになっていました。
Rubyのカリキュラムを飛ばしてJavaScriptカリキュラムに進んでも、全然わからず…………というより「なにがわからないのかもわからなくて、プログラムができない」みたいな状態になりました。
やっぱりプログラミングの基礎がわからないことには始まらないし、メンターさんにも「Rubyのカリキュラムから進めたほうが、JavaScriptのカリキュラムもわかるようになると思います」ということだったので、素直にRubyのカリキュラムから進めていきました。

Rubyの入門の教本としてゼロからわかる Ruby 超入門:書籍案内|技術評論社プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで:書籍案内|技術評論社を読み進めていきプログラムを書いていく流れでしたが、JavaScriptと細かい違いはあれど、プログラミングの普遍的な基礎がわかるようになったかなと思います。

1. 公式ドキュメントやリファレンスに書いてあることが理解できるようになった

それまではRubyの公式ドキュメントやMDNのJavaScriptリファレンスを読んでも「なるほどよくわからん」といった感じで全然理解できませんでした。で、適当にggって適当なQiita記事を読むのですが余計わからなくなるという感じでした。わからないから解決しない。

今ではわからないメソッドやプロパティがあると、「まずは公式ドキュメントとかリファレンス見に行く」となっていて、読めばだいたい分かる。
小さいプログラムを書いてみて動かしてみて実際にどう動くのかを確認してみると「わかった、完全理解」みたいな感じになり、動くコードが書けるようになりました。(たまに理解が間違っていて、ドツボにハマることもあります)

2. デバックの仕方がわかるようになって、大抵の引っかかりポイントは自己解決できるようになった

以前はデバックひとつとってもコツや勘所もわからずまったく見当違いの部分をデバックして、さらなる深みにハマるということが日常茶飯事でした。
エラーログを読んでデバックを小さい粒度でしていくというコツみたいなところが掴めるようになってからは、大抵の引っ掛かりは自己解決できるようになりました。
といっても、JavaScript自体がデバックしづらいな……って思うことがあって、今でもたまに「えー、ナンデヤネン」ってなってることはあったりしますが。
それでも以前よりは心が折れるみたいなことは少なくなりました。

3. 考えていることや物事の整理整頓ができるようになった

整理整頓が苦手というわけほどでもなかったのですが、得意というほどでもなく……デザインの仕事をしててもいまいち自信がありませんでした。
プログラミングをするとき「この機能を実装するためには、Aっていう処理とBっていう処理が必要で……」といった感じで実現することを小さい処理に分けて考えていく必要があります。

プログラムの実装を考えるときみたいに「ゴールに近づくため、必要な小さいタスクを洗い出す」という考え方をするクセがつくようになりました。
これができるようになって嬉しいことは

  1. MTGファシリテーターをする時に会話内容の整理整頓ができて、着地点がはっきりわかるようになる
  2. 質問する時に「〇〇について質問したいです。▲▲をやりたいのですが、それをやるためには★★をする必要があるところまでは理解できたのですが、どうすれば★★ができるようになるのかがわかりません」といった感じに、自分の知りたいことや不明だと思っているポイントが整理されることにより言語化しやすくなり質問スキルが上がります
  3. 質問スキルが上がると副次効果としてコミュニケーションスキルもレベルアップします
    • コミュ障を自称してる人の大半の人は「喋ってるうちに自分が何を話してるのかがわからなくなって支離滅裂になって夜になってから脳内自己反省大会始めてる」みたいな感じだと思う
    • 私も話しているうちに自分が何の話をしているのかがわからなくなって支離滅裂になることがよくある……今でも前よりマシってだけで、たまにそういうのがある
  4. デザイナー的に嬉しいのは自分の制作物に対して、論理建てて説明するスキルが上がります

これはデザイナー、プログラマー関係なく、チーム開発やクライアントワークする上では重要なスキルになると思うので、普通に社会人スキル上がると考えていいと思います。

もう少し勉強したかったこと

JavaScriptフレームワークについてもうすこし勉強したかった

ラクティスにはJavaScript(Node.js)でmacのcalコマンドを実装とCLIで使うメモアプリを実装する課題、Vue.jsを使ってTodoアプリとメモアプリを作る課題がありました。
calコマンドはカレンダーを表示させるのでDateオブジェクトの扱いなどを勉強できたし、メモアプリはクラス構文を使って作る内容になっているし、非同期処理も必要になることもあるので、JavaScriptの基本的なところはわかるようになったかなぁという感触があります。
しかし、JavaScriptフレームワークについてはVue.jsを使ってメモアプリをTodoアプリを作るのですが、これが結構簡単な内容だし、現場だとVuexを使って複雑なpropsの受け渡しなどを使う実装が多いと思いますが、そこまで求められていない内容なのでちょっと物足りなさを感じます。

Railsプログラマーコースでは「チーム開発」プラクティスで、スクールで使われているアプリの開発チームに入って機能開発を行います。
ここでVue.jsの本格的な実装のストーリーを担当することがあるのでそこでガンガン勉強できるという感じになっていそうですが……デザイナーもNuxt.js使ってサイト構築とか勉強できるようになっていれば市場価値上がりそうなんだよなぁって思いました。

JavaScriptがわかるようになったので自力で勉強しようと思えば、前よりは独力で勉強できるようにはなってると思うのですが……自分がもともとルーズだったり火がつかないとやらない人間だったりするので、カリキュラムとしてあったほうが勉強捗りそう(実際プログラミング自体の勉強もスクール入って捗った)って思ってます。
あとVue.jsだけじゃなくてReactもやりたかった。(Reactこそほんとに独学で勉強しづらさある気がする)

JavaScriptの実践的なプラクティスがほしかった

上と重複するんですが、実務で書くコードと趣味や勉強で書くコードは別物だと思うので、実践的なJavaScriptのカリキュラムがほしかったなぁって思います。(Railsプログラマーコースでは用意されている)
今の内容だと、(入ったことないので実際のところわかりませんけど)他のプログラミングスクールのフロントエンドコースよりちょっといいくらいかなぁって感じてます。

とにかく場数稼いで経験値溜めたいからJavaScript書く仕事がほしい。
(って下書きしてたら、JSで実装しているUIの改修ストーリーもらえて「ヒャッホウ」ってなった)

むすび

もう少しスクールでやりたかったこともあったなと思うところはあるのですが、総括的にプログラミングが勉強できてとても良かったなって思っています。

スクールに入る前は、エラーメッセージの読み方ひとつとってもいつまで経っても素人感が抜けず、雑に読んで「なんもわからん」となっていました。
勉強してからはエラーメッセージ読めば大抵は解決できるようになったので、これだけでも大分進歩したと感じています。 エラーメッセージ読んでもわからない場合でも、デバックのコツやどうやって調べれば解決するかわかるようになりました。

HTMLとCSSだけ書く仕事をしていても、たとえばCSSのLintチェックツールを導入したいと思ってもnpmパッケージを使うことになることがほとんどです。
ちょっとしたサイトを作るにしてもwebpackを使って、webpack-dev-serverやSCSSを使える仕組みを自分で作れるようになるだけでも、開発環境が便利に作れて体験向上が望めるようになります。
できることが広がるので得だらけ。デメリットは金と時間がかかるくらいしかないです。

ただ、人には向き不向きがあるし、趣向性もあるので全員にオススメ!とは思わないです。 たとえば……「あーこのこのアプリの開発環境ってbin/setupしてよろしく環境作ってくれないのか……もう自分でShell芸勉強してPRつくろっかな…」みたいな気持ちになることがある人は勉強も苦にならないと思うのでオススメします。

これからはNuxt.jsを使って、ブログとプロフィールまとめ的な個人サイトサムシング的なものを作れるようになるのを目標にコードを書けるスキルを維持していきたいです。
はてブはコーディングのナレッジストックとして使って、ポエム的な内容はMarkdownで記事を書いてNuxt.jsでビルドするようにしたい。
ヘッドレスCMSとかも使ってみたい。