The paradigm shift

saboyutaka’s diary なんかかく(ブログn回目)

Hack Yourself ~グロースハックと学習のためのbrain hacking~

1月から始まったプログラミング講座で講師をさせて頂いてて1ヶ月半くらい経過して、受講者の間で日々コードを書いてる人とそんなに学習が進んでない人の差が大きくなったのでこういう話を受講者内Slackに書き込みしました。

以下内容

Hooked を紹介、ハマるしかけはHookedの日本語訳

心理学者が書いたものに対する依存性・中毒性をどう作るかを解説した本だけど

グロースハッカーはみんな読んでる良書で、サービス、商品にたいしてどうユーザー・消費者を中毒症状にさせるかという話

アプリをたくさん使ってもらいたい!自分のサービスを毎日使ってほしい!っていうのは心理学からすると中毒症状そのものなんですよねー

毎日FacebookTwitterを開くことの中毒症状をいかにつくるか

中毒症状にハメるステップとして外的トリガーと内的トリガーがあって、外的トリガーが外からの刺激、内的トリガーが内なる刺激、欲求

最初は外的トリガーで誘いつつ、じわじわと内的トリガーが発生する状態に持っていって、内的トリガーだけでぐるぐる回るようになると中毒症状の完成

で、なんでここでこれを出したかというと、勉強もこれと同じで。やりたいことがあるなら自分を中毒症状に持っていくと楽なんですよね

スクール通うとかは外的トリガーなんですけど、スクールの間で内的トリガーに切り替わる事が出来なければスクールが終了した後に学習をやめるのは目に見えてるので どうにか自分を中毒症状にするように脳をhackしていく必要があります

ぼくは何か学習したいと思ったら、毎日それを習慣にして、無意識に耳に入れたり、それをやってる人と何度もあったり、それに関するtweetを頻繁に目にするようにしたり。結構外的トリガーを整理して環境を作ると内的トリガーに切り替わりやすいという自分の中の実体験、自分の脳の仕組みを少し理解してるつもりなのでそういう感じで仕向けます

