Разрабы
/

АКК

Мы логиним через
гитхаб

После логина появится возможность комментировать материалы. А дальше мы придумаем, какие возможности появятся у залогированного читателя

Залогиниться через github

Мы пишем по шесть одинаковых приложений на продукт. Нахера?

Мы пишем по шесть одинаковых приложений на продукт. Нахера?

Вы читаете эту статью в браузере, потому что мы потратили кучу сил, чтобы её вам тут отрендерить. Но вы не можете прочитать её в десктопном, андроид, или айос приложении — потому что ещё одной кучи сил на то, чтобы написать их, у нас не осталось. В какой-то момент индустрия взяла и решила, что правильный путь — разрабатывать несколько одинаковых приложений на каждый продукт, что мы выпускаем. И когда ты об этом говоришь, объясняешь, что это какая-то дичь — тебе говорят, что это ты идиот, и так работает бизнес.

КодКолонка ФилаМненияРедакция

А я помню, как учился инженерному делу и программированию. Я помню, что как только ты начинаешь уметь писать хоть какой-то код, тебе начинают объяснять, как писать код хороший. А хороший код, это про оптимальность, про масштабируемость, про гибкость и понятность. Хороший код это про прагматизм — давайте строить наши системы так, чтобы получать как можно больше профита, потратив как можно меньше сил. Что важно — не сиюминутно, а на длинной дистанции, в долгую.

Это работает на всех уровнях от маленьких незначительных деталей в коде, до архитектуры самого верхнего уровня. Когда ты, зелёный джунишка, отправляешь свой первый пулл-реквест на ревью, ты получаешь свои первые пиздюли за то, что написал

Car GetFastestCar(Car a, Car b) { var speedA = a.Distance / a.MooveTime; var speedB = b.Distance / b.MooveTime; return speedA > speedB ? a : b; }

вместо

class Car { ... double Speed() { return this.Distanse / this.MooveTime; } } Car GetFastestCar(Car a, Car b) { return a.Speed() > b.Speed() ? a : b; }

Потому что два раза писать одну и ту же формулу — не прагматично. Правила подсчета могут измениться, например начнёт иметь значение, за какой период мы считаем скорость и нам придётся лезть во все места, где она используется, и менять там код. У нас не будет гарантии, что мы реально поменяли везде где надо. Если пропустим — получим неконсистентное поведение системы, баги. На сами изменения потратим силы. Если мы умные, и тестируем свой код, нам придется писать тесты на каждый кусок кода, где эта формула написана. А значит меняя код формулы, придётся менять код тестов. Менять код — это само по себе проблема, потому что программисты постоянно ошибаются, и если вам вдруг понадобилось поменять содержимое двадцати функций, будьте уверены — в одной из них вы облажаетесь и поменяете не так. Снова баги. Баги кстати надо чинить — тоже меняя код.

Для любого программиста очевидно, в чём проблема с дублированием. Да, есть нюансы, да, есть кейс, когда у тебя не дублирование — а совпадение, и ты знаешь, что в дальнейшем два одинаковых куска кода будут меняться по-разному, но инженерный консенсус в недопустимости дублирования у нас есть. И мы боремся с ним — но только внутри своих проектов с кодом. А то, что соседи пишут такой же код — туда мы уже не лезем.

Бизнес же что делает, он говорит — эй, Фил, вот ты тупой шарпист, давай-ка бери тиму, и делай нам клиент на десктоп вот по этим макетам. Ну, мы делаем. И боремся такие с дублированием у себя в проекте, оптимизируем, прагматично подходим к выстраиванию этой системы. Заводим техдолг, меняем плохие решения на хорошие, думаем, ходим на конференции, изобретаем практики, парадигмы, методологию.

Другие шарписты, что поумней меня, пишут нам библиотеки, чтобы мы не делали вещи, которые уже сделаны, разрабатывают .net фреймворк и язык, чтобы оптимизировать, улучшать. Делают всё, чтобы процесс разработки стал более оптимальным, дешёвым и эффективным для мира.

В это же самое время, тот же бизнес решил, что одним десктопом сыт не будешь, и кроме тупых шарпистов нужны ещё тупые свифтисты, тупые джависты, и ещё более тупые фронтендеры.

Им всем тоже раздадут макеты (разные!), чтобы они тоже делали. И боролись такие с дублированием у себя в проекте, оптимизировали, прагматично подходили к выстраиванию этой системы. Заводили техдолг, меняли плохие решения на хорошие, думали, ходили на конференции, изобретали практики, парадигмы, методологию.

Другие свифтисты, джависты и фронтендеры, что поумней их, пишут им библиотеки, чтобы они не делали вещи, которые уже сделаны, разрабатывают фреймворки и языки, чтобы оптимизировать, улучшать. Делают всё, чтобы процесс разработки стал более оптимальным, дешёвым и эффективным для мира.

