詳細については、ビデオと要約をご覧ください。 注:一部のコード例は、コンピューターで実行することはお勧めしません!
公開レッスン中、教師はJupyter Notebookで生成されたスライドを見せました。
それでは始めましょう!
では、Pythonで書いてみませんか?
資料の提出の便宜のために、プログラミングプロセスで使用してはならないテクニックのリストを作成しました。 各例には、視覚的なコードサンプルが付属しています(ビデオで無料で視聴できます)。 主なアンチパターンについて簡単に説明します。
- おむつパターン。 それはいわゆる「おむつ」パターンについてでした。これは通常、幅広すぎるトライ例外を意味します。 たとえば、何かのラッパーである関数を呼び出します。たとえば、データベースのクライアントをラップします。 良いケース(システムが小さい)では、99%のケースですべてがうまくいきますが、システムが大きい場合、問題の確率は最良の方法で乗算されません。 その結果、何かが絶えず落ちたり壊れたりします。
- 反グローバリズム。 一部の例外的な場合を除いて、グローバル変数は非効率的であることは誰もが知っています。 属性などの形式ですべてを関数などに渡して、目的の結果を達成することをお勧めします。 ただし、可変オブジェクトを使用するという「素晴らしいアイデア」を思い付く人もいます。 それは、グローバル変数ではなく、可変オブジェクトを関数に渡し、それらを内部で変更し、何も返さないことにあります。 実に、C言語からのプログラミングテンプレートの一部がPythonの世界に転送されました。
- 天国への階段。 ご想像のとおり、これは「天国への階段」です。 この問題は、単純な図で最もよく特徴付けられます。
- Javatar。 この計画の誤りは、多くの場合、何らかの理由でJavaからPythonに切り替えたプログラマーによって行われます。 当然、独自のチャーターが付属しているため、Python開発ルールにまとめて違反しています。 これは非常識なインデントとキャメルケースの出現であり、より多くのクラスを作成したいという願望です。その結果、コード構造はより複雑になります。 300行のサイズのスクリプトが不要な場合、10〜20個のファイルが表示されます。
- オーバーエンジニアリング。 非常に多くの場合、プロジェクトの2回目の反復は完了しないか、複雑すぎる方法で実装されます。 これは、既存の欠陥のあるコードを書き直したい場合に理想的です。 同時に、最高は善の敵であることを忘れます。 その結果、実装がタスクを解決するのに必要なものよりも高価で、重くて扱いにくくなると、プログラマーはリエンジニアリングの標準的なtrapに陥ります。 実際、家族のセダンは毎時最大350 kmの速度に達し、スマートフォンは毎年変化し、100年間働く必要がありますか?
- ワンライナー もう1つの緊急の問題は「単一ライン」です。 それは、すべてを1つのライン、5フロアのコマーシャルに押し込もうと、うらやましい熱心に取り組んでいるプログラマーについてです)。 コードの過度の複雑さと、Pythonでの機械正規表現の実装の特殊性により、このようなスクリプトは解析に「固執」することがあるため、問題を修正するには特別なモジュールを使用する必要があります。
- 読み取り時コピー。 これは、Pythonプログラミングの機能ほどエラーではありません。 多くの人がコピーオンライトアプローチに精通しています。 彼の考えは、データ領域を読み取るときに共有コピーが使用され、変更が行われると新しいコピーが作成される、つまりパフォーマンスプロセスの最適化について話しているということです。 Pythonについて話す場合、場合によっては要素の配列を読むだけでなく、メモリ内にあるすべての基本構造を参照します。つまり、メモリを「書き換え」て変更します。 したがって、コピーオンライトの代わりに、メモリを読み取っているように見えるときにコピーオンリードを取得しますが、実際にはこの情報を親スペースから子プロセスとして自分自身にコピーする必要があり、最適化は機能せず、消費量は増加しています。
- フォークはありません。 フォーク-新しいプロセスの出現をクローンします。 この問題は、Unixシステムでの作業の詳細と、実装に隠されている一部のデータ構造の非自明性に関連しています。 「分岐」プロセスとは、スレッドが何かを入れるためにキュー内のログを取得したときに開始されるプロセスを指します。 つまり、発生した新しいプロセスも何かを記録したいのですが、このためにこのキュー自体からログを取得する必要がありますが、ログは既にキャプチャされているため、これを行うことはできません。 その結果、ロックを取得します。 これらすべてのことは、作業環境の実装の機能と使用するツールを知らずにプログラミングを行うべきではないことを再度確認するものです。
まだ面白いことがたくさんありましたので、ビデオをご覧ください。 言い直しはまだ短いです。
いつものように、私たちはここ、または開かれたドアで質問、コメント、提案を待っています。