アルゴリズムを開発するとき、ペンと紙のフェーズをスキップするのは悪い習慣ですか?[閉まっている]


8

アルゴリズムを開発するときは、最初にペンと紙、フローチャートなどを使用して、アルゴリズム自体に集中でき、そのアルゴリズムの実装について心配する必要がない(つまり、時間)。

ただし、ほとんどの場合、実際にアルゴリズムをオンザフライで開発する方が簡単です。つまり、一般的な方向性がわかるまで問題について少し考えてから、アルゴリズムが現れて機能するようになるまで、コードの記述と変更を開始します。

これは私が変えようとするべき悪い習慣ですか?

回答:


11

実際のデータとパフォーマンスの制約が与えられた場合、厳密な紙の設計に入る仮定が十分に正確ではないことが判明するため、アルゴリズム開発によっては、多くの試行錯誤のテストとチューニングが必要になる場合があります。

たぶん、最適な「習慣」のためのどちらか、またはどちらかを選択するだけでなく、反復(think-code-test-think-code-test ...)かもしれません。


3

私が普段使っている中道もあります。事前に考えすぎたり、コードの詳細に夢中になったりしないでください...

TDD(テスト駆動開発)では、少し考えてから機能させることができます。次に、必要なものについてもう少し考えて、それを機能させます。以前のユースケースが常に機能し続けるセキュリティネットを備えています。手順は次のとおりです。

  1. テスト(つまり、ユースケース)を記述します。
  2. 失敗を監視し、失敗を理解できるようにします。
  3. コードを記述します。
  4. コードとテストをリファクタリングします。

2

これは、あなたの思考習慣とアルゴリズムの複雑さに依存します。

ペンと紙は、入力する各文字に対してコンパイラが叫ぶことなく、「自由形式」の考え方を提供します。

ペンと紙を使用する人の中には、時間をかけてループ制限を調整したり、別の値を試したりする人もいます。

したがって、筆記体が思考優先のアプローチを促進する場合に、テスト優先のアプローチを直接奨励するコードを記述すると思います。タスクが簡単であれば、その場でコーディングできます(十分な経験がある場合)。ただし、複雑なアルゴリズムでは、おそらく別の開発アプローチが必要になります。

ダイアグラムが役立つ場合もありますが、これには、それらを理解し、以前に使用したことがあることが必要です。


それが多かれ少なかれ私が尋ねた理由です。「最初に考える」アプローチは、長期的にはより優れたプログラマーになると思います。答えてくれてありがとう。
Daniel Scocco、2011

はい、でもあなたはそのような人ですか?一部の人々は、試行錯誤によって反復的にコードを開発し、他の方法で学習しません。
NoChance 2011

2

あなたのアプローチがより一般的なアプローチだと思います。アルゴリズムが特に複雑または困難な場合、アルゴリズムを理解し、一度に実装することは困難な場合がありますが、一般的に、ほとんどの人に役立つとは思えません。

しかし、私は、最初に文法のルールを発明し、そのルールを紙に書かずに(またはおそらく私が持っていない特別なツールを使用して)パーサーを実装したり、疑似のないBツリーを実装したりはしません利用可能なコード。

それがあなたに何らかの害を与えていない限り、私はあなたが悪い習慣を持っているとは言わないでしょう。


わかりました。そうですね、大規模で複雑なプロジェクトでは、紙に多くの時間を費やす傾向があると思います。
ダニエルスコッコ2011

2

これらの「多くの人々」は誰ですか?そして彼らは生計のためにプログラミングしていますか?あなたがやっていることは、ほとんどのプログラマーがやっていること、少なくとも私が知っていることのほとんどです。タイプするのが速いときは紙の使用はほとんどなく、高水準言語でプログラミングするときの疑似コードの使用はほとんどありません。時々、ペンと紙を使ってトリッキーなアルゴリズム(たとえば、ツリーの回転)を視覚化しますが、ほとんどの場合、高レベルのコードから始めて、徐々に空白を埋めていきます。

KLEと同様に、これはテスト駆動開発に続いてうまく機能すると思います。とにかくテストを書くつもりなら、あなたは最初にそれらを書くこともできます。


0

スタブのクラス、メソッド、テストを作成しながらデザインを作成できますが、詳細を作成している間に行き詰まる可能性があります

非常に複雑なもの(コンパイラーなど)の場合、ペンと紙のデザイン(または少なくとも一種のデザインツール)は、全体像を把握し、目を離さず、悪いデザインの選択を回避し、さらには選択を許可します。最初から特定のデザインパターン

しかし最終的には、全体像をどれだけうまく見続けることができるかにかかっています


0

実装にジャンプする前に、一般的な方向(「ペンと紙」の段階)をスケッチして、最も明白な要件/制約を取り除いて時間を節約することをお勧めします。

その後、さまざまな理由により、開発の後半でさらに制約が発生する可能性があるため、最初からすべてを推測することはできないため、この方法で微調整できます。

そうすることで、どこに行くのかはわかりますが、変更に適応することができます。


0

1.通常、必要な準備の量は、実行している作業の複雑さに比例します。四半期に1回使用され、1台のマシンのみで1時間シングルスレッドで実行されるアルゴリズムの場合、2日間丸ごと紙に書くのは意味がありません。1時間あたり50万件のリクエストを処理でき、ダウンタイムなしで24時間365日実行する必要がある新しい高性能磁束補償モジュールを設計するために、ペンと紙で3週間(必要な場合)を作成するのは理にかなっています。

2.コーディングしているソリューションを見ると、30秒以内に悪い習慣であるかどうかがわかります。あなたはそれが良い習慣か悪い習慣かを尋ねました。まあ、それはあなた次第です。あなたがプログラミングのキャリアの初めに遅い学習者であるなら、おそらくすべてを完全に詳細に書くことは良い考えです。数年の経験がある場合は、5分間考えてから実行するだけで十分です。もちろん、上記の1.に関してはまだです。

ボトムライン

あなたのコードだけが、多かれ少なかれペンと紙が必要かどうかを真実に伝えます。他の人にそれを指示させないでください。自分で見つけてください。それはあなたを学び続けます。

免責事項:これは、主流の考え方や常識とは異なる場合があります。それで大丈夫です。ブックマークを設定して、5年ほど後にもう一度読んでください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.