А ирония в том, что вещи, которые сделали шарписты, джависты, свифтисты и фронты — решают (упс) идентичные задачи. Абсолютно одинаковые. Ни в малейшей мелочи не различающиеся. У приложений в идеале одинаковый набор фич. Часто оно не так — то, что позволено нативщикам, может оказаться запрещено для веб макак, по воле компании которая производит устройства — но в идеале да. В идеале бизнес хотел бы

АБСОЛЮТНО ОДИНАКОВЫЕ ПРИЛОЖЕНИЯ.

Идиотизм. Абсурд и чушь. Антиинженерное решение, луддизм. Программисты стоят как авианосец, сделать большое приложение — бесконечность денег. Поддерживать его — бесконечность в квадрате.

Представьте себе, что у вас есть телефон, и большой дом — двадцать комнат. Вы — большой успешный айтишный воротила, что живёт в своем дворце. В какой-то момент вы понимаете, что хочется получать уведомления на телефон, в какой бы комнате вы не находились. Чтобы сразу среагировать и не пропустить очень важное сообщение от уважаемых коллег. Есть проблема — надо решать. Хорошо, что тут всё просто, и решение на поверхности — мы покупаем двадцать телефонов, подключаем их к вайфаю, вставляем зарядки, раскладываем их по дому. Вуаля — где бы мы не находились, сообщение не будет пропущено. Оптимальное решение.

Внимательный, вдумчивый читатель с приличным опытом в индустрии и хорошей инженерной чуйкой заметит — решение неоптимально. Ведь можно же просто носить свой телефон с собой, скажет он.

На самом деле я слегка иронизировал — ни одному человеку не придёт в голову покупать двадцать одинаковых телефонов, когда можно использовать один.

Зато огромной куче очень умных людей пришло в голову писать одинаковые приложения для винды, линукса, мака, андроида, телевизора, айфона, айпеда, иксбокса, плейстешна, эплтиви, эплвотча, господи, надеюсь это полный список. Ещё браузер — который работает на всех этих устройствах.

Как так? Нас всех кто-то покусал? Мы обдолбались, поехали кукухой, слетели с катушек? Думаю, нет. Думаю, мы в порядке, мы делаем что можем. Программисты не терпят неоптимальность на уровне инстинктов, нам навязчиво хочется её выкорчевывать — насколько это возможно. И программисты выкорчевывают: мы фигачим кроссплатформенные фреймворки. У нас есть флаттер, котлин мультиплатформ, прости господи замарин с его потомками, эпловики вроде тоже умеют писать одно приложение на все их устрйоства, есть qt, который вроде как может сразу во все десктопы, и много чего в таком духе. Ещё есть браузер — штука, которую вроде как научили работать реально везде. Но работать так, что лучше бы его вообще не было.

Эти технологии как-то чинят проблему. Они появляются, дохнут, выживают, развиваются, но в целом, воз и ныне там. Я не могу сейчас взять и захерачить вам одно приложение "Разрабы" на все платформы. Причём проблема не в программистах. Я несколько раз писал код на кроссплатформенных технологиях — это был кошмар. На винде можно так, на маке нет. На маке это работает так, а на винде по-другому. На айфоне вот так, на андроиде вот так. Дъявол в деталях, а деталей тех тьма, и в какой-то момент, делая большое коммерческой приложение на кроссплатформенной технологии ты вдруг понимаешь, что большая часть твоего кода лежит под #if iOs и #if android. Что на самом деле кодовая база двух отдельных приложений была бы проще, чем кодовая база одного приложения на две платформы. И чем дальше — тем хуже. Когда их у тебя два, с этим ещё как-то можно жить, когда три, четыре, пять — не вариант.

С вебом ещё интереснее. На нём относительно легко написать приложение, которое будет одинаково работать и в браузере, и на айфоне, и на андроиде. Одинаково хуёво. Веб тормозной настолько, что иногда просто не получается в это поверить. Мы достаточно технологичны, чтобы захерачить трёхмерную МММОрпг, которая летает на древних компах, но недостаточно технологичны, чтобы сделать сраный инфинити скролл — в вебе не существует приложений, где эта, казалось бы, базовая фича, не тормозила, не дергалась и не плевалась багами!

И ладно бы только это. Создатели платформ, производители устройств, большие компании, повелевающие индустрией и рынком, делают всё, чтобы вставлять палки в колеса. Развиваем браузер, но эпл просто не хочет, чтобы веб приложение могло всё то же, что и нативные! Пишешь кроссплатформенный фреймворк, а компании в гробу видели хоть как-то учитывать твои запросы, работая над своими обновлениями! Ты будешь вечно гнаться за ними, и вечно отставать, они заставят тебя соблюдать миллиард их правил и положений, но твои нужды их не волнуют совершенно — тебе не давали права голоса, ты нищий на паперти, собачонка выпрашивающая кусок с барского стола. Будет у хозяина хорошее настроение — не сломаем твой фреймворк следующим обновлением макоси, не будет настроения — сломаем. Ниче страшного, перепишешь. Или нет, мы срать хотели.

