18

この非常に有益な(多少議論の余地はあるものの)質問を読んだ後、Pythonを使用して大規模なプロジェクトをプログラミングした経験を知りたいと思います。プロジェクトが大きくなるにつれて、物事は管理できなくなりますか?この懸念は、私がJavaに執着し続ける理由の1つです。したがって、大規模なプロジェクトでのJavaとPythonの保守性と拡張性の情報に基づく比較に特に関心があります。

4

8 に答える 8

15

私はPythonで行われる大規模な商用製品に取り組んでいます。私は5000ファイル×それぞれ500行の非常に大まかな見積もりを出します。これは約250万行のPythonです。このプロジェクトの複雑さは、おそらく他の言語での1,000万行以上のコードに相当します。Pythonコードが保守不可能であると不満を言うエンジニア/アーキテクチャ/マネージャーからは聞いたことがありません。バグトラッカーから確認したところ、静的型チェックによって回避できるシステム上の問題は見当たりません。実際、オブジェクトタイプの誤った使用から生じるバグはほとんどありません。

これは、静的クラスベース言語が思ったほど重要ではないように思われる理由を経験的に研究するための非常に優れた学術科目だと思います。

そして拡張性について。製品のデータベース1の上にデータベース2を追加しましたが、どちらも非SQLです。タイプチェックに関する問題はありません。まず、さまざまな基盤となる実装を予測するのに十分な柔軟性のあるAPIを設計しました。この点で、動的言語は障害ではなく助けになると思います。テストとバグ修正のフレーズに進んだとき、私たちはあらゆる言語で作業している人々が直面しなければならない種類のバグに取り組んでいました。たとえば、メモリ使用量の問題、一貫性と参照整合性の問題、エラー処理の問題などです。静的型チェックがこれらの課題のいずれにもあまり役立たないと思います。一方、飛行中または単純なパッチ適用後にコードを挿入できることにより、動的言語から大きな恩恵を受けています。

100人以上のエンジニアのほとんどがPythonを使用して満足して生産的であると言っても過言ではありません。静的型付け言語を使用して同じ製品を同じ時間で同じ品質で構築することは、おそらく考えられないことです。

于 2010-09-08T21:55:33.633 に答える
9

私の経験から、静的に型付けされた言語は維持するのが難しい場合があります。たとえば、カスタムクラスをパラメータとして受け入れるユーティリティ関数があるとします。今後、このクラスの名前よりも新しい命名規則を採用する場合は、このクラスの名前を変更する必要があります。その後、すべてのユーティリティ関数も変更する必要があります。Pythonのような言語では、クラスが同じメソッドを実装している限り、それは問題ではありません。

個人的に私は邪魔になる言語を軽蔑しています。アイデアを表現する速度は価値があり、これがPythonがJavaよりも優れている点です。

于 2010-09-08T21:11:16.060 に答える
5

十分なテストカバレッジのないPythonの大きなコードベースが問題になる可能性があります。しかし、それは画像のほんの一部です。それはすべて人と仕事をするための適切なアプローチについてです。

それなし

  • ソース管理
  • バグ追跡
  • ユニットテスト
  • 献身的なチーム

どんな種類の言語でも失敗するかもしれません。

于 2010-09-08T21:19:18.157 に答える
5

オブジェクトをスタックの上位に直接トレースできないIoCまたはその他のデザインパターンが多数ある、動的に型指定された大規模なフレームワークで、明らかに不正な形式のオブジェクトのソースをトレースバックしてみてください。

次に、静的に型付けされた言語でこれを実行してみてください。

オブジェクトのタイプが使用サイトの近く(たとえば、タイプアノテーション、Pythonのタイプセーフライブラリなど)またはスタックのどこかに文書化されていない限り、オブジェクトがどこから来たのかを推測することは事実上不可能です。BuildBotフレームワークの一部をデバッグしようとした経験から、私は話します。これには、PyDev、Komodo、Wingwareなどの豪華なIDEを使用した場合でも、フレームワークを介した膨大な量の生のテキスト検索が含まれていました。

動的言語にいくつかの型制約を課すことが可能であることは間違いありませんが、これに標準化がないことは、大規模な既存のフレームワークの一部をデバッグしようとする人にとっては障害のようです。

編集:2014年以降、GuidoはPEP484、MyPy、およびタイピングモジュールを追加しました。これにより、大規模なプロジェクトを維持するという点で、私の経験ははるかに良くなりました。

于 2014-10-15T14:05:26.733 に答える
4

