блог штоле

Жизнь и смерть, и пафос

Почему нельзя слать на@#$

Shtole Shtole

Базы не создаются сами по себе.
wildwind



Комитет по номенклатуре генов установил (на самом деле пока только анонсировал) новые правила... собственно, номенклатуры, то есть именования генов. Причина? Некоторые из нынешних названий, например, MARCH1, злобный Excel считает датой и автоматически переводит в более правильный, с его точки зрения, вид: 1-Mar.

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

Excel, наверно, одна из самых странных последовательностей байтов в мире. Её корни уходят в 1979 год. Наберите в поисковике 'apple ii killer app' и вы по первой же ссылке выйдете на VisiCalc.

https://upload.wikimedia.org/wikipedia/commons/thumb/7/7a/Visicalc.png/300px-Visicalc.png

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

Таблицы вообще — невероятно удобный способ представления информации. Он неявно требует проведения декомпозиции (когда вы придумываете набор колонок) и, тем самым, способствует классификации знаний. Таблицы повсюду вокруг нас, и некоторые очень далеко эволюционировали от набора перпендикулярных линий на бумаге. Например, структурное программирование, включая продвинутую форму — ООП Си с классами. Класс (структура), как и бумажная таблица, это ведь матрица, описывающая, что общего у экземпляров или строк.

Я совершенно не представляю себе, кто, как и для чего использовал VisiCalc за $100 на компьютере за ещё $2000, но сдаётся мне, это была очередная (не первая и не последняя) схема обмана и самообмана, типичного для IT-бизнесов. (Это утверждение распространяется и на духовного потомка VisiCalc, ныне сворачивающего кровь генетикам и не только). И дело абсолютно не в том, что у тех компьютеров было мало памяти, а ручкой по бумаге можно было посчитать быстрее, чем процессор 6502. Дело в том, что это была профанация, копирование внешнего вида с полным упусканием сути.

Начнём с того, что метафора условно-бескрайнего листа в клеточку плохо совместима с пониманием, что для работы с информацией одной таблицы, в общем случае, мало. Мы же не лепим в справочнике химика плотность жидкостей, периодическую таблицу и календарь на следующий год в одно непонятное многостраничное нечто. А бесконечное (но не безначальное!) поле для работы с несколькими таблицами рождает больше вопросов, чем ответов. Первая таблица пусть начинается с ячейки A:1... Ну хорошо, надо же ей с чего-то начинаться. А вторая? Z:1? А почему Z? Хватит ли этого запаса, если первая таблица разрастётся? А может, этот запас останется невостребованным и только будет мешать видеть за раз больше таблиц? И почему :1? Все таблицы надо строить в ряд, оставляя рост в длину для записей? А если хочется видеть таблицы друг под другом?

Опять же не знаю, кто именно ответственен за очередное извращение — Microsoft, Lotus, иль русский бог — но Таблицы, Inc. ответили появлением листов (sheets). Это крайне неудачная идея выделения под каждую таблицу (или что-то другое) своего бесконечного поля, начинающегося с A:1. Она обесценивает идею бесконечного поля (зачем оно тогда вообще?) и реализовано так криво (чтобы одновременно видеть две таблицы, размещённые на двух листах, надо овладеть идеей двух представлений одного документа aka Document 1.xls:1 и Document 1.xls:2), что неудивительно, что пользователи, скажем прямо, повертели её на половом органе. Несмотря на титанические усилия внедрить листы насильственным путём (а как ещё назвать автоматическое создание аж 3 листов в каждом новом документе?), используют их, в основном, тупорылые бухгалтерши, чтобы «прятать» от начальства график своих месячных. (Шутка. Используют их как способ паковать несколько документов в один, коим они технически и являются).

Но если бы дело было только в метафоре бесконечного поля! Всё хуже. Работа с таблицами предполагает (опять же неявно) классификацию не только по свойствам объектов, но и по типам этих свойств. В таблице, описывающей вещества (да, баклан — он сказал «вещества»!), в названии колонки «Плотность» через запятую будет добавлено нечто вроде «, кг/м³», что означает вещественное, гы-гы, число по стандарту СИ. В названии колонки «Формула» может не быть добавлено ничего, но из записи C2H5OH и прочих «2,4-метил...» будет видно, что это номенклатура ИЮПАК, а у автора нет желания иметься с субскриптовым оформлением.

Дураки могут не замечать эти особенности (как и тот факт, что периодическая таблица — многомерная), но нам с вами они очевидны. Что НЕ очевидно, так это то, насколько неявная типизация колонок завязана на творческое мышление. Даже распоследняя дура, поменявшая учебник по химии на билет в кукольный театр, увидев «C2H5OH» сразу догадается: «Он!» «Химическая формула!». Компьютер — нет. Почему? Потому, что не умеет мыслить, лол. Но это и не страшно. Он даёт нам такие удобные способы описания типов, что даже тип «химическая формула» может быть натыкан мышкой за 3 минуты безо всяких регэкспов. А иначе, извините, никак. Ну, разве только научить его думать, что в 79-м году было прекрасной мечтой (а в 2020 ни на шаг не стало ближе).

