原文アドレス:Practical Guide to Solving Hard Problems
私は時々コードを書く必要があるが、どう書けばいいかわからないことがあります。あなたもそういう経験はありますか?困難に直面したときに私が取るステップは以下の通りです。大発見はありませんが、手に入れるのは容易ではありません。
- 何らかのコードを入力する前に、問題について数週間真剣に考える
- 関数またはクラスの入力と出力を定義する
- 機能を複数のステップに分解し、明確な目標を持つ。目標の達成方法がわからなくても、実装方法を抽象化して計画を立てることができます
- 具体的な実装がわからなくても、詳細な疑似コードステップを書く
- いくつかの簡単なステップを実装し、頭の中で実装をシミュレートして自信をつける
- 困難なステップを実装し、難しい部分を前述のステップに従ってさらに細分化して実装すると、自分の進捗に驚くことでしょう
- 実装の約 80% を達成した後、既存の実装方法を見つけて実装を助けることを試みる(このステップは個人的には最初のステップで実践する)
- 特に解決策が見つからない非常に困難な問題に直面した場合は、関連する問題をインターネットで検索し、他人の実装方法を比較して学び、自分の実装を改善するのに役立てる
- 助けを探しても関連する実践を持つ人がいない場合は、休息して自分をリラックスさせ、いつインスピレーションが訪れるかわからないかもしれませんが、例えばシャワーを浴びるときなど
これらはすべてのプログラマが取るであろうステップだと考えていますが、時にはそれを口に出すことも良いことです。
私は機能の分解を特に重視しています。関数は強力な抽象化であり、コードを少なくするだけでなく、問題を考えるためにも重要です。
私が "関数" という用語を使用することについて誤解しないでください。それは関数型プログラマが好むものだけを指すと考えるべきではありません。私が指すのは、任意のデータ変換器です:低レベルのラムダから状態を持つ IO 処理の単一オブジェクトまで。
お読みいただきありがとうございます!さあ、困難な問題に取り組んでみましょう!