Dropbox пояснює недоліки спільного використання iOS та Android -коду

Інженер-програміст із Dropbox пояснює причину рішення компанії більше не ділитися кодом між iOS та Android.

Донедавна Dropbox ділив код між додатками для Android та iOS, використовуючи C++, щоб писати лише один раз, а не на Java та Objective-C. Ця стратегія діє з 2013 року, коли команда Dropbox була ще відносно невеликою, але їй була потрібна підтримка дорожньої карти, що швидко змінюється.

Dropbox, тепер це набагато більша компанія, переключився на розробку своїх додатків для Android та iOS, використовуючи рідну мову кожної платформи. У своєму блозі інженер із програмного забезпечення Dropbox Еяль Гутманн (Eyal Guthmann) дає деяке уявлення про недоліки, які компанія виявила при спільному використанні коду.

Гутманн каже, що всі проблеми Dropbox виникають з однієї основної проблеми: «При написанні коду нестандартним способом ми взяли на себе додаткові витрати, про які нам не довелося б турбуватися, якби ми залишилися з значеннями, що широко використовуються, за умовчанням для платформи. Ці накладні витрати виявилися дорожчими, ніж просто написати код двічі».

Написавши крос-платформний код на C++, Dropbox виявив, що йому довелося створювати безліч власних фреймворків та бібліотек.

Гутманн визнає, що, можливо, фірма могла б краще впоратися з використанням бібліотек C++ з відкритим вихідним кодом, але, на його досвід, співтовариство не таке сильне, як у мобільній розробці. Крім того, Гутманн вважає, що вклад Dropbox з відкритим вихідним кодом досяг би більшої кількості розробників рідними мовами платформи.

«Ці витрати особливо високі в C++ (на відміну від інших можливих не рідних мов, таких як Python або C#), тому що в ньому немає однієї повнофункціональної стандартної бібліотеки. Тим не менш, C/C++ є єдиними мовами з компілятором, що підтримується як Google, так і Apple, тому використання іншої мови створило б цілу низку інших проблем для вирішення», - написав Гутманн.

Наступні накладні витрати, які підкреслює Гутманн у зв'язку з кросплатформовою розробкою, - відсутність доступу до IDE для конкретних платформ від Google і Apple. Android Studio і Xcode мають широкі функціональні можливості, і кожна компанія вкладає масу ресурсів у те, щоб забезпечити їм відмінний досвід покращеного налагодження для відповідних мов.

«На додаток до втрати інструментів, нам також довелося витратити час на створення інструментів, які б підтримували спільне використання коду C++. Найголовніше, що нам потрібна була спеціальна система збирання, яка створювала бібліотеки, що містять код C++, а також оболонки Java та Objective-C, і могла генерувати цілі, зрозумілі як Xcodebuild, так і Gradle. Ця система сильно загальмувала наші ресурси, оскільки її необхідно постійно оновлювати для підтримки змін у двох складальних системах».

Гутман зазначає, як повинні враховуватися різницю між платформами, і це означає, що в будь-якому випадку це рідко буває «написати код один раз». Одним із конкретних прикладів цього є те, як кожна платформа обробляє програми, які бажають виконувати фонові завдання.

Зважаючи на те, що більшість платформ досягають деякого паритету функціональності з конкурентами в ході їх розробки, Гутман зазначає, що деякі речі, такі як взаємодія з камерою, згодом лише розходяться.

Останнє, що підкреслює Гутманн, - це найм та навчання розробників для роботи над власним стеком. Коли Dropbox розпочав свою мобільну стратегію, компанія розпочала проект C++ з досвідченими розробниками, одночасно навчаючи інших розробників мобільних додатків у Dropbox тому, як зробити свій внесок у кодову базу.

«Згодом ці розробники перейшли до інших команд та інших компаній. Інженери, що залишилися, не мали достатнього досвіду, щоб заповнити прогалину в технічному лідерстві, і стало все важче наймати старших інженерів з відповідним досвідом в C++, які були б зацікавлені в розробці мобільних додатків».