Далее софт начал воплощаться в программы двух видов (опять же, я не говорю, что по такому пути шла чья-то мысль — только эволюция). СУБД для дела (в которых таблиц много, их колонки типизированы и считается дурным тоном невынесение в справочники любой сколько нибудь автономной информации) и Excel для баловства (в котором дурным тоном считается вычислять сумму на калькуляторе и вписывать её в «Итого»... но это неточно). Последний развивался от одной глупости к другой. Типизация... ячеек (!!!!1111). (А что там ещё типизировать? На бесконечном-то листе? С отсутствием привязки к таблицам). Попытки гадания на кофейной гуще, приводящие к тому, что в таблице с генетической информацией MARCH1 считается датой. (Ещё раз: только сильный искусственный интеллект aka «искусственный человек» может по-настоящему хорошо решить эту проблему, но первое, что мы от него услышим, очень вероятно, будет: «Не имейте мне искусственный мозг и пользуйтесь явной типизацией»). Формульные связи не между колонками (которых нет), а опять же — между ячейками, подпёртые костылём автозаполнения. Одним словом — интеграл, которым ключи из унитаза доставать и рыбу на нём сушить.

Разделение на СУБД и деревянные игрушки, прибитые к потолку, кстати говоря, имеет любопытный рыночный механизм. СУБД плотно прибрали к рукам паразиты-программисты. «Вы же глупенькие!» — сказали они юзерам. «Вы в конструктор таблиц не сможете!». И чтобы юзеры не сомневались, что не смогут, зафигачили им SQL. (Ещё одна шутка. Вообще-то, исторически, SQL был попыткой научить зайцев курить — он разрабатывался, типа, как user-friendly-фасад для баз данных, и в своё время не один бухгалтер плакал кровавыми слезами над книжкой «SQL за 21 день» под угрозой увольнения. Но очень трудно отделаться от мысли, что это запутанное говно специально дизайнили чтобы рассажать сверчков по шесткам). И сейчас юзер возжелавший... да хоть вон автоматизации работы с генетическими справочниками... заплатит за всё, бля! За веб-интерфейс, за Insert-Edit-Delete-формы, за похапе, и за то, что у программиста такая херовая жизнь. А нет, так иди в Excel — там тебе все гены переименуют! (Страшно?)

Прошло 40 (сорок!) лет. А воз и ныне там. Особенно пикантно, что по рассказам инсайдеров, Microsoft, после того, как он проиграл битву за операционную систему сборной iOS/Android, держится на плаву во многом благодаря форматам документов, в том числе .xls(x). Это абзац, граждане. Таблицы ВОСТРЕБОВАНЫ как мало что другое, но за их ведением в 2020 году люди обращаются к зомби 1979 года, сделанному из говна и палок, который умеет что угодно — хоть изображать самолёт — но не умеет помогать вести табличное хозяйство. Тупее только умирать от жажды над колодцем, запертым на щеколду. (В деревне, где я провёл детство, были такие).

Ну да ладно. А что насчёт второй проблемы, не связанной с софтом? Сдаётся мне, пока мы не встроим себе в мозг СУБД, мы периодически будем воспринимать куски табличных данных как текст. (Распечатывать, например). Даже если при этом не задействуется программа, которая будет переформатировать данные как дурная, мы будем. Потому, что MARCH1 это не только ген, но и начало весны, объективно. И форматы — хорошие, чаще всего префиксные — нужны нам самим. Например, #. (В нашей стране в силу культурных и геополитических причин этот символ раньше записывали как №, а кое-кто записывает его так до сих пор). Он испокон веков кодирует разницу между индексом и, например, количеством, хотя и то, и то — числа. Однако, с недавних пор, если после # идёт не цифра или пробел, это хэштег. Другой пример: @ означает эккаунт. (И всю культуру original gangsters). Но символьная ёмкость не бесконечна. Гены дело перспективное, и под них не жалко ввести символ «Г зачёркнутое», однако перспективнее видится использование пар. Например, #$-MARCH-1 это ген, а @#-MARCH-1 это дата. В общем, я снова шучу, но посылая человека на@#$, помните, что вы навсегда закрываете для нас этот бездонный колодец.
varenikAA
varenikAA
21.09.2020 08:52
Здравствуйте, Shtole, Вы писали:

S>

S>Базы не создаются сами по себе.
S>— wildwind


Отличная статья. Только вот чтобы воспользоваться статической типизацией нужно как минимум поставить задачу.
А ее поставить очень сложно. Сам сейчас жду ясности второй год, а пока учет ведется в табличке.
Ну конечно haskell крут(хотя пишут стандартная либа не очень), поэтому можно использовать лайтовый вариант — F#.
Но все равно не поймут, почему ЭФ?
Для веба тоже придали отличный elm(с 100% совместимостью с haskell).
Но зачем, есть же blaor или как по русски: блэйзор.

Ну, а для всего остального сгодился бы common lisp, но кому нужны скобки, когдя есть стрелочки (void*)x -> Y?
Shtole
Shtole
23.09.2020 01:46
Здравствуйте, varenikAA, Вы писали:

S>>

S>>Базы не создаются сами по себе.
S>>— wildwind


AA>Отличная статья. Только вот чтобы воспользоваться статической типизацией нужно как минимум поставить задачу.

AA>А ее поставить очень сложно. Сам сейчас жду ясности второй год, а пока учет ведется в табличке.
AA>Ну конечно haskell крут(хотя пишут стандартная либа не очень), поэтому можно использовать лайтовый вариант — F#.
AA>Но все равно не поймут, почему ЭФ?
AA>Для веба тоже придали отличный elm(с 100% совместимостью с haskell).
AA>Но зачем, есть же blaor или как по русски: блэйзор.

AA>Ну, а для всего остального сгодился бы common lisp, но кому нужны скобки, когдя есть стрелочки (void*)x -> Y?


Благодарю!

Но я, когда писал, вообще-то, в голове держал не ЯП, а продукт для конечного пользователя. Тема, откуда я взял эпиграф:

https://rsdn.org/forum/usability/7479031.1

И там же -- ну, разумеется! -- ссылка на SharePoint. Да, он у нас такой один. Никак не напишут ему конкурента на замену.