Я раньше всё возмущался — неужели эти дураки не понимают, что так нельзя? Неужели не видят, сколько сил тратится впустую? Неужели не осознают, что мы колбасим килотонны одинакового по сути кода, за бешенные деньги, осознанно игнорируя бесконечное пространство для оптимизации своего труда, оптимизации разработки, оптимизации развития технологий а вместе с ними и мира людей?

Дураком на самом деле был я. Всё они видят, всё они понимают, всё осознают. Правда в том, что они клали на оптимизацию своего труда, оптимизацию разработки, оптимизацию развития технологий а вместе с ними и мира людей. Они делают бизнес, а бизнес — это про деньги. Им тупо выгодно делать вот так. Вендорлок — бич индустрии, закономерно укоренившийся, несгибаемый, бескомпромиссный веднорлок. Компании эпл не выгодно, чтобы ты писал под них приложения по общеиндустриальным правилам и стандартам, компании эпл выгодно, чтобы ты шёл к ним на поклон, выпрашивал у них право купить их аккаунт разработчика, выпрашивал у них право положить свой код к ним в стор, и платить им комиссии, выпрашивал у них право дать тебе их, и только их инструменты для разработки. Хочешь делать приложения для пользователей эпл — подчиняйся эпл или проваливай. Хочешь для пользователей гугла — то же самое. Майкрософт? Та же песня.

Если вдуматься, это охренеть как естественно. Ещё бы они делали по-другому, а? Какой дурак станет меньше зарабатывать, когда можно зарабатывать больше? Я бы вот не стал.

Но штука в том, что это работает в две стороны. Экономика толкает большие компании делать херню, экономика же толкает их делать хорошие и правильные вещи — вопрос только в том, как сложатся карты в конкретном кейсе.

Я не застал, но наслышан про борьбу линукса с виндой. Классическая история — развитие, открытость и общее благо против алчной злодейской корпорации. Однозначно сказать, кто победил, сложно, но вот факты — майкрософт прогнулся, поменял идеологию, и стал крупнейшей опенсорс компанией, линукс успешно поделил рынок с виндой, опенсорс как явление развился и процветает — с кучей нюансов и борьбы — но успехи есть, и их трудно отрицать.

Это — просто феноменальный случай, тот самый супер редкий момент, когда сообщество инженеров вышло из мышления «просто пишу код» и пришла к мышлению «влияю на мир, и делаю то во что верю». И получилось! Фантастика. Причём, есть масса кейсов поменьше, когда инженеры заставляли компании делать то, что нужно миру, а не то, что приносит много денег. Это не так сложно, потому что тут примитивная математика — сделай так, чтобы репутационные издержки для компании превысили импакт от непопулярного решения, и она мигом сделает выбор в твою пользу. Большой бизнес, это система, механизм, он предсказуем и прост — что выгоднее то и делает.

Мне очень нравится, как обстоят дела с доступностью. Компаниям нахер невыгодно усираться ради двух процентов пользователей с ограниченными возможностями, но сообщество потихоньку создает вот какое положение вещей — попробуй только ляпнуть, что вам похер на инвалидов, и твою компанию закидают говном. И правильно сделают! Разработчикам будет зашкварно у тебя работать, твоих спикеров на конфах будут освистывать, под статьями о твоей компании и разработке в ней будут оставлять гневные комментарии — в общем у твоего HR бренда, а то и у просто бренда, заведутся серьезные проблемы. А бренд — штука дорогая. Компании в бренд вкладывают килотонны бабла, и они хорошо умеют считать — часто получается так, что дешевле заморочиться с доступностью, чем вкидывать бабло в отбеливание репутации. Да, не всем, да, не всегда, да, часто делается для галочки и так далее — но это тоже хорошо. Это одна из форм баланса, хорошо, если он сместится сильнее в сторону большей доступности, и плохо, если примет крайнее положение — тогда соответствовать правилам рынка смогут только богатые гиганты, а маленькие стартапы сдохнут.

Но в вопросе кроссплатформенности ни о каком балансе сейчас и речи не идёт. То что есть сейчас — это кошмар. И первый шаг — этот кошмар признать. Перестать делать вид, что пять человек, делающие веб, ещё пять, делающие андроид, и ещё пять, делающие айос — одновременно, один продукт, в одной компании — это хренов абсурд. А признав — начать давить. Айти компании, особенно гиганты, сделаны инженерами, они взаимодействуют с инженерами, инженеры — это сердце и кровь их бизнеса. Никто в мире не может на них повлиять, а мы можем. Чёрт, мы прогнули Майкрософт! Причём не нынешний Майкрософт, который делит рынок с десятком других супергигантов, а тот старый Майкрософт, который тот рынок поимел, овладел им и правил, на правах самой сильной компании планеты — инженерам удалось вывести вот такой Майкрософт на компромисс.

Я считаю — мы должны повторить это снова. В тысяче тысяч вопросов, и конкретно вот в этом — я не хочу писать одинаковые приложения по несколько раз. Я хочу писать одно приложение, и чтобы оно работало более менее одинаково, хочу, чтобы хозяева индустрии об этом заботились, и мой, ваш голос — им придётся услышать. Если только мы захотим его подать.