IntelliJIDEAの革新の前後の日々を覚えています。大きな違いがあります。以前は、静的型付けはコンパイル専用でしたが、開発では基本的にソースコードをテキストファイルとして扱います。その後、ソースコードは構造化された情報になりますが、静的型付けのおかげで、多くの開発タスクが簡単になるはずです。

しかし、昔は地獄に住んでいたわけではありません。私たちはそれをそのまま受け止め、必要なことは何でもし、現在利用可能なツールを使用し、システムを構築し、満足させます。不幸な思い出はあまりありませんでした。それはおそらく、動的型付けプログラマーが今感じていることです。それは悪いことではありません。

もちろん、私は昔に戻ることは決してありません。そのようなIDEの使用が禁止されている場合は、プログラミングをすべて一緒に行うと思います。

于 2010-09-08T23:46:20.610 に答える
2

私の経験では、保守性は、結合度の低さ、優れたドキュメント、優れた開発プロセス、および優れたテストに依存します。静的型付けは、これとはほとんど関係がありません。

Javaがコンパイル時にキャッチするエラーは、発生する可能性のあるエラーのごく一部にすぎません。また、ほとんどの場合、テストで検出するのは最も簡単です。コードが正しい答えを生成することをテストしている場合、間違ったクラスのオブジェクトでメソッドを呼び出すのを見逃すことはありません!その点で、Pythonは実際には品質を確保するのに優れていると主張することができます。コードに単純なタイプミスがないことを確認するために少なくとも少しテストを強制することにより、実際に少なくとも少しテストを行うことが保証さます

実際、Javaは、多くのバグをキャッチするための強力な静的チェックを備えた言語の非常に良い例ではありません。HaskellまたはMercuryでプログラミングしてみて、私が何を意味するのかを確認してください。さらに、ScalaでプログラミングしてJavaライブラリとのインターフェースを試してみてください。Scalaライブラリを使用する通常の慣用的なScalaコードを、Javaライブラリを処理する必要のあるコードと比較すると、コンパイラが保証できる「正確さ」の違いが顕著です(私は実際にこれを行っています。 AndroidのScalaでビット)。

Scalaのような言語と比較してJavaの静的エラー検出の欠点にもかかわらず、多くの開発者が長期間にわたって取り組んだ大規模なコードベースで優れた保守可能なコードを書く能力は、Pythonプログラマーが同じことを行うために使用するのとまったく同じ技術に依存しますJavaと比較したPythonの静的エラー検出の欠点にもかかわらず、大規模なコードベースにあるもの。

于 2012-01-29T01:04:23.143 に答える
0

私は数百行から数千行まで、多くのプロジェクトでPythonを使用してきました。動的型付けは時間を大幅に節約し、ポリモーフィズムなどのオブジェクト指向の概念を使いやすくします。型システムはプロジェクトを保守不可能にすることはありません。それを想像するのが難しい場合は、Pythonでいくつかのことを書いてみて、それらがどのように機能するかを確認してください。

于 2010-09-08T21:13:09.273 に答える
0

私はPythonを主要言語として使用するビッグデータの新興企業で働いています。私のプロジェクトは約30k行のPythonです。私の経験から、あなたのチームが優れたプログラミング手法、フォックスの例、タイプヒントの追加、および広範囲にわたる単体テストを採用している場合、保守性にはそれほど影響しないかもしれません。タイプのヒントがある場合、Pycharmはタイプのいくつかのタイプエラーを自動的に検出できるためです。

実際の問題は次のとおりです。1。パフォーマンス。これは保守性とは関係がない可能性がありますが、問題です。2.処理したすべてのPythonコードベースが適切に記述されているわけではありません。Pythonは習得とコーディングが簡単だからです。基本的なCSトレーニングを受けていない人は、維持することが不可能なPythonプロジェクトを開発するでしょう。私は、タイプヒントのない数千行のファイルがたくさんあるPythonプロジェクトで作業しました。その男はOOPについて知りません。彼は基本的にCを書くのと同じようにPythonを書きます。彼はいくつかのPython言語機能を利用していますが、完全に命令型プログラミングです。よく書かれたPythonプロジェクトは、よく訓練されたエンジニアに本当に依存しています。十分なエンジニアを雇うことができない場合は、ツール自体に頼るほうがよいでしょう。3. Pythonビッグデータ会社では、製品マネージャーや一部の非技術者は、一貫性のあるデータ型を気にしません。それらの人々は、タイプセーフではないデータ製品を設計するでしょう。たとえば、Jsonの場合、通常はstrであるフィールドですが、空の場合、一部の人はそれをnullにします。これは実行時に失敗します。

于 2019-10-23T17:00:43.840 に答える