子育てとプログラミングって、全く関係ないようで 実は共通している部分があると思います。
例えば、何かサービスを作るときは、完成したイメージが頭の中にありますよね? 子育ても同じで、自分が思い描く成長後の子供をイメージしませんか? こういう子に育ってほしいなど思い描いて、子育てしませんか?
今回は、開発と子育てを関連づけて話していこうと思います。
子供にはcatchできない例外は多い
子供が小さい頃は、何をするか予想つきません。 食べ物以外のものを口に入れたり、壁に落書きしたり、物を壊したりと、一般的にやらないことを当たり前のようにやります。 そういった予想もつかない行動をしたときに親はどう対応すべきでしょうか?
答えはありません。
その都度、親も子供を知り学んでいくのです。
開発初期の頃は、仕様通りに実装したつもりでも、意図しない例外が起きたりしますよね? 例外という想定外のエラーを知り、改善していくのと同じです。
cacheできる例外処理=叱る
子供が悪さをしたとき、つまりしてはいけないことをしたときは叱りますよね?これは当然のことですし、子育てには必要不可欠なことです。 これは親の頭の中で、子供がこれをやったときには叱るという例外処理が出来上がっているためです。 プログラムでは以下のような表現になります。
try { 〜 }catch(他の子を叩く例外 e){ 叱る() }cache(家の物を壊す例外 e){ 叱る() }
ここで注意してほしいのは、叱るは何もきつく言う必要はなくて、子供に納得させるだけいいのです。 きつく叱ったときに逆に子供が不機嫌になることのほうが多い気がします。
子供が不機嫌になると、親の言うことを聞かなくなる傾向にあります。(経験上) 不用意にきつく言わない方が、子供は聞く耳を持つと思います。
cacheできない例外はどうする?
先ほど、やってはいけないことをやったときに叱ると言いましたが、 では、「やるべきことをやらなかった」場合はどう対応しますか?
やるべきこととは、例えば学校の宿題とかですね。
親の行動として、3パターンあると思っています。これは各家庭の教育方針によって変わります。
- 叱る
- 怒る
- 放置(子供に任せると言う意味で)
叱る
先ほど、「してはいけないことをした」場合には叱る必要があると言いましたが、 今回はやるべきことをやらないについてなので、疑問に思うかもしれません。 しかし、言葉を置き換えてみると、「してはいけないこと」を「宿題をやらないこと」とすると しっくりくると思います。つまり、宿題をやらないことをする=宿題をやらないになります。 この場合の親の中では、宿題をやらないという例外処理ができていることになります。
try{ 宿題をする() }catch(宿題をやらない例外){ 宿題の必要性を教える() }
ここでの叱るは、子供になぜ宿題が必要なのかを納得してもらうことです。
怒る
ここで「怒る」という言葉がでてきました。 子育てをする上で、「叱る」と「怒る」を区別することはとても大事なことです。
私は、子育てをする上で「怒る」こと自体、不要だと思っています。 なぜなら、「怒る」は子供が自分の思い通りに行動しないことに対して苛立ち、 子供に強い言葉をぶつけ恐怖心を与える行動だからです。子供にとっても一時的ではあるものの精神的にダメージが大きいと思います。
怒るという行為をプログラミングで例えるなら、意図しないエラーは全て同じ例外にしてしまうことだと思います。
try{ 宿題をやる() お風呂に入る() 歯を磨く() }catch(子供が言うことを聞かない例外 e){ 怒る() }
怒ることで子供が思い通りに行動しますか? 本当に行動できる子供は怒らなくてもできるものです。
怒るのではなく、叱るまたは教える必要があります。
親としては考える必要がなく、とりあえず怒る。楽ですよね。 子供にとってはどうでしょう?なんで怒られてるのか理解していないかもしれません。
システムに例えると、全て500エラーで処理することですかね。 利用者はなんでエラーなのか知りたいはずです。子供もなんで怒られてるのか知りたいはずです。
理想は例外ごとに処理を追加することが必要だと思います。
try{ 宿題をやる() お風呂に入る() 歯を磨く() }catch(子供が宿題をやらない例外 e){ 宿題をやる必要性を教える() }catch(お風呂に入らない例外 e){ お風呂に入る必要性を教える() }catch(歯を磨かない例外 e){ 歯を磨く必要性を教える() }
もちろん、必要性を教えたところでできるとは限りません。 そのため、その都度、例外を追加するなり、条件分岐などを追加して対応をしていく必要があるのだと思います。
放置する
これは聞こえは悪いかもしれませんが、ここでは子供の意志に任せると言う意味での放置です。 親としては、宿題をやらないことが例外ではなく、正常処理として捉えることになります。
宿題をやる() if(宿題をやった場合){ 褒める() }else{ 先生に叱られるかもしれないことを伝える() // なくてもいい }
基本的に子供の意思に任せますが、親の希望通りの行動をした場合は褒めてあげるようにしましょう。
子供に限らず、人間だれでも褒められると嬉しいものです。 やったことに対して褒められると、もっと頑張りたくなります。 逆にやらないことに対して怒られると、そのときは仕方がなくやりますが、継続はしませんよね。
結局は親次第
子供がどう成長していくかは親次第です。システムもゴールは同じでも中身は開発者によって違います。要はシステムも開発者次第です。
教育に正解はありません。だからこそ、トライアンドエラーの繰り返しが必要にです。 宿題をやらないから、宿題をやりなさいと言い続けても、やるようにはなりません。
宿題をやりなさいと言ってもダメなら、宿題をやったときに思い切り褒めてみようなど、 対応を徐々に変えていくことで子供も変わっていくのだと思います。
プログラムに関しても、この実装は効率が悪いから、別の方法で実装してみようなど開発者にとっては日常茶飯事です。
親はだれでもいい子に成長してほしいと願うものです。開発者はいいモノを完成させたいと願うものです。
子供が無事に独り立ち、つまり無事にリリースされるまで親の教育はとても重要です。