Низкий КПД, часть I

Совмещу в одну небольшую серию эссе всё, что надумал и написал здесь разрозненно.

Тезис: индустрия IT/CS работает с низким КПД, падающим с каждым годом. Максимальный КПД достигается при следующих условиях (всё через AND): 1) софт работает только тогда, когда надо, 2) софт занимает только те ресурсы, что требуются для выполнения задачи, 3) софт может делать и делает только то, что требуется потребителю, 4) ресурс разработки софта соразмерен задаче.

Размышления (с попытками слабо доказать) далее разбросом.


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

Фигня в том, что творчество таких разработчиков не существует в своей отдельной галактике, но проникает в общую атмосферу. Думаю, каждый долго работающий сталкивается с ситуацией, в которой ему предлагают (до|пере)писать какой-нибудь [известный] магазин / софт учёта / что-нибудь ещё, а там адок. Начинаешь выяснять — ну конечно, писал Вася, друг директора. Как-то работало, все матерились, но в итоге устали и хотят другого.

Достаточно Васе так [успешно] поработать N лет, чтобы он утвердился в верности своей модели. Нуачё, деньги зарабатывает, даже иногда на окладе. Зачем образование? Какие курсы? Эрудиция? Парадигмы? Всё это лишнее. В мире электроники это были бы Васи, проектирующие телевизоры без малейшего знания закона Ома. Чисто на интуиции. Норм.

Так вот, софт, изготовляемый этими Васями, нарушает все мыслимые правила и соглашения. КПД у него стремится к нулю.


Многократное дублирование. Угадайте, сколько instant messengers было опубликовано после 2000-х? Не угадаете. 60+ хоть сколь известных. Мир XMPP-протокола тоже прекрасен. И всё равно список полным не является — нет Cisco Jabber и Slack, например. Что получается? Под сотню команд в мире решали одну и ту же задачу с некоторыми вариациями. Сто раз. Как минимум. Казалось бы, ну и что? Все в мире так делают. Это конкуренция и бизнес. Вон моделей автомобилей сколько.

Фигня в том, что в “реальном” мире дублирование обусловлено логистикой, стоимостью производства и местными особенностями. Чаще проще и выгоднее сделать почти такой же продукт на другом конце света, чем тащить готовый. В мире софта не так. Пусть даже одинокий пингвин на льдине сваяет утилиту, уже через час она может быть доступна как в Австралии, так и на Луне.

И так едва ли не с каждой задачей. Даже если исключить из задач чисто учебные (каждый фронтендер в жизни ваяет календарик на JavaScript, да). Даже если исключить академические (сотни языков программирования). Даже если исключить задачи know-how (поисковые движки). Исключить всякое военное, государственное и очень тайное. Всё равно окажется, что в любой момент времени в мире есть сотни людей, решающих одну и ту же задачу без заметных различий.

Как если бы доска одна, гвоздь один, а чуваков с молотками целая центурия. Ну офигеть КПД производства.


Пипл хавает. Вы же миритесь с багами? Привычно перегружаете компы. Привычно ставите другое приложение (такое же, но баги другие). Привычно равнодушно относитесь к десяткам патчей и к вечным “мы в статусе бета! это прототип!” Привычно читаете в новостях о том, как гавкнулся то один софт, то другой. Нашумевшая история с No Man’s Sky рванула только потому, что игра ну очень адово отличается от очень шумной предварительной рекламы. А так-то всё норм. Просто пацаны чуть-чуть перешагнули грань терпения.

Взять ту же MongoDB. Есличё, это одна из самых используемых NoSQL баз данных в мире (установки от соседского гаража до Microsoft и eBay). Каждый квартал появляются новости о том, как эту базу удачно атакуют и тырят данные: “Эксперты фиксируют рост числа угонов MongoDB” (2017), “Разработчики MongoDB «немного расстроены» из-за множества утечек данных” (2016), “Десятки тысяч баз MongoDB доступны через интернет” (2015). Секрет успеха — берёте Васю из первого пункта этого эссе, просите поставить MongoDB (которая by default великолепна), ждёте наплыва интересующихся.

Хотите посмотреть, сколько фич добавляют и ошибок исправляют ежемесячно в этой базе? Смотрите: в среднем 100+ в месяц только в core server. Свежая версия 3.5.2 получила 200 issues в changelog.

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

КПД подобных штук… ну… впрочем, мы все привыкли к патчам Windows, потому всё хорошо. Вы всё равно поставите этот софт. Потому никто не будет делать его качественным. Его будут делать быстро до тех пор, пока вас это устраивает. А вас устраивает.


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

Но и это норма. Все привыкли к тому, что приходится пользоваться фигнёй. Мне в этом контексте нравится недавняя история: “Миллион строк в секунду из Postgres с помощью Python”. Кратко так: самый популярный драйвер на одном из самых популярных языков программирования к одной из самых популярных RDBMS годами представляет собою архитектурное убожество. Пришли пацаны, которых это настолько утомило, что написали свой драйвер, работающий в среднем в три раза быстрее. В три раза, Карл.

Любой софт, что сложнее ложки, состоит из множества таких библиотек. Почти любой софт, что сейчас “промышленно” производится, может работать гораздо быстрее и потреблять гораздо меньше ресурсов. Если разработчики хотят и могут. Но они не хотят и не могут. Часто просто не умеют.

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

Лично (как живьём, так и в переписке) знаком с десятками разработчиков, которые считают эту ситуацию нормой. Ну т.е. хотелось бы лучше, но и так сойдёт. Нет никаких безусловных профессиональных ритуалов (типа клятвы Гиппократа или присяги), диктующих программировать качественно и клеймить бракоделов. Мы не клеймим, мы относимся с пониманием. В конце концов, никто не заплатит за тысячи часов, что потратятся на переписывание после стотысячного Васи. А кушать хочется.

Разработчики хавают, КПД же софта из такого гуано и веточек… и так сойдёт, ага.


To be continued.

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.