web-dev-qa-db-ja.com

「ノートブック」スタイルのプログラミングを他のベストプラクティスと調和させる方法

ほとんどのコードを標準的な方法で記述しようとしています。それらには、とりわけ、短い関数を持つこの特定の質問に関連し、OOが使用されている場合は適切にカプセル化されたオブジェクト、関数の引数や戻り値が多すぎない(私は主に暗黙的に戻る言語で記述します)タプルは許可されますが、たとえばCでは、ほぼすべての状態を含む100フィールド構造体を返さないようにします)。これが生産性、正確性、知識の伝達に役立つと確信する必要はありません。

しかし、私は最近、(私の分野では)IPythonまたはMatlab LiveScriptsを使用した、「ノートブック」中心のプログラミングに非常に惹かれています。私はSWに関係のない研究をしているので、コードを書いているときに「何を探しているのか」がわからないことが多いので、これらは興味深いものです。そのような状況でのノートブックの利点は、データを一度ロードして多くのハウスキーピングを実行してから、多くの実験を開始し、Xの関数でYをプロットし、何かを実現し、チェックする代わりにXの関数でAをプロットできることです。などなど。

私がこれに関して抱えている主な問題は、どこでも壊れてすべてのデータを利用できるようにする必要があるため、主に純粋な手続き型コードの記述を奨励する「ノートブック」スタイルのプログラミングを見つけることです。関数ではなく「コードブロック」の概念も、その方向にあなたを押し進めます。

公平を期すために、私の現在のアプローチは、実際の研究プロセスに関してはばかげているわけではありません。内部状態やその他のベクトルを公開するためにコードの一部を書き直さなければならないため、コード全体を何度も再実行する必要がありますプロットします。

最後に、これはデバッガーに依存することで簡単に解決できると私が感じる問題ではありません。まず第一に、特定の状況では、pythonデバッガーが非常に遅くなります(これは大量のデータと処理が原因である可能性がありますが、ツールに関連している可能性があります:CLIpdbでパフォーマンスの問題が発生したことはありません(インターフェイスが最小限であるため、あまり使用しません)が、vscodeデバッガーは頻繁に機能しなくなります)が、さらに重要なことに、デバッガーを使用しても、関数がAを返した場合に、次の問題が完全に解決されるわけではありません。また、中間値であるBも、10分後、コードの後半で5つの関数呼び出しが必要でしたが、もう使用できません。

3
nathdwek

一般に、ノートブックと対話型開発インターフェースは、一緒に開発するコンポーネントを操作する単純なもののためのものです。必要な出力を提供する関数を記述し、ノートブックなどを使用します。それらをテストしたり、クイックランを実行したり、プロットやグラフを取得したりします。これらのインターフェイスを使用して関数などのプロトタイプを作成し、複雑になるにつれて外部モジュールに移動することもできます。

このスタイルを行う場合は、おそらくノートブックなどを設定する必要があります。ただし、インポートしたコードに加えた変更を最新の状態に保つために、モジュールなどをリロードする必要があります。

1
JAB