Тут недавно в одном телеграм-канальчике раскопали старые мысли интернет-пиздобола Джоэля Спольски о том, что формулами в Экселе никто не пользуется:
When we were designing Excel 5.0, the first major release to use serious activity-based planning, we only had to watch about five customers using the product before we realized that an enormous number of people just use Excel to keep lists. They are not entering any formulas or doing any calculation at all! We hadn’t even considered this before.
Слабые духом комментаторы (ни разу не пользовавшиеся Экселем?) делают из этого вывод, что формулы никому не нужны, пытаются искать у Экселя какие-то другие киллер-фичи, сравнивая его с реляционными базами данных, и так далее. Но комментируют в основном программисты, которые не осознают одной очень простой вещи — Эксель позволяет без «промышленного программирования», исключительно на остатках школьной «компьютерной грамотности» (куда входил в лучшем случае Бейсик и Паскаль) делать довольно сложные вещи.
Думаю, среди читающих это достаточно программистов? Попробуйте, читая следующие абзацы, оценить сложность задачи, количество человек в команде, ее решающей, их «стоимость», сложность поддержки — ну если делать ее честно, по-программистски.
Возьмем достаточно несложную задачку судейства в автоспорте, причем опять же, простую как мычание дисциплину ралли-спринта. Выглядит этот любительский ралли-спринт, например, так — есть довольно компактная трасса, не замкнутая, то есть с отдельными стартом и финишем, на старте и на финише (в эконом-варианте, с хронометражом до секунд) стоят судьи с секундомерами — точнее, часами, показывающими секунды, фиксирующие время проезда участника и докладывающие по рации что-то типа «номер 14, время 12:34:56!» (ну или можно сократить до «34:56»). В будочке неподалеку от трассы сидит секретарь соревнования с ноутбуком и забивает вот эти доклады в протокол (его удобно оформить в экселе, но можно представить и другие варианты). В день соревнований выставляется две разных схемы трассы, у каждого участника есть 4-5 заездов по каждой из конфигураций, итоговым результатом является сумма наилучших времен проезда по обеим вариантам трассы. Так вот, дополним эту штуку еще одной вводной — участники хотят видеть результаты онлайн, достаточно оперативно (пока стоишь в очереди на следующий заезд, надо понять, был ли ты быстрее в этот раз или нет).
Ну в принципе, все же просто и понятно? Делаем веб-приложение, разрисовываем ER-диаграмму БД, пишем немного boilerplate на каком-нибудь Flask, рисуем две странички фронтенда — для секретаря и для участников, готово, вы великолепны! Даже сложность изменений в случае, когда к спринтам добавляется еще и слалом, где время умножается на коэффициент 3, а к докладу судьи добавляется еще один параметр — количество задетых ограничителей, каждый стоит 5 секунд, остается пока что приемлемой — «ну написать еще одну формулу в питоне и все».
В принципе, даже если заказчик придет к вам со следующей хотелкой — а давайте судить таким образом не спринты, а полноценное ралли (пусть даже и «третьей категории)! — вы с небольшими переделками (по человекомесяцу аналитика, бекендера и фронтендера) родите что-то более-менее работающее. Да, в процессе аналитик проклянет РАФ вообще и комитет ралли в частности, а особенно авторов правил, но зато разберется в нюансах вроде «как считать льготу на ВКВ, если на секторе была нейтрализация, а до этого накоплена судейская задержка». В принципе, пока еще все укладывается в модель «результаты участника определяются исключительно временем его отметки на судейских пунктах».
Дальше больше — вы столкнетесь с особенностями таблиц пенализации на разных соревнованиях (тут у нас пропуск судейского пункта стоит 30 минут, тут — 15, а вот у этого «орга» — исключение из зачета), но с этим тоже можно справиться; чуть сложнее будет оперативно решать вопросы типа «решением спортивного комиссара таким-то и таким-то участникам простить 5 минут опоздания на судейский пункт такой-то», но и это вы тоже, несомненно, осилите.
Продолжаем? Приходит к вам еще один организатор, берет вас нежненько за пуговку, и начинает рассказывать — вот знаешь, у нас часто участники путаются в порядке прохождения судейских пунктов, вот если правильная последовательность — 1-2-3-4, то что лучше? 1-2-4-3 или 1-2-4? А 4-3-1-2? Разобрав десяток примеров, пособирав из буковок слова КУПАНСКОЕ слова КУБРИНСК, КУПЯНСК и КУТАКБАШ вы, придете, конечно, к алгоритму вычисления расстояния Дамерау-Левенштейна — но вероятно, примерно в этот момент вам придется расстаться с бекендером, так как он отъедет в дурку.
Впрочем, дурка — это еще неплохо, потому что следующее предложенное изменение гарантированно сломает половину вашей логики! Один из «оргов» придумал правило вычисления результата дополнительного соревнования, если участник пропустил его старт или финиш (да, у этих извращенцев и такое бывает) — ему назначается худшее время из показанных «правильно проехавшими» плюс 900 секунд. Чувствуете, как ваша стройно выстраиваемая схема базы данных начинает ломаться?.. Где-то на этом моменте вы заорете — ДА ПИШИТЕ СВОИ ЕБАНЫЕ ФОРМУЛЫ САМИ!
А ведь как только вы предложили пользователям самостоятельно писать формулы для расчетов — то в принципе, вы изобрели половину экселя; вторую его половину вы придумаете, когда задумаетесь об удобстве ввода данных. И окончательно добью тем, что знаю минимум три экселевских таблички, которые реализуют большинство озвученных тут хотелок — причем без участия аналитика и бекендера, да-да, эти таблички нарисовали сами их активные пользователи, не прибегая к помощи «программистов». Да-да, Дамерау-Левенштейна тоже считают, на VBA, это может быть, и некоторое читерство — но не зря же его включили в Эксель?
А что же с исходной хотелкой, с онлайн-табло результатов? И такие примеры есть, опять же, с экселем. Чуваки из Мосавтослалома (собственно, откуда «несложная задачка» и возникла) поступили чудовищно просто — есть «считающая результаты» табличка (отдельная вкладка с результатами, которая смотрит ВПР-ом на вкладку с введенным протоколом), и есть кнопка, запускающая несложный скрипт на VBA — текущие результаты экспортируются в CSV и по FTP загружаются на сайт — https://mosautoslalom.ru/table/class.html — вот тут можно посмотреть, как это устроено, буквально сотня строчек тупейшего кода для красивого отображения этой csv-шки.
И кажется, я знаю, почему «настоящие программисты» из первого абзаца побаиваются экселя — он буквально оставляет их без работы, позволяя «на коленке» делать вещи, для которых по всем правилам software engineering нужна толпа дорогостоящих бездельников.