失敗を許容する「サンドボックス」が学習を加速させる
どうも、エンジニアのgamiです。
我が家には生後8ヶ月を迎えた乳児がいます。生後8ヶ月ともなると、アクロバティックに寝返り移動ができる、ずり這いやハイハイも間近といった状態になります。つまり、目を離すとめっちゃ移動してたりします。
とはいえ親も人間としてトイレに行ったり家事をしたりするので、常に弊娘を眺めているわけにもいきません。そこで、我が家のリビングにはベビーサークルが設置されています。
子育てを経験すると、「子供を自由に遊ばせておける安全圏」を用意することの重要性に気付かされます。子供を常には監視できない一方で、当然ながら子供が動けないように常にどこかに縛り付けておくわけにもいきません。子供が安全な場所で自由に動き回ったりおもちゃを掴んで振り回したりできる環境を作ることが、「親の負担を抑えること」と「子の成長を促進すること」の両立を実現します。
こうした「サンドボックス環境」が有効なのは、子育てに限った話ではありません。仕事において自分や他の社員が何かを学習するとき、自由に失敗できる環境を用意することが学習効率の向上につながります。
サンドボックスとは何か?
sandboxを文字通り訳せば、それは公園などにある「砂場」のことです。ソフトウェアの世界では、転じて「その内部で何をしても外部にクリティカルな影響を与えないような閉じた環境」のことをサンドボックスと呼びます。
サンドボックスが使われる目的は、主に2つあります。
1つはセキュリティの担保のためです。システムの機能の中には、ときに外部からプログラムを受け取って実行することがあります。そんなときは、仮に悪意のあるプログラムが紛れ込んでも深刻な問題を引き起こさないように、大抵はサンドボックスと呼ばれる安全圏の中でプログラムが実行されるようになっています。
2つ目は、検証のためです。たとえばシステムの開発や運用をするとき、いきなり本番用のシステムで仕様変更やバグ修正を行うと、新たなバグを埋め込んだりデータに不整合が出たりするケースがあります。そこで、プログラムやデータを修正する場合は本番環境ではなくまず検証用の環境で試します。それで問題がないことを確認してから、初めて本番にその変更が適用されます。こうした検証用の環境のことを、「サンドボックス環境」とか「ステージング環境」と呼びます。
こうした環境を「サンドボックス」と呼ぶとき、まさに子供が遊ぶ「砂場」がイメージされています。何をしでかすかわからない子供であっても、砂場で遊んでいるときは安全かつ自由に振る舞うことができます。砂なので転んでもあまり痛くありませんし、砂を使って自分が作りたいものを自由に表現できます。作るのに失敗したとしても、すぐに砂を崩してゼロから作り直すこともできます。
ちなみに、Netflixで配信されている韓国ドラマ「スタートアップ:夢の扉」では、ベンチャーキャピタルが運営するスタートアップ支援施設が主な舞台となっています。その施設の名前はまさに「サンドボックス」で、起業家が失敗を繰り返しながら安心して事業に向き合える場所として描かれています。
失敗が学習を加速させる
人は不慣れな分野で学習や活動をするとき、判断を間違えるのが普通です。たとえば学生時代に苦手な科目のテストを受けたときを思い出してみてください。きっとたくさんの誤答を出して点数がマイナスされたはずです。新しいソフトウェアを使い始めたときも、大抵慣れるまでは各機能の使い所やお作法がよくわからず効果的に使うことができません。
一方で、人は間違いを繰り返すことで効率よく学習することができます。自分の間違いを自覚したとき、初めて記憶が定着したり、思考回路を修正できたりします。
たとえば、僕は累計100人を超える同僚にSQLを教えてきました。
研修の中では受講生に実践問題を課すのですが、それを解く中で受講生は何度もSQLが吐くエラーに直面します。課題が解けずに悩んでいる受講生には、僕からエラーの読み解き方や対処方法を教えます。数々の課題に取り組む受講生は、次第にエラーと向き合うことに慣れていき、エラーの内容からSQLの修正すべきポイントがわかるようになっていきます。まさに、失敗を繰り返して学習ループを効率的に回している良い事例といえます。
ソフトウェア開発においても同じようなことが言えます。たとえば既存のソフトウェアを書き換える場合、エンジニアが学習すべきことは山のようにあります。使っているプログラミング言語やライブラリの仕様、その既存ソフトウェア自体の仕様、ある箇所を書き換えた場合の影響範囲、ソフトウェアが実行される環境毎の特徴や差異。エンジニアがそんな何もかもわからない状況で前に進むときも、ひたすら試して失敗して学習を積み重ねていきます。具体的には、自分のPC内に構築した開発環境でプログラムを書き換えてみて、意図した挙動になるかどうかを試しに実行してみます。それを繰り返しまくって、失敗の中で勘所を把握していきます。プログラムを書き換えすぎてどうしようもなくバグってしまったとしても、適切にバージョン管理をしていればプログラムを戻すこともできるし、環境構築手順が効率化されていれば開発環境自体を1から作り直すこともできます。
逆に失敗が許されない環境では学習効率はガクッと下がります。Googleが「心理的安全性」の高いチームこそ生産性の高いチームであるという研究結果を発表したのは有名な話です。
失敗を許容する環境づくり
自社に新しいシステムやSaaSを導入するときを例に考えてみましょう。特に汎用的で使いこなすのが難しいシステムの場合、「社員にどう使い方を学習してもらうか?」を考えないとその投資が無駄になってしまいます。もちろん教材や研修プログラムを用意することも重要ですが、最も大事なのは失敗しながら学べるサンドボックス環境を用意することです。
ここでいうサンドボックスとは、どんな使い方をしても周りに悪影響を及ぼさない環境です。たとえば、次のような条件を満たす必要があります。
・変な使い方を試しても本番運用しているシステムや業務に影響が無い
・使いまくっても大してお金がかからない
・変なデータが大量に生じたなど最悪の場合でも、環境ごと新たに作り直せる
SaaSなどのクラウドサービスの場合、検証用のプロジェクトを発行できればそれを検証や学習のためのサンドボックスとして利用できます。独自システムの場合でも、大抵は開発検証用のステージング環境があったり、環境を複製できたりします。
また、システムの権限管理も重要です。不慣れなユーザーに対して強い権限を与えすぎると、意図しない操作によってクリティカルな問題を引き起こしてしまう可能性があります。一方で、権限を制限しすぎても自由な検証や学習ができなくなります。ユーザーの立場や習熟度に応じた適切な権限を与えることで、リスクを抑えつつ、自由に試せる環境をユーザーに提供できます。
僕が働いている会社も、自由度と活用難易度が高いSaaSを提供しています。実際、最近入ったメンバーに対して「どのようにプロダクトの理解を深めたか?」を訊いてみると、「とにかく自分の検証環境で手を動かして試しに使ってみること」が重要であると答える人が非常に多かったです。
自由に振る舞っても怒られない、失敗が許容される環境を用意することは、想像以上に効果的です。ぜひ皆さんの身の回りでも、適切な「サンドボックス環境」を用意することで解決する課題が無いか考えてみてはいかがでしょうか?
ここから先は
仕事を楽しくするデジタルリテラシー読本
【初月無料】デジタル時代の歩き方について考えたことを発信します。ソフトウェアの時代とは何か。エンジニアの頭の中はどうなっているのか。NoC…
サポートをいただけると、喜びドリブンで発信量が増えます!初月無料のマガジン『仕事を楽しくするデジタルリテラシー読本』もおすすめです!