フィヨルドブートキャンプのプラクティスを見直してみた
はじめに
こんにちは。これは フィヨルドブートキャンプ Part 2 Advent Calendar 2021 - Adventarの9日目の記事です。フィヨルドブートキャンプ Part 1Advent Calendar 2021もあります。
8日目はsadanoraさんのRailsのローカル開発環境についての記事でした。
紹介されてる手順通りにやっているのにエラーが出る...これはもはやあるある通り越して通常運転な感すらありますね...。
自己紹介とこの記事について
naomichi-hと申します。2020年12月末にフィヨルドブートキャンプに入り、もうすぐ一年が経ちます。
現在のプラクティスの進捗状況は、先週チーム開発に入り、最後のプラクティスである自作サービスにも着手し始めたところです。
いよいよフィヨルドブートキャンプでの最終章が始まったなと感じているのですが、ここであえて一度立ち止まって、これまでやってきたプラクティスを振り返ってみよう!と書いたのがこの記事です。
プラクティスを振り返り、実際にやってみて個人的に思った「難しさ」、「他のプラクティスとの関連性」、「かかった時間」をSABCDの5段階評価し、振り返りを述べました。
注意:この評価はあくまで筆者naomichi-hの主観100%でつけています。そして各評価に厳格な定義があるわけでもないです。ふわっとしたイメージです。また、決して特定のプラクティスの重要度が高いとか、低いとかを述べているわけでもないです!言うまでもなく全部大切です!!
今プラクティスを進めている在校生の方がこれを見て、「このプラクティスは今後も関連しそうだから参考書も買ってちょっとしっかりめにやろうかな?」とか、「このプラクティスは大変だから苦労するのは仕方ない!」と思ってくれたり、卒業生やメンターの方が単純に「なるほど〜」とか、「そうでもなくない?」等思ってくれたら幸いです。
プラクティスの振り返り
学習の準備
難しさ:D 関連性:S かかった時間:D
ここはとくに難しいことはなく、snsやgithubを登録したり、日報を書くだけなので、時間もかかりませんでした。が、後のプラクティスへの関連度で言えばもっとも大きいかもしれません。
特にgithubアカウントはずっと使うものなので、アカウント名はしっかり吟味することをおすすめします(もう遅いかもしれませんが...)。
(個人的な話ですが、naomichi-hという、ハイフンを混ぜたアカウントにしてしまったことを後悔しています...。口頭で伝えにくいし、見た目がアンダースコアと紛らわしい...。)
開発環境
難しさ:D 関連性:S かかった時間:D
ここも学習の準備とほぼ同じ感じです。 僕はMacで開発環境を整えました。エディターはずっとVSCodeを使っています。
HTML & CSS
難しさ:C 関連性:A かかった時間:C~B
僕がやったときはCSS上級もプラクティスに含まれていたので、その状態での感想になります。
僕はフィヨルドブートキャンプに入る前、独学でHTML & CSSを学んでいたので、細かい部分で少しハマったものの、提出物の作成にあまり苦戦はしませんでした。しかし、初めて触れる人の場合、難しさと、かかる時間が一段階上がると思います。
特に、学び初めは、狙い通りにボックスを配置するのに苦労すると思います。
HTML & CSSは、後のプラクティスでゴリゴリ書く機会は多くないのですが、後半のプラクティス課題はHTML & CSSを理解している前提で出てきます。ある程度思い通りにページを作れるようになっておくと、後半のプラクティスをやるときに心が楽かもしれません。
Vi
難しさ:D 関連性:B かかった時間:D
はじめてViを触ったときに思ったことは、「なにこのつかいづらいエディター...」でした。
いまだに全然使いこなせていませんが、ベテランのエンジニアの方には愛好家も多く、なにやらすごいポテンシャルを秘めているらしいです。プラクティスとしては、ただvimのチュートリアルをやるだけなので簡単でした。
僕は現在、githubのcommitメッセージを書くときぐらいしか使っていません...。
Linux
難しさ:A 関連性:S(terminal操作)他はC〜B かかった時間:A
個人的に最初の壁でした。
やることも多いし、覚えることも多い。
僕の当時の日報を読んでみても、
Linuxゲリラ戦記を読んでいるが、実際に手を動かしていないので理解が浅いし、読むだけで理解しようとすると時間がかかる割りにすぐ忘れるので、「次のプラクティスでDebianをインストールしたらちゃんと手を動かして理解を深める」ことにして、一旦さっと流し読みしようと思う。
と言っていたり、sshを使って公開鍵ログインするところで、
一生懸命サーバーで鍵作ってサーバーに鍵登録しようとしてた
こうやって書くと意味不明だが、つまり、クライアント=手元のMacということに気づいていなかった。
クライアントからリモートサーバに接続するという目的がよくわからないままとりあえず手順通りにやっていたことがモロわかりである。
結局秘密鍵をサーバーに登録しようしたところで、いや、無理っす😅やめてくださいってssh-agentに言われまくったところで何かがおかしいと気づき、クライアントで鍵作ってサーバーに送ることを理解した。
とよくわからないまま試行錯誤してたりでなかなか苦労してたことが伺えます...。
正直なところ、慣れない単語を頑張って覚えても、結局使わないと忘れるので、必要なときに調べたら思い出せる。ぐらいになっておけばいいんじゃないかなと思いながらやっていました。
関連性としては、ここでやるterminal関連は何をやるにも使うのでS、他のLinuxの部分はC〜Bとしました。
Git & GitHub
難しさ:B 関連性:S かかった時間:B
このプラクティスでは、手順に沿ってGitとGitHubに触ってはみたものの、いまいち何が起きているのか理解しきれなかった記憶があります。
rebase?stash??PR作ったけど...ここでなにができるの...???みたいな感じでした。
ただ、実際に他のプラクティスでGitとGitHubを使っていくうちに、仕組みや使い方が段々とわかっていきました。
Git & GitHubは特に、習うより慣れるのが大事なのかなと思います。あと、よく使うものなので、使えるようになってくると、成長を実感できてうれしかったです。
Ruby
難しさ:A 関連性:S かかった時間:S
とっても楽しいプログラミング言語Rubyを学ぶプラクティス。各種プログラムをRubyを使って作るのはとても楽しかったです。
このプラクティスでは、「タスクばらし」の大事さを学びました。
やりたい大きなことを達成するためには、まず最初にタスクを細かくばらしていって、見通しをよくすると、やるべきことが見えてくる...ってやつです。
僕は最初、カレンダーのプログラムで、「...え??何からはじめたらいいのかわからないぞ...?」と途方に暮れましたが、他の受講生の日報をヒントにタスクばらしをすることで、突破できました。
ボウリングのプログラム、lsコマンド、wcコマンドについても、タスクばらしさえできれば、あとはなんとかなった覚えがあります。
rubygemsやBundlerは、このプラクティスが終わった時点ではいまいち理解できませんでしたが、railsを扱うようになって理解できました。
あと、このあたりから、何かを調べるときは公式のドキュメントをまずあたるように心掛けていました。慣れないうちは公式ドキュメントから情報をとるのは難しく感じますが、慣れると余計な情報がないのでかえって簡単で素早く、しかも正確な情報をとれるので最高の情報ソースだと思います。
HTTP
難しさ:B 関連性:A かかった時間:C
このプラクティスでHTTPをはじめて読み解いたとき、「え!?ブラウザとサーバって、テキストメッセージでやりとりしてたの??!」とびっくりしました。
当初、きっとブラウザとサーバのやりとりって、こう...難しくて人間では理解しづらいことをやってるんだろうなあ...と思っていたので、一気に親近感がわいたことを覚えています。
Nginx
難しさ:A 関連性:C かかった時間:B
このプラクティスでは、「Webサーバーとはなにか」というところをちゃんと抑えないままNginxに触りだすと、なにがなんだかわからなくなって途方にくれる恐れがあります。
ちなみに僕は途方に暮れた人です。習うより慣れろが信条なものでして...えへへ。
Nginxという「Webサーバー」を使って、何をしようとしてるんだっけ?というところをしっかり抑えることではじめて、使いかたや設定が理解できるようになったと思います。
データベース
難しさ:S 関連性:A かかった時間:A
ここのプラクティスの思い出はただ一つ。「楽々ERDレッスン」に尽きます。
全然楽々ではなく、普通に難しかった...。データベース設計って難しいなあ...というのが正直な感想です。
Webアプリケーション
難しさ:B 関連性:A かかった時間:B
はじめてのワークフレーム。
最初はいきなり大量のディレクトリとファイルが生成されて「どういうことなの...?」と困惑しましたが、Sinatraはとてもシンプルなので、触っているうちにだんだん使い方がわかって楽しくなっていきました。
ここでワークフレームというものに慣れることができたおかげで、次のRailsもスムーズに学べたと思います。
Ruby on Rails
難しさ:A〜S 関連性:S かかった時間:S
ボリューム満点のプラクティスでした。苦労したのは主に二つ。
一つ目はdeviseを使ってユーザー認証を実装する。の部分。deviseの仕様を理解するのにてこずりました。
二つ目はRailsでユーザーフォローを作る。の部分。多対多のモデルの関連づけをどうやって書けば思いどおりになるのか、なかなかピンとこなかった覚えがあります。
どちらも調べればたくさん記事はヒットしますが、手元でコードを書いて動かしてみないとなかなか仕様を理解しづらかったです。
このプラクティスが一番エラーを出して、解決するということをたくさんやった気がする...。おかげてエラーログをだんだんと読めるように。
自動テスト
難しさ:B〜A 関連性:A かかった時間:B
ここではじめてテストを書きました。
最初はテストコードを書く。ということにピンと来ていませんでしたが、ハンズオン動画を見て、「あ、そういうことか」となった覚えがあります。
オブジェクト指向プログラミング(Ruby)
難しさ:B 関連性:A かかった時間:B
「Rubyでは全てがオブジェクト」ということをずっと意識して学んできたおかげか、ここはほとんど苦労しませんでした。
いままで手続き型で書いていたプログラムを、クラスでまとめてすっきりさせるのは、なんていうか...部屋の掃除をするような感じの気持ちよさがありました。
JavaScript
難しさ:A 関連性:A かかった時間:S
ここで最初に思ったことは、「いちいちletとかconstとか宣言するの面倒...。」でした。
そんな感じでちょっとRubyと違う部分につまづきつつ、配列などはRubyの知識がそのまま使えるので、サクサクできて楽しい!と思っていたら非同期処理にやられました。
自作のnpm作成でも、あれ?思い通りに動作しない...となった原因の9割はこの非同期処理でした。
Vue.js
難しさ:A 関連性:A かかった時間:A
Vue.jsはとにかくシンプルでわかりやすく、学んでいてすっごく楽しかったです。
メモアプリSPA版の作成では、データのやりとりをどういう構造にするか...と言う部分でだいぶ悩み、一回作り直しています。結局、Vuexを使ってストアに集約する構造にすることですっきり作成できました。
おわりに
今回はじめて自分の日報をたくさん読み返したのですが、イメージよりもしっかり取り組んでいて、「あれ?この一年自分めっちゃ真面目に頑張ってきたやん...。」となんだか感動しました。
それと同時に、ちゃんと学んできたことが身になっていることも実感。
卒業まであとプラクティス二つ...。よし、頑張ろう!
明日はhirovodkaさんです!