Dropboxのと「七年目の浮気」は難しい交差点、クロスプラットフォームのC ++本当に無意味な質問は、右ですか?

怠惰、短気と傲慢(怠惰、短気と傲慢):言語Perlの作成者Larry Wall氏は優秀なプログラマーをまとめた3つの美徳を持っています。彼らは怠惰であるため、プログラマは「一度書けば、どこでも実行」と「一度、すべての」達成良い願いしたいと考えている。そのため怠惰のため、プログラマは、機械加工に適して反復的なタスクの数が多いために苦労しました。

「どこでも実行し、一度書く」 - ショート、クロスプラットフォームで。しかし、これはプログラマが考え、彼らの良い願いスキームを運ぶに沿ったものである、でも逆、実際には、多くの場合ではない、それが何を望んでいます。

最近のDropboxエンジニア共有するための公式ブログ上の開発のために母国語のプラットフォームを使用する代わりに、そのiOSとAndroidのクライアントの間のコードの同じセットを放棄するための共通の戦略-彼らの「火傷を投げ」体験を。

エンジニアは、iOSとAndroidのモバイルアプリケーションを開発するために2013年にDropboxが、言ったC ++言語政策によって、2つのプラットフォーム間で共有コードの同じセットを使用しましたアイデアは、開発チームはC ++コードは二回、コードを書くためのObjective-CやJavaを使用して、各iOSとAndroidのプラットフォームのため、別々にすることなく、一度書き込むことができます使用したい、非常に簡単です。また、モバイルアプリケーションの開発を担当するチームのサイズが比較的小さい場合には、モバイルアプリケーションの急速な成長をサポートするために、彼らはすぐにこの小さなチームを通じてiOSとAndroidの上のコードを多数展開する方法を見つける必要があります。

Dropboxのだが、今、各プラットフォームのネイティブ言語(主にスウィフトとKotlin)の賛成でこの戦略を放棄しました。この決定は、実際には非常に高いコストを隠さ両方のプラットフォーム上のコードの同じセットを共有する理由。:彼らは、これは経験から結論あなたは広く使われている標準、非標準的な方法ではなく、書いたコードを、デフォルトのプラットフォームに従えば、彼らはこれのコストは最終的に二回コードを書くよりも高価コストれ、考慮しなければならないはず負担することはできません。

Dropboxは、4つのカテゴリに分類さこれらの隠れたコストを設計するこれらの隠れたコストを導入する前に、エンジニアは、彼らが実際にあることを強調したコードのライブラリのほとんどに到達したことがないC ++開発段階を使用している、それは隠れたコストをもたらすためにC ++を使用してからそれらを防ぐため、完全にこの方向で開発されました。

メンテナンスのオーバーヘッド自己開発フレームワークやライブラリ

C ++オーバーヘッドの最初の使用は、大きく分けて2つのサブカテゴリーに分かれて、独自のフレームワークやライブラリを構築する必要性に直面しています:

  • 完全なモバイルアプリケーションを構築するために、ホストフレームワークと対話する環境をサポートしています。例えば:
    • D Jinni社のツールが結合言語とインターフェースを横切る型宣言を生成するために使用されます。
    • バックグラウンドで実行中のタスクの枠組みとメインスレッドで(プラットフォームのネイティブ言語を使用して簡単なタスクを実行するため)
  • これは、ネイティブ言語で使用することができ、デフォルトの標準ライブラリやオープンソースプラットフォームを置き換えるために使用されます。例えば:
    • json11:(デ)シリアライズのためのJSON
    • NN:Cでの非ヌルポインタ++

