プログラム学習中ににっちもさっちも行かなくなることをhelplessnessと名付けよう
プログラミングをしているとにっちもさっちも行かなくなるということがたまにある。具体的には以下の場合である。
- 予想していたのと違う場所のデータが変更されている!
(実際は、値渡しと参照渡しを理解していない) - バグの場所が分からない
(実際は、狭める方法である二分探索やデバッガを知らない) - 複雑すぎて扱えない
(実際には、オブジェクト指向や構造化プログラミングなどを知らず今の目的上無視できるものは何かを認識していない) - 以前に上手くいっていたことが、エラーが出てできない
(実際には、パスや経路表など何かが変更されている) - どうすれば精度が上がるのか/事項が理解できるのかが分からない
(たとえば「割り込み」や「関数定義」、倍精度、ビットシフト演算について、しっくりこない)
僕はこのような状態を「手を尽くしたあとの膠着状態」と呼んでいたが、helplessness(どうすることもできないこと、無力)という単語が一番しっくりくる気がした。
この概念は注目に値すると僕は考える。というのはこの概念は、googleで検索することで解決されない問題について扱っているからだ。
解決に結びつく情報を得られるという意味で適切な検索クエリを思いつけない場合、
- 情報を知っていそうな人に聞く(Stack OverflowやGithub Issue)
- 情報を得られそうな試行をする
の2つの試みがあると思う。前者をやるだけの勇気がない若しくはそこまで明確に問題を把握できていない、把握できない(たとえばMakefile上の問題などは聞くことが非常に困難)場合、helplessnessに陥っていると言えるだろう。
「どう考えても自分としては解決に結びつくとは思っていなかったが、やってみたらふと問題の所在が明らかになってhelplessnessという平衡状態から事態が動いた」という状況を何度も経験したことがある(もちろん解決する割合としては試行全数に対して数%に過ぎない)。
そう考えると、この解決する割合を向上させるためには、helplessnessという状態の特徴についてより良く理解すべきではないかと思うのだ。
この概念についてはとりあえず今日は名前を付けるだけにして、今後ゆっくりと考えていくことにする。