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