isyumi_netブログ

isyumi_netがプログラミングのこととかを書くブログ

mozaic bootcampに行ってきました

mozaic bootcampとは

講義形式のトレーニングです。講師はJxckさん矢倉さんです。
4/28-5/1の4日間、10:00-17:00の時間のスケジュールでした。
Webの仕様を中心に、Web系開発者が知っておくべきことが詰め込まれていました。
mozaic.fmが4日間朝から夕方まで続く感じです。

場所

一休さんのオフィススペースを貸していただきたました。一休さん本当にありがとうございました。

形式

大雑把に

  1. ncコマンドでHTTPを手書きしてexample.comにHTTP Requestしてみる
  2. TCPサーバーを立て、そこにブラウザでアクセスして、送られてくるHTTP Requestを見てみる
  3. Wiresharkで通信を見てみる
  4. 重要なポイントについて仕様を読む
  5. Jxckさんから解説がある
  6. 仕様に他のオプションが書いてあれば、その動きを試してみる
  7. 以上を踏まえて、「〇〇(←ありがちな要件)を正しく実装するにはどうするべきか」を問われるので、自分なりに実装してみる

というサイクルでした。
質問はその場で聞くことも出来るし、所定のチャットに書き込むこともできました。
自分は同期的に聞いておかないとわからなくないそうなことは前者、補足事項のようなことは後者というように使い分けていました。

内容

  • HTTPのスタートライン( GET /foo HTTP/1.1 のこと)
  • HTTPの文法
  • Content-Length
  • Content-Type
  • Content-Encoding
  • Keep-Alive
  • Transfer-Encoding
  • HTTP Status Code
  • リダイレクト
  • noreferrer
  • HTMLのForm
  • キャッシュ
  • Cookie
  • Origin
  • Same-Origin Policy
  • RESTFul
  • Mixed Contents
  • 認証
  • TLS

などでした。
最終日は、ここまで学んだことを総動員して「正しいサインアップ・ログインフォームを作る」という実技演習がありました。
これが一番楽しかったです。

何ではないか

特定の言語・フレームワークについての解説ではないです。
最新の機能についての解説でもないです。
とりあえず動くものを作って楽しもうという感じでもないです。

きっかけ

僕はmozaic.fmのリスナーなので、mozaic.fmで知りました。
僕は最近、自分がとっくに初心者を脱しているものの、その先のステップで伸び悩んでいるという自覚がありました。
特に、僕のように独学でやってきた人は、「特定のパターンに落とし込めばWebアプリなんか簡単に作れてしまうが、しかし網羅的な知識はない」という人が多いと思います。
世の中には初心者向けの教材はたくさんありますが、中級者以上のための教材はあまり多くありません。
色々模索していた時にこのbootcampを知り、その内容の説明から「自分にちょうどいい難易度ではないか?」と思い応募してみました。

雰囲気

ガチンコ! ファイトクラブみたいなノリだったらやだなと思っていましたが、Jxckさんも矢倉さんも他の参加者のみなさんも優しかったので安心しました。
まず、他の参加者の方がとても真剣だったので、いい場所に来たなと思いました。それが一番大事なことだったかもしれません。
手を動かす→話を聞く→手を動かす、のサイクルだったので集中が途切れず最後までついていくことができました。
初日はみんな緊張していましたが、矢倉さんがいい感じにJxckさんに質問を挟んで場をほぐしてくれました。
真剣さと和やかさが7:3くらいで、とてもちょうどよかったと思います。

飲み会

最終日の後にみんなで飲み会に行きました。普段の収録の裏話や、他のpodcastの話、各技術コミュニティの話、URLはどうなっていくか、キャリアの悩み、ビザの話、好きな言語の話などをしました。

感想

そもそも僕は基本的なことをだいたい知っていると思っていました。
しかし、今回これに参加したことで、自分が如何にWebの基本をわかっていなかったか思い知らされました。
僕ぐらいのレベル感の人が、まさかHTTPのスタートライン(GET / HTTP/1.1)やFormタグやCookieに知らないことが詰まっているなんて思いもよらないです。
僕は、特定の1パターンを知っているだけで、それ以外のところを全く知りませんでした。
結構クリティカルな思い違いに気づいたこともありました。
ある意味とても不安になりました。
しかし、仕様の読み解き方をみっちり教わったので、これからは自分で乗り越えていけるだろうという感触も得ました。

素晴らしさ

まず、4日間という長さです。体力的にも結構きついし、それだけのスケジュールを抑えるのは普通の人には大変なことだと思います。(幸か不幸か僕はスケジュールを抑えるのに何の苦労もありませんでした)。しかし、Webを使って何かの機能を正確に作ろうと思ったら、Cache-ControlとCookieとSame-Origin Policyの正確な知識は確実に必要です。そしてそれを学ぶにはどうしても4日間は必要だった思います。そこを頑張り抜いた価値は合ったと思います。

次に、必ず仕様を元に説明される点が良かったです。自分が教える側だと、「こうしたら動くから」と説明してしまうことが多いです。しかし、それでは他の選択肢を知る機会がなく、欲しい機能が仕様に含まれているにもかかわらず自分で再実装してしまったりするでしょう。逆に、「〇〇ヘッダーを入れておけば安全」と思いこんでしまって深刻な脆弱性を作ってしまうことにつながります。必ず、まず仕様を読むということが大事なんだと学びました。

更に、他の参加者さんがいたことが大きかったと思います。というのも、一人で話を聞いていると、本当はわかってなくてもわかった気になってしまうことが多いからです。そんな時に、他の参加者さんが言語化しにくい疑問点を言葉にして聞いてくれるので「そうだ、僕はそこがわかってなかった」と気づくことがあります。

最後に、あまり本題の邪魔はしない範囲で、こういう機会に普段から気になっていたことを聞けるのがいいと思います。
僕は、「普通の中小企業は自前でPassword管理をせずOAuthやFirebaseを使ったほうがいいと思うがどう考えるべきか」「ブラウザにはDigest認証やクライアント証明書などのセキュアそうな認証機能があるが、いまいち流行ってないのはなぜか」と言うようなことを聞けました。

次回参加者へ

次があるのかどうか全くわからないですが、もしあったときのためのアドバイスをしたいと思います。
まず、このための言語の勉強はほとんど不要だと思います。今回はRubyを使いましたが、最低限の文法(ifとか forとかpとか)がわかれば大丈夫です。
このためにHTTPについて予習する必要も特にないと思います。
一番大事なのは普段からたくさんWebアプリを作って引き出しを増やしておくことだと思います。