コラム

プログラミングの実装に行き詰まったときの解決策

コラム

こんにちは。ゲームプログラマーのメガネです。

プログラミングをしていると、解決するのが難しい問題にぶち当たり、気がつくと何時間も悩んでいたという経験はよくありまます。

そのまま放っておくと泥沼にはまってしまい、プログラミングが嫌になったり、とん挫することもありますよね。

そんなときにどうやって切り抜けるのかというと、私の経験では、

  • 新しいアイデアを探す
  • 思考を整理する

をやることで解決することが多いです。

悩み続けていると堂々巡りで答えは見えてきません。切り替えて、色々と試してみてください。

新しいアイデアを探す

視点をずらしてググる

ピンポイントでの検索は十分にやった後だと思いますので、少し視点をずらして周辺分野を含めて調べてみては。

実際に私が「当たり判定」を検索したときの話をします。

「当たり判定」で検索すると、単純な当たり判定のサイトがヒットします。1つ1つページを調べていくと、当たり判定で空間分割が使われていることがわかります。

そうしたら今度は「空間分割」を調べます。詳細な衝突判定の前に、空間分割をして大雑把な当たりを取るのが良いのが見えてきます。

また他の結果を見ていくと、ソートが使われていることもわかります。今度は、「当たり判定 ソート」で調べます。そうすると、「スイープ&プルーン」がヒットします。これまで聞いたこともなかったような手法かもしれませんね。

このように、ある特定のことを調べようとしたときに、検索結果でヒットした別な単語にずらしながら検索をしていくと、視野が広がります。

英語のサイトを検索する

日本語を読み書きできるプログラマーよりも、英語を読み書きできるプログラマーの方が圧倒的に多いです。

その分悩みを抱えている人も多いので、英語で検索すれば解決方法にヒットする可能性は高いはず。

googleの設定を変えることで英語にすることもできますが、日本語検索との併用が面倒です。なので英語で検索する際は、以下のようにgoogleにパラメータを渡して開くのがおすすめです。

https://www.google.com/?gl=us&hl=en&gws_rd=cr&pws=0

英語を読めなかったとしても、ブラウザの翻訳機能でなんとかなります。もし翻訳結果が分かりづらいときは、DeepLを試してみてください。

https://www.deepl.com/ja/translator

さきほどの「スイート&プルーン」は「sweet and prune」で調べると、より深い内容を知れるはずです。

本を読む

本は網羅的に情報が書かれている媒体です。

ピンポイントの解決策は載っていないかもしれませんが、解決の糸口につながる情報を発見できるかもしれません。

私も新しい発見をしたいときには、本を読むことが多いです。なんでもない時に読むよりも、必要なことを必要なタイミングで読む方が、真剣に読書に取り組めます。そのため、明確な問題があるときの読書はおすすめです。

私の場合は本を読みながら何かヒントになる文章を発見したら、その情報で問題を解決できないか、思考が回りはじめます。本は読み進めているものの、1文字ずつ追っているだけ。内容は全然頭に入らず、思考が展開されます。

そのまま解決策をひらめくこともあります。文字を追うという集中した状態のまま、思考を巡らせることが良い効果を生んでいる気がします。

ただし、考えている最中は本の内容が頭に入っていないので、もう一度読み返すことになりますが……。

思考を整理する

人に状況を説明する

今の状況を他人に説明すると思考が整理され、自己解決することが多いです。

アドバイスを求めるわけではないので、熟練者や上司じゃなくて全然OK。聞いてもらう人には悪いですが、後輩や身近な人に説明してみると良いでしょう。

説明するときは、「なぜ」「何を」「どのように」の順に話すと思考が整理できますし、伝わりやすいです。たとえば、以下のような流れですね。

(Why)「高速なソートアルゴリズムを実現するためにね」

(What)「クイックソートを実装しているんだけどうまくいかなくて」

(How)「具体的にはこんなアルゴリズムだよ」

話をしている最中に、矛盾している内容に自分で気づくことがあります。また、話すことで考えが整理され、課題が明確になる効果があります。

問題点を書き出す

もしすぐに話せそうな相手がいないときは、問題点を書き出してみることもおすすめです。

話すことよりも書くことの方が思考は整理されます。話すときは、完全に筋道が立っていなくても、補足をしながらなんとか伝えることはできますからね。

書くと論理的な矛盾に自分で気づいてしまうので、必然的に整理されます。

コードにバグがあり、うまく実行できないときは、アルゴリズムを書き出してみると解決するかもしれません。

中断して散歩する

体を動かすと思考が整理され、解決策をひらめくことがあります。

切りの悪いところで中断して散歩にでかけてみましょう。

切りの悪いところで中断すると、気持ち悪いですよね。先が気になって仕方がないです。

その状態で散歩に出かけると、頭の片隅で自動的に考え続けます。風景を見ているつもりが、ついつい頭の中でプログラムを組み立てる。ふとした瞬間に、手がかりをひらめくかもしれません。

このときに、万が一忘れてしまわないように、メモを取れるようにしておきましょう。スマホのメモで十分です。

一旦あきらめる

どうにもならないときは、一旦あきらめても全然大丈夫です!

リラックスしているときに不意にひらめくこともあります。

  • ご飯を食べる
  • 風呂に入る
  • 寝る

このように、全然違うことをしていたら、急にひらめくことがあります。お風呂の最中と寝る前は鉄板ですね(笑)。

まとめ

プログラミングに行き詰まったときの解決策について話をしてきました。

悩んでいる最中は堂々巡りになってしまい、解決に至らないことの方が多いです。新しいアイデアを探したり、思考を整理したりして、頭を切り替えるようにしましょう。

コメント