Dropboxのエンジニアは、プラットフォームのネイティブ言語を使用している場合は、これらのコードは必要ありませんが、オープンソースプロジェクトへの貢献は、プラットフォームのネイティブ言語から利益を得るより多くの開発者をもたらす可能性があるという。それは単一のフル機能の標準ライブラリを欠いているので、C ++におけるそれらのコストは(例えばPythonやC#などの他の非ネイティブ言語と比較して)特に高いことは注目に値します。、C / C ++が含まれていることを言ったGoogleとAppleのサポートコンパイラによって異なる言語が他の多くの問題を持っている場合は、言語は、対処する必要があります。

研究開発環境からのメンテナンスのオーバーヘッド

モバイルエコシステムの開発効率を向上させることができ、多くのツールがあります。モバイル開発のために、どのIDEも非常に豊富で、GoogleとAppleは開発者が適切なプラットフォームの開発で最高の経験を持ってすることができ、そのリソースの多くを置きます。Dropboxのは、デフォルトのプログラムのプラットフォームを使用していないので、彼らは自然にこれらの施設を楽しむことができません。最も注目すべきは、プラットフォームのネイティブ言語の経験では、デフォルトのIDEのデバッグプラットフォームは、C ++コードのデバッグの経験よりも、通常は優れている、デバッグの経験です。

Dropboxのエンジニアは、エラーがアプリケーションがバックグラウンドスレッドフレームにランダムにクラッシュすることがあった特定のは、彼らの印象的な例作りました。これを行うには、彼らはこれらのタイプのエラーを見つけることも難しく、簡単な標準スタックを使用しますが、。この問題は、C ++とJavaの間で前後に実行するマルチスレッドコードのデバッグを含むので、最終的に彼らは問題を見つける前に数週間を過ごしました。

ツールの不足に加えて、エンジニアはまた、C ++コードの同じセットを共有サポートするために、タイム構築ツールを費やす必要があります。最も重要なのは、彼らはC ++コード、およびパッケージのJavaとObjective-Cのコードが含まれているライブラリーを作成するためのカスタムシステムを構築する必要がある、とXcodebuildとGradleのが理解できるオブジェクトを生成することができます。常に2つのビルシステムの変更をサポートするように更新しなければならないので、それは、システムリソースのDropbox上のこの巨大なドラッグです。

>補数リピートホイール - それは多くの時間がホイールを作るに費やされている見ることができます。

異なるプラットフォーム間の相違を解決するためのコスト

iOSとAndroidのアプリケーションは、総称して「モバイルアプリケーション」と呼ばれ、両方が、一般的に同じ特徴と機能を持っていますが、プラットフォーム自体れている間、いくつかの影響を達成するための機能の違いがあります。たとえば、アプリケーションが各プラットフォーム上でのバックグラウンドタスクを実行する方法は異なります。だけでも、(例えば、システムアルバムと対話する)、これはいくつかの類似点クロスプラットフォーム戦略を持っていますが、時間の経過とともに、これらの違いは非常に異なるものになります採用し始めて。

そのため、エンジニアはさえ、本当に一度コードを書いて、異なるプラットフォーム上で実行されている箱から出して、それを持つことはできません。彼らは、異なるプラットフォームへのタイムコードの多くを費やして、プラットフォームに固有のコードを記述する必要があります。

だからここで「一度だけのコードを記述し、」大幅にこのアプローチの利便性を減少させ、それを取得していません。

採用、研修および保持は、開発者のコ​​スト

Dropboxのは、そのモバイルアプリケーションでは、この戦略を採用すると、彼らは経験豊富なC ++開発者のチームを持っています。チームはC ++のプロジェクトを開始し、他の開発者がコードを提供するために、そのプロジェクトの訓練を受けました。

しかし、時間をかけて、これらは徐々に他のチームや他の企業に行ってきました開発者を経験しました。残りの開発者は、シニアエンジニアの関連するC ++開発経験がますます困難になってきているプロジェクトを支援し、促進するために十分な経験を欠いており、募集します。

最後のチームは、C ++のコードベースを維持するために、そして2つのオプションがあり、この需要チームを満たすために重要な専門知識を欠い:

  1. 検索して、この特定のスキルを持つ候補者を雇う(現実には年間募集しては、右の人を見つけることができませんでした)
  2. スキルの不足のために移動するために、社内研修(またはC ++)エンジニア。しかし、現実には、スタッフの不足が必要なスキルが訓練する必要があるので、この目標を達成することは困難です。でもトレーニングの前に、モバイルエンジニアはC ++を学ぶには関心がないことを明らかにしたがあります。この訓練のために必要な開発者にも大きな問題です。

リクルートの問題では、Dropboxのエンジニアは多くのモバイル開発者は、プロジェクトを去った多くの優れたエンジニアにそれらを導いたC ++プロジェクトで作業したくないことがわかりました。更新されたすべてのモバイル技術の開発は非常に高速であるた後、これらの開発者は、テクノロジー・スタックは、常にトレンドに追いつくことができますしたいです。

結論

最終的なコストにつながる隠れたコストのためのDropboxが利益を上回るだけでなく単純で安価のために彼らのIDE開発プラットフォームを使用する場合があります。最後に、ので、もはや移動端末C ++(または任意の他の非標準モード)を介し符号の同じセットを共有しないが、各プラットフォームのコードのネイティブ言語を使用します。

読書関連
、ネイティブに反応使用を放棄ネイティブ技術の使用に戻るには、Airbnbを
Airbnb後、Udacityも放棄したキューがネイティブリアクト参加しました

おすすめ

転載: www.oschina.net/news/109179/hidden-cost-of-sharing-code-between-ios-and-android