やる気って過大評価されますけど、やる気ってあまり関係なくて、脳を中毒症状に持っていければ勝手に自動的に学習する習慣がつきます(たぶん

本の中でも出てきますが、何か自分がアクション起こした時にインセンティブが発生するとスパイラルがぐるぐる回り始めます。

twitter、FB、Instagramだと投稿にいいねがつく、とか。

勉強した自分に何かインセンティブがつくような設計してたほうがいいです、あとはハードルを高く見積もらないこと、自分を褒めてあげること、やってない自分を責めないこと

happy brain hacking ❤

過去にすごい学習に時間を使ったことがある人は、自分を学習モードにするコツをなんとなく理解してたりするので、何か学ぼうとなった時自分をそう仕向ける術を知ってるので楽に学べたりします

逆にその経験がないと、学習できないことへの劣等感で先に進めない人もいます

若いうちに自分の学習パターンを把握してるとあとの人生が楽なので、若いうちに把握するのオススメ。学校教育ってそういうところでもあるんですけどね、何を学ぶかは何でも良くて、自分がどういう学習方法が得意かを自分で把握する期間

僕は資格たくさん取ろうと学生時代ずっと勉強してたのでその時に自分にあった学習パターンを見つけれてて、それが今でも活きてる感じ

紹介してる本はこちら

Hooked が原著

Hooked: How to Build Habit-Forming Products

Hooked: How to Build Habit-Forming Products

ハマるしかけ は Hooked の翻訳本

モチベーションでかなりパフォーマンスが変化すると自分の性格を自覚しているので、精神論苦手で"がんばる"とか"やる気"とかいう言葉はあまり信じないようにしていて。自分が学習する時に取り組んでる方法を書いてみました。

学習するのに外的トリガーを無理やり作る方法として、プログラミングスクールに入ったり、英語を学ぶんであれば海外の英会話スクールに入ったりはアリ。だけど長いあいだ技術を学ぶにはふとした時にやろうかなと内面から出てくる感情を育てる必要があってその感情、内的トリガーに切り替える必要がある。これがないとスクールが終わった途端にやらなくなる。みなさんも経験あるのでは。

ゲームやSNSって気づいたらハマってるんですけど、勉強って誰もハマるしかけを作ってくれないので自分で作る必要があります。(だいたいの場合

Progateとか初学者の方にとてもよくてオススメしてるんですけど、Progateはどんどん出来るけどそこから先がうまく進めないという人がたまにいて、それはProgateが丁寧にハマるしかけを作ってくれてるんですけど、それ以降の学習はそのしかけがなくなるので補助輪外されたような感覚で急になにも出来なくなる感じとか。あったりしません?

プログラミング学習のHookedモデル設計

f:id:saboyutaka:20180302023115p:plain

アクションにつながるような内的トリガーは超個人的な感情。○○さんがやってるからやりたいとか、○○するとモテるとか、かっこいいと思われるとか。恐怖の感情も、やらないと将来不安とか、普通の仕事は出来る気がしないからプログラミングしかないんだとか、絶対にこの状況を変えてやるとか。Hookedモデル的には快楽の感情よりも、負の感情の方がより強力。

以下はぼくが思いつくしかけをあげてみます。自分にあった環境を作ってみてください。

外的トリガー

  • スクールに通う(強制的にスケジュールに入る、意識の近い人と触れ合える)
  • シリコンバレーとか行く
  • 勉強会に行く
  • rebuild.fmを毎回聞く
  • Twitterで技術系の発信している人をフォローする
  • はてなブックマークのテクノロジーを毎日目に入れる
  • Githubの気になるプロジェクトの通知を受け取る
  • メンターを見つける
  • Youtubeの技術系チャンネルをお気に入り登録する
  • TED見る
  • エンジニアから起業した人とかの本を読む

トリガーは意識的に設計して環境整えるのが大切。普段の生活に取り入れる事が重要、やる気がなくても出来る事を準備しておく。

アクション

  • コード書く
  • 情報を見る、聞く
  • 勉強会、カンファレンスに参加する
  • 人と知り合う

あまり高い意識を持ってやらなくても良い。小さく始める。

リワード

  • 書いたコードが動いて嬉しい
  • わかる事が増える
  • できるだけゴールを短く見積もって達成感を得るようにする
  • 数値化出来るものは定期観測して成長を実感する
  • アクション出来たらカレンダーに○を付けてそれを眺める

楽しい、嬉しいが大切

インベストメント

  • アウトプットして人に見てもらう
  • ブログ書く
  • Githubで公開する
  • 自分のライブラリ公開する
  • 勉強会、カンファレンスで発表する

褒めてもらえる、共通点を持った人が増えてまたアクションに繋がる

みたいな感じ。

おわりに

今日この話をして、3月の講義が終わって5月のGW中の休みに、あ、これやってみようかなと自分で思ってコードを書いてるかどうか、が今後の学習を継続するにおけるKPIです、みたいな話をしました。

全員がうまくいく方法ではないとは思いますけど、理解出来る人はいるかも。 よかったら参考にしてみてください

Happy Brain Hacking❤️

ISUCON7 競技者として、コーチとして、出場してきました

f:id:saboyutaka:20171024104705p:plain

isucon.net

このブログでもいくつか記事を書いている通り半年間、沖縄のノンプログラマーな学生3人にISUCONを通してプログラミングを学び、それをもとに就職活動しよう、みたいなプロジェクトをやってきました。今回はその半年間の集大成としてのISUCONに参加してきた、というやつです。

競技者として

github.com

まずは競技者として、手短に。ISUCON7に「okinawa.rb」というチーム名で参加してきました。結果としては、スコア的に敗退、最終のbenchでもfailしてしまい惨敗でした。

名前の通り okinawa.rbに普段参加しているメンバー(@tompng, @siman-man)で出場しました。構成としてはぼくが、インフラ周りを触って、ぺんさんとしーまんさんにアプリケーションコードを見てもらう感じでやりました。今回のアプリについては他の方もたくさん記事を書かれているので省略しますが、アプリケーションコードの具合ではかなりいい線言ってるんじゃないかと思ってます。ぺんさんとしーまんさんのRubyへの知識や引き出しの多さ、手の速さは本当にすごくて、僕が手を出そうと思ったらすでに着手してる、すでに完成してるという具合でアプリケーションコードほとんどおまかせしていました。題材の特性上nginxが今回の一番のボトルネックだったところを自分が解決できなかったのでここさえどうにかなればいい線言ってたのではと思うとくやしい思いです。だけど普段から触ってないので知識不足が根本的な原因だと考えると単純に力不足だったなぁという印象。競技が終わったあとのdiscordやtwitterでの感想戦は本当に勉強になりました。

沖縄でもぺんさんやしーまんさんのようなハイパーなエンジニアがそばにいるというのは励みになるし、来年も機会があれば出場できたらなぁと思います。インフラ周りの知識をもっともっと勉強したいなぁと思う大会でした。

ISUCONを支えて頂いている全ての関係者の方に感謝します。ありがとうございました。

コーチとして

最初にも書きましたが、半年間じゅりまさよし福地だいすけにISUCON予選を突破するためにwebプログラミングを教えてきました。それぞれ「仕事ください」、「まさ」として出場して、結果としては敗退という形になりました。

matsuda-juri.hatenablog.com

masa-world.hateblo.jp

yuki-f-oki.hatenablog.com

この半年間の方針として教えてきたことは

  • webのベースとなる基礎知識をちゃんと付ける
  • 数値を計測して、それをみて改善を行う
  • nginxやmysqlの最低限の設定を覚える
  • 静的ファイルはnginxに担当させる
  • DBのインデックスを貼る
  • N+1を解決する

とwebアプリケーションのチューニングにおける基礎中の基礎をしっかりやる。それをちゃんと時間内にやることができれば学生枠での予選突破はできるんじゃないかという前提でやってきました。しかし今回のアプリケーションはISUCON7 予選問題の公開と解説にもあるように、

倍率が高くなった現代のISUCONにおいては、多くの参加者にとって予選こそがISUCONになるということを念頭に、ISUCONの醍醐味で予選でまだやってないのはなんだろうと考えたときに思いついたのが複数台構成でした。

と複数台構成になっていて、かつ裏の設定ではCDNを通してアプリケーションにアクセスが来ているという前提のアプリケーションになっててこれは例年でいうと本戦相当のかなり複雑なアプリケーションになっていました。CDNが前段にあるというシチュエーションを経験したことがなく、かつアプリケーション側のボトルネックAjaxで来るリクエストだったと言うものもありRuby側でのprofilingも困難な状況、などなど今でやってきた基礎知識では想定されていない問題が出てしまい手も足もでないという形になってしまいました。

これは僕の読みとして

  • 複数台構成は予選では来ない
  • 予選はわりとベーシックな構成で基礎をちゃんとやっていれば予選突破できそう
  • nginxやmysqlでのトリッキーな出題はあまり来ないのでは

とかが外れた形になって申し訳ないという感じです。僕のnginxの知識の少なさや大規模サービスでCDNを使った経験が無いことが、nginxについて深く教えれなかった事は責任を感じてたりします。。

とは言え、往年のweb開発者でも今回の問題を解決できず爆死しているのを見るあたり、半年間の知識でこんなの解決できるかよって感じなのでしょうがないとしか言いいようがないかも、というのもあります。

当日やってるのを見て

f:id:saboyutaka:20171024225844j:plain

僕は土曜日に参戦したので、日曜日はまさチームの後ろ姿を見ながら仕事してました。競技中はヒントを与えることはできないので後ろから見守りる形にでしたが、、あぁそこ違う、とか、お、よく気がついたなとか思ったりしてました。半年前はプログラミングをほぼ未経験だったことを考えると、ISUCONのコードをチューニングしている姿を見るとよく半年でここまで来たなぁ、という思いがあって感慨深いなぁと思ったりしました。いま、3人のブログの4月ぐらいの投稿から見直すとだいぶ無知だった状態から少しずつ着実に成長している姿が見て取れて結構おもしいろいです。

今回の全体を通しての活動

結果は敗退となってしまったけど、この半年間で彼らにwebアプリケーションとは、プログラミングとは、エンジニアとはとか、エンジニア界隈の人々がどんな人達なのか、エンジニアの生き方とは、みたいなところを少し垣間見せる事は出来たんじゃないかなぁと思います。

まさよしは、今回の活動を通して、ハッカーズチャンプルーでLT登壇したりCODEBASEで彼が感じたエンジニアという生き方を語ったり。就職活動としてはISUCON予選出場前にみんなのウェディングさんに内定もらったみたいです。Rubyist界隈としてginza.rb開催していたりRubyKaigiスポンサーをされていたりで、いい会社に内定もらえてよかったなぁと思います。

じゅりは、ISUCON夏期講習に参加して、そこで講師をされていた方がいる面白い会社インターンに行ったりしたみたいです。彼的に大尊敬できる師匠がいる環境下でこそ輝ける感があるので、ぜひその会社に入ってほしいなぁとか思ったりしてます。(願望

福地は、予てから考えてたエストニア留学に踏み出すみたい?です。もともと就職活動前提で動いてないので今回の経験が今後どう生きるかはこれから次第だけど、自分がやりたいようにやるといいと思うよーという感じ。学生のうちから焦らなくても20代長いので好きにやるといいよと言うのが個人的な感想。

就職したいけど就職活動したくない、エンジニアとして働きたいとなんとなく思っているという3人と関わって、ISUCONを通して色々見せれたかなぁと思って個人的には満足してます。就職すると決めていた2人に関してはちゃんと正しい会社、正しい人たちに繋げることが出来たと思っててエンジニアとしてはちゃんと正しいトラックに載せれたかなと思ってる。地方の学生がエンジニアとしていい感じに就職する難しさを感じてるのでそれを今回はうまくやれたかなと思っててよかった。

とりあえずISUCONは一旦終わりなので、3人のやる気があれば次はRailsかLaravelとか教えていったり、アプリケーション書くバイトかなんか振ったりして実際の仕事につなげて行けたりすると楽しいかなと思ったりしてる。基礎をしっかりつけたのでここからWAFさわるとかなり学びがありそう。

学習の題材としてのISUCON

今回ISUCONに出場すると決めたのはわりと思いつきだったけど、webアプリケーションを理解するという意味でISUCONはしっかり基礎をつけないと戦えないというのもあり、OS, Webサーバー, Appサーバー, DB, アプリケーションをちゃんと着実に学ぶ機会があるので題材としてかなりいい感じだった。3人1チームでやるというのも良くて半年間、わりと長い期間3人で教えつつ支えつつでモチベーションを保つのに良かった。あと学習としてゴール、目的が明確なのは動機としてわかりやすくて良くて、スコアが数値として出るので他の人と比較ができるという点でもいい感じだった。

ISUCON最高

来年にむけて

また来年もISUCON出たいという学生が沖縄にいたら教えていきたいなぁと思ったりしてる。人数も3人から9人くらい?3チームくらい教えれるとおもしろいかなぁと思ったりする。けど時間的余裕を作る必要があるので、講師を複数にしたり、スポンサーとかいたりすると仕組みとしていいなぁと思う。

なので、出場したい学生募集してます。講師やりたいという方、またスポンサーやってもいいよという方、企業の方、いたら連絡ください。