Ведет @nikitonsky. Рекламы нет
Не очень понимаю людей, которые любят считать чужие деньги. Там один написал пост, что мол в Эпл умерла культура, когда они стали оптимизировать выручку, и что раньше мы такое уже видели у Боинга и у Интела. А ему в ответ: братан, зато выручка рекордная!
И вот тут я ломаюсь. Какая пишущему разница, сколько денег у Эпла? Конкретно? Лично? Персонально? Они к нему в карман никак не попадут, на благосостоянии не отразятся, на жизнь никак не повлияют. Эпл явно не будет этими деньгами делиться или раздавать их. Телефоны не станут дешевле. Да, Тим Кук купит себе очередной пароход или самолет, ну и что? Нам-то, простым людям, крестьянам, которые не сидят в Эпле у кормилки-поилки, какая разница?
А вот то, что Эпл начал говно делать, влияет на жизнь людей напрямую. Вы что, выбираете телефон не по функциям, не по надежности, не по удобству, не по цене, в конце концов, а по капитализации компании-производителя? Ооо, смотри, у этой компании в этом году выручка скакнула на 10%, пора на их телефоны переходить? Вы нормальные?
А, я же хотел вам еще фич айфонных подкинуть. Лайфхак-контент, так сказать.
Короче, абсолютно гениальная фича — на клавиатуре зажимаешь пробел, она превращается в тачпад, водишь по нему пальцем и управляешь курсором. Предательство базового принципа айфона, конечно (куда вижу, туда и нажимаю), но что поделать — удобно.
А гениальная она вот почему. Когда ты таскаешь курсор, она рисует их два. Один перемещается свободно, как по 2d канвасу. Второй это как бы его тень, и она показывает, куда курсор упадет, когда ты его отпустишь. Ну типа в тексте не любое положение курсора валидно, можно на середину буквы его утащить, или за конец строки. Полезно понимать, что хоть ты его туда и утащил, где он окажется на самом деле.
Ну вот, а теперь переходим к толике сумасшествия^W гениальности. Иногда, когда ты отпускаешь курсор, он летит не туда, куда нарисовано, куда, блин, он совершенно явно и недвусмысленно, отдельным, блин, индикатором, показывает, а в самое начало, где он был раньше, до начала перетаскивания.
Только у Эпл.
След, который я хочу оставить в культуре — восстановление оригинальной, смешной версии анекдота про «гусары, молчать!»
С ним, кажется, произошла обычная история — анекдот был смешной, но матершинный, он естественным образом адаптировался в безопасную версию, одомашился, так сказать. Такое часто происходит — поделиться хочется, но контекст/компания не позволяют.
Обычно в таких случаях мат заменяют на безопасный эвфемизм (хуй на хрен, пиздец на пипец, блядь на блин, ну вы поняли) так, что смысл почти не страдает. А тут безопасная версия как раз потеряла саму шутку. Было смешно, а стало... э? Где смеяться? Причем фраза именно из популярной версии вошла в язык, и это хорошая, полезная фраза. Обидно просто, что за этим всем потерялся хороший анекдот, в котором ее даже не было.
Короче. НЕсмешная, безопасная версия:
---
Пригласила как-то Наташа Ростова к себе в гости полк гусар. Поручик гусарам говорит:
— Господа гусары, хозяйка — дама утонченная, посему прошу в гостях площадными словами не выражаться и пошлостей не говорить!
Вечер, сидят за столом, висит гнетущая тишина. Наташа пытается разговорить гостей:
— Господа, представляете какой конфуз! Заказала для сегодняшнего вечера свечи, вставила их в люстру, во все подсвечники — и одна лишняя осталась! Куда ее вставить — ума не приложу...
Тут поручик вскакивает с места:
— Гусары, молчать!!!
---
А вот нормальная, которую я и хочу восстановить:
---
Пригласила как-то Наташа Ростова к себе в гости полк гусар. Поручик гусарам говорит:
— Господа гусары, хозяйка — дама утонченная, посему прошу в гостях площадными словами не выражаться и пошлостей не говорить!
Вечер, сидят за столом, висит гнетущая тишина. Наташа пытается разговорить гостей:
— Господа, представляете какой конфуз! Заказала для сегодняшнего вечера свечи, вставила их в люстру, во все подсвечники — и одна лишняя осталась! Куда ее вставить — ума не приложу...
Тут поручик вскакивает с места:
— Гусары! О пизде ни слова!
Смотрел тут на очередное веб-приложение, там в ряд — текстовое поле, две кнопки, выпадайка. Все примерно одного дизайна (серая однопиксельная рамка, белый фон) и примерно одного размера. Примерно, потому что не точно — очевидно они должны были быть одинаковыми, но не смогли.
Простейшее наблюдение, которое тут можно сделать — программа победила программиста. Инструмент стал настолько сложным, что его уже нельзя контролировать, или можно, но ценой чудовищных затрат, вот никто и не пытается.
Другое наблюдение — про эволюцию АПИ. Казалось бы, веб-технолгии должны были упростить жизнь разработчиков. Каждое изменение добавляло новый _простой_ способ что-то делать. И вот прошло 30 лет, мы прошли длинный путь маленьких инкрементальных изменений и оказались в точке, где делать простые вещи не просто, а наоборот, сложно.
Казалось бы, как это бы выглядело в идеальном случае? Пришел программист, сказал height = 36px
, ну может еще добавил, что текст надо по центру. И все. Работа сделана. Примерно так было в условном Дельфи, который до сих пор все вспоминают с теплотой. Секрет в том, что на этом и надо было бы остановиться. Но мы давно промчались мимо этой идеальной точки и теперь ее не видно даже в зеркале заднего вида.
Что же произошло вместо этого? У вычисления высоты появились правила. Нельзя теперь просто указать высоту, она вычисляется, с одной стороны, от размера шрифта снизу, а с другой от контейнера сверху. Еще бордер там добавится, маргин какой-нибудь схлопнется, ну вы поняли. Очень непрозрачные правила, а главное — их очень много. Причем каждое правило, когда добавляли, наверняка что-то упрощало. А теперь все вместе они стали просто непозноваемыми. Почему прямоугольник с заданной высотой с текстом отличается от прямоугольника с такой же высотой но без текста внутри? Поди разбери. Работает как-то и бог с ним.
Туда же эпидемия с центрированием. Раньше были шутки, что на вебе сложно вертикально центрировать div. Сейчас этот вопрос вроде бы порешали, div центрировать можно, а вот с текстом все еще проблемы. Опять же, потому что правила совершенно идиотские, никто не знает, как условный line-height работает. На весь интернет может быть одна статья про него, где человек разобрался, а остальные просто на глазок подгоняют, я уверен. И дизайнеры шрифтов, кстати, тут вообще не помогают.
Добавьте к этим идиотским правилам центрирования текста идиотскую моду на шрифты с иконками и вот мы в абсурдной ситуации, когда прямоугольник никто не может поставить ровно в другой прямоугольник.
Вы скажете, что я преувеличиваю, нагоняю драмы. По идее, да, в каждом конкретном случае можно сесть, разобраться и починить. Потенциально сделать нормально можно. Проблема в том, что трейдофф затраты/выгода сейчас сильно перевешен в сторону затрат, поэтому мало кто вообще пытается. Оно не должно было быть так сложно, алло! Простые вещи должны делаться просто.
Это все удивительная демонстрация, как на большом масштабе «умные» декларативные правила, которые должны помогать, скорее мешают, потому что их поведение сложно предсказать. И это не только веба касается, со SwiftUI та же беда — хотели сделать проще и высокоуровневее, а оказалось, что и неудобно, и ошибиться в разы легче, чем когда были простые и деревянные прямоугольники, которые ты ставил куда нужно.
Короче, сложных «умных» правил быть не должно. Нужно делать минимально необходимый минимум, но надежный, предсказуемый и познаваемый (т.е. должен в одну голову помещаться). Тогда это фундамент, на котором можно что-то строить. А так болото какое-то. Жидкий грунт.
С одной стороны коллапс цивилизации (программисты теряют экспертизу, программы становятся хуже).
У меня уже ходовая поговорка: «Компьютеры. Никто не знает, как они работают». Звучит смешно, но я говорю это буквально, не как метафору. Потому что каждый день, рутинно, по несколько раз происходит какая-то необъяснимая хрень. Файл не отсылается, созвон устанавливается без картинки, клавиатура не коннектится, нотификация не показывается.
И этому нет никакого объяснения. Реально никто не знает. Системы давно превысили порог сложности, доступный одному человеку, а стимулов снижать сложность особо нет. Что использование компьютеров, что программирование под них давно уже превратились в «запинывание», потому что «понимание» и «проектирование» и в голову не лезут, и жизни никакой на них не хватит.
Ну вот. Думаешь — ну, справимся поди как-нибудь. Раньше же как-то справлялись.
Ага, ага. Тут приходят ЛЛМ-ки. И умножают проблему на сто. Ладно, народ раньше не разбирался, но они хотя бы чувствовали укол стыда за это (чувствовали же, да? чувстовали?) А теперь вроде как получается, что и разбираться не нужно.
Мне серьезные, опытные программисты пишут на полном серьезе, что программировать мы скоро будем на английском языке, что не важно, что ты там умеешь, ЛЛМ-ка сама как-то там разберется, поэтому делать что-то потеряло всякий смысл. Все уже сделано, пора капитализировать. Ну-ну, посмотрю я на ЛЛМ-ку, которая перепишет ffmpeg на питон. Мы как-то стали забывать, что ЛЛМ это не магическая коробочка, которая может сделать что угодно, а переводчик с английского на питон (ну или какой-нибудь другой язык/стек), и вот этот вот стек должен уже существовать, она его волшебным образом не материализует.
В общем, мой поинт в том, что крайне невовремя появились ЛЛМ-ки. И так никто ничего не умеет, так сейчас они еще и рады не уметь.
В комментах вчера люди читали «более опытные» как «лучшие» или даже «более умные», чего я, конечно, не говорил. Более опытные это буквально люди, у которых больше опыта. Заметьте, это не значит, что они в чем-то другом лучше. Один комментатор даже сказал, что я думаю, что лисп это язык для более умных людей.
Это, кстати, интересная тема. Люди часто думают, что умные люди лучше во всем — знают больше, лучше питаются, лучше выглядят, больше зарабатывают, пишут лучше программы. Что конечно не так — зачем умным людям писать программы, они что, дураки? Или про деньги — если ты такой умный, где твои деньги — ну так а зачем умному человеку деньги? Это скучно, это сложно, и это не решает никакой его проблемы. Если посмотрите вокруг себя, то богатые люди в основном не очень-то и умные. Им некогда развиваться, им надо деньги зарабатывать.
Короче, моя теория в том, что умные люди, они, ну, просто умные. У них большой мозг, он может оперировать большим количеством абстракций, они могут продраться через большее количество сложности, чем средний человек. Но это не значит, что они будут писать лучшие программы! Они, скорее всего, будут писать более сложные программы, чтобы свой огромный мозг чем-то занять. Один сильный программист на Хаскелле, например, как-то рассказывал, что любит чисто вот эти типовые паззлы, как написать правильные типы, решать. Волновали ли его при этом эксплутационные или эргономические качества получаемой системы? Да не особо.
Если не верите, я уже как-то писал про чувака, который придумал тест на айкью (который определяется, напомню, решением паззлов). Он думал, что соберет людей с высоким айкью в клубе и они будут вершить судьбы мира. А на практике оказалось, во-первых, что очень умные люди были равномерно распределены по всем слоям населения — и богатые, и бедные (т.е. высокий айкью не значит, что ты много заработаешь или будешь иметь положение в обществе), а во-вторых, когда они все собрались в клуб, они в основном хотели решать паззлы, а не вершить судьбы мира.
Так что не думайте, что если бы у вас был большой ум, вы бы заработали кучу денег, написали самый успешный стартап и по жизни принимали бы только правильные решения. Ум тут вообще ни при чем. Вы занимались бы в основном тем, чтобы ум этот чем-то занять.
А вас не бесит, что американцы, когда говорят про вид спорта, например, баскетбол, называют его как и мы, Basketball. А когда речь заходит о спортивном снаряде, баскетбольном мяче, то есть, они уже говорят Basket ball.
Понятно, что basketball ball было бы тупо, но и basket ball тоже как-то ни туда ни сюда. Спорт, получается, basket что ли?
Что меня отдельно бесит в Яндексе (помимо всего остального) так это их усердие в показе рекламы.
Все остальные сайты как сайты: делают вид, что показали рекламу, мы сделали вид, что посмотрели. Кто баннерную слепоту выработал, кто адблоком зарезал. Приличия сохранены, каждая сторона получила что хотела. На этом негласном договоре весь интернет и держится.
Но Яндекс не такой. Они подумали: подождите, это непорядок. Если уж мы взялись показывать рекламу, то у нас будет такая реклама, которая все фильтры обойдет и дойдет до любого пользователя, как бы он ни старался. Щас мы наших программистов напряжем, не зря же мы их столько умных набрали, и они что-нибудь придумают.
Ну, придумали. А толку-то? Просто бесить начали больше, чем все остальные.
Расскажу про историю кнопки «Применить». Это паттерн из Винды 90-х: диалоговое окно, настройки, Ok-Cancel-Apply. Они его придумали, они его придерживались, так что неудивительно, что многие в него поверили и решили, что так и надо.
А теперь новости: на Маке такого паттерна не было. Ты заходишь в диалог, скажем, настройки скорости мыши, меняешь скорость и... все. Не надо ничего нажимать, «применять», сохранять и так далее. Просто передвинул ползунок и дело сделано.
Окей, есть два конкурирующих паттерна. Какой из них более правильный, более естественный, более интуитивный?
Конечно же без кнопки «Применить»! Подумайте: все в мире работает без этой кнопки. Ты включаешь кондиционер в машине и он просто включается. Его не надо применять. Ты крутишь ручку частоты или громкости у радио, и они просто меняются. Их не надо применять. Ты нажимаешь кнопку на пульте телевизора и она действует немедленно, без отдельного «применения».
Паттерн с применением же контринтуитивен. Вот у меня есть настройка, не знаю, «цвет курсора». Я выбрал розовый. Почему цвет не поменялся? Я же его уже выбрал. Более того, розовый явно выделен в окне как выбранный, активный. И тем не менее курсор все еще черный.
Чтобы этот паттерн понять, в голове надо держать концепцию «буфера» операций, которые отображаются, но не работают. Это сложная, путающая, контринтуитивная концепция, которая ни для чего не нужна, а возникла, скорее всего, от бедности — когда поменять обои, например, занимало ощутимое время, а поток исполнения был один и морозить UI тред не хотелось. Те времена, конечно, давно прошли, и технической надобности в «отложенном» применении давно нет.
Умные, здоровые люди заметили, что этот паттерн постепенно вымер — в телефонах, главных компьютерных устройствах для нормальных людей, его нет нигде. И даже в современной Винде его надо еще поискать. Так что не надо его, пожалуйста, защищать — да, вы так привыкли, так выросли, но все это было ложью, вас обманули, и это все было зря. Что ж теперь, до конца жизни за него держаться просто из упорства?
Вы еще скажите, что файлы после редактирования надо явно сохранять вручную!
Мое любимое ООП-изобретение это статические методы. Доступа к объекту нет, стейта нет, наследования нет, на деле могли бы быть обычными функциями. Но нееет, надо было в класс засунуть, потому что иначе концепции «все есть объект» не получалось
Читать полностью…Храни бог язык Го и тулзы, на нем написанные.
Я знаю, что вы все от него нос воротите, но с точки зрения пользователя это сплошное благо: если тебе нужно что-то на сервер, с высокой вероятностью есть проект на Го, который это делает, распространяется как один бинарник, ничего не требует, мозги не ебет, в общем — просто работает.
В отличие от обычных линуксовых тулов, которые ставятся из дистрибутива, их хрен обновишь на современные версии, они срут по всему диску, запускаются с бубном, требуют пяти пользователей, каких-то библиотек, теряют их, а когда находят, работают в итоге все равно хуже.
Хочу дистрибутив, который ориентирован на установку no-nonsense одиночных бинарников с Гитхаба.
Язык, говорят, тупой. Если он такой тупой, почему тогда тулзы на нем делают такие хорошие?
Прочитал сегодня сентимент, что люди с ИИ совсем по-другому программируют. Мол, у них не хватает умственных способностей прочитать сообщение об ошибке и понять его, они просто копируют его неглядя обратно в LLM и просят исправить. То ли дело, в наше время...
Ну вот, а я что хочу сказать. Практика, конечно, с одной стороны так себе. А с другой — ну камон, мы все коллективно приучивали и продолжаем приучивать друг друга и остальных людей, что сообщения об ошибках в компьютере — это что-то слабопознаваемое, загадочное и мистическое.
Компьютер же никогда не скажет: «Дебил, ты забыл запятую». Он скажет что-то типа «Ошибка парсера 888 на строке 666: тип ФФФ не определен». И мало того что текст будет не про то, так еще и место окажется в трех километрах от настоящей причины. Он не скажет «доступ к несуществующему полю X», он скажет «Undefined is not a function» или еще какой-нибудь трюизм.
Это еще хорошо, когда хоть какая-то ошибка есть. Иногда ее вообще нет. «Ой, что-то сломалось! Мы уже работаем над этим» (ага, щас, работают они). Ну или SEGFAULT, core dumped. Return code -42. Привет.
Понятно, что делать хорошие ошибки сложно. И дорого. И поэтому их никто не делает. За реееееееееееееееее(да, все еще ееееееееееее)-едкими исключениями. Понятно, что я и сам был причастен к определенному количеству плохих ошибок. Мы все были.
Но это я все к чему? К тому, что реальность работы с компьютерами такова, что они почти всегда говорят одно, а имеют в виду другое. Это прямо сейчас так. Не в идеальном мире, не так, как должно быть, а так, как есть, прямо сейчас, объективно, на текущем массиве софта и харда.
И вот в этой текущей реальности нужно постоянно держать в голове слой трансляции из сообщения в смысл. Опыт в айти это, собственно, база вот таких трансляций — кто больше дерьма повидал, тот и опытнее. Скажите спасибо, что у нас хотя бы интернет с Гуглом есть.
Так что я бы людей не винил в нежелании учиться переводить с компьютерного. Они не то чтобы не хотят вникать, они просто хотят получить смысл, а не загадку сфинкса. Да, наверное, есть какая-то профессиональная гордость в умении понимать многоэкранные стектрейсы. Но в целом это скорее психическая травма, профдеформация, и люди без нее будут, наверное, чуть счастливее.
Короче, ребзя, я понял, в чем корень недопонимания!
Вас всех когда-то напугали числами с плавающей точкой. С высокой вероятностью вот этим примером:
0.1 + 0.2
=> 0.30000000000000004
1.0 + 2.0
=> 3.0
513.0 / 27.0 === 19.0
for (var i = 0; i < 1_000_000; i += 1) {
arr[i]
}
i
в данном примере это флоат, и 1_000_000
это тоже флоат, и += 1
добавляет к флоату флоат (потому что в JS все числа это флоаты). Можно всю жизнь писать на JS и не знать, что все это время ты оказывается разговаривал флоатами.
for (var i = 0.0; i < 1_000_000.0; i += 1.0) {
arr[i]
}
Узнал какое-то время назад, что некоторые люди, возможно даже члены моей семьи, используют кнопку закрытия окна для сохранения. То есть жмут на крестик, комп такой — ой, документ не сохранен, сохранить? И эти люди такие — да, сохраняй. Железные нервы у этих людей, возможно даже членов моей семьи.
Подумал, что современная версия этой истории — удаление иконок с экрана айфона. Чтобы убрать иконку с экрана (но не удалить приложение совсем), надо на нее нажать, подержать (см. пост про «нажать и подержать») и выбрать опцию «УДАЛИТЬ СОВСЕМ». Опция красная, со знаком стоп, все как полагается.
Увидев, что вы собираетесь удалить потенциальный источник 30% прибыли, айфон приходит в себя и показывает ПОДТВЕРЖДЕНИЕ. Так вот, в этом подтверждении есть обычные «Да, удалить», «Нет, не удалять» и «Удалить с экрана». Последнее это как раз то что нам было нужно. Нажимаем, иконка пропадает, но приложение остается в памяти телефона.
Вопрос, почему не вынести эту опцию на один пункт выше? Почему, когда я держу иконку пальцем и смотрю на меню действий, сразу не предложить «Удалить совсем» и «Удалить с экрана»? Зачем каждый раз заставлять меня проходить через меню полного удаления, зачем этот риск, игра со смертью? Щас я тебя удалю, ха-ха, да пошутил я, ты что, испугался?
Ответ — потому что Эпл.
Мы все смеемся над задачами на смекалку на интервью, а я меж тем наблюдал на днях в офисе, как чувак набирал 1,25 литра резервуар с помощью литрового кувшина.
Налил какое-то произвольное количество воды, заполнил резервуар на 0,25 (там есть метки), ну а после добрал кувшин полностью и это был ровно литр еще.
А вы говорите, тригонометрия не нужна.
Как и любой школьник в 2000 году, который к тому моменту видел в лучшем случае Виндоус 98, меня завораживала идея Линукса и прозрачных терминалов. Издалека казалось, что это должно быть дико круто — и буквы видно, и картинка красивая.
Прошло какое-то количество лет, прежде чем я добрался до Линукса сам, и первое, что я попробовал — сделать терминал прозрачным. Примерно через пять секунд я понял, что полностью прозрачный — полная фигня, ни букв не видно, ни картинки, сплошная каша.
Ладно, подумал я: надо просто уменьшить степень прозрачности. И вот я ставлю 50%, 75%, 90% непрозрачности. Буквы видно уже лучше, но все равно какая-то грязь, лишний мусор. Короче, довольно быстро я осознал, что лучше всего прозрачный терминал смотрится на 100% непрозрачности. Иначе грязь.
Потом видеокарты стали помощнее и разработчики стали делать эффект размытия. В принципе, размытие нормально работает, когда фиганешь ему радиус пикселей в 500-1000. То есть когда это едва заметный непрозрачный абстрактный градиент. В этой точке уже не важно, реально там содержимое под окном просвечивает или просто взяли фон такой. Но, опять же, настолько абстрактный градиент воспринимается как грязь, и если его заменить просто ровным белым фоном, станет только лучше.
В общем, для интерфейса прозрачность не подходит никак. Сделаешь сильно прозрачно — выглядит чисто, но текст не читается. Сделаешь тексту тень — грязно. «Замутнишь» само стекло — текст начнет читаться, но стекло будет в не очень красивых разводах. В итоге, как ни крути, приходишь к выводу, что лучше всего работает сплошная непрозрачная заливка цветом.
Прозрачность уродлива. И это не чинится.
В общем-то, это и было то что отличало нормально выглядящие ОС (мак, винда-не-виста) от безвкусных скинов и Линукса. Мне казалось, что вот я это понимаю, и что люди, у которых есть вкус, это понимают.
Что ж, добро пожаловать в 2025-й. Все интерфейсы сделаны из стекла, надписи на котором еле видно, все грязное, противно-едва-полупрозрачное и меняет цвет подложки при скролле. Скорей бы люди этого наелись и вернулись к простым как палка заливкам. Плоский дизайн, оказывается, был не самой большой катастрофой.
Я знаю вы очень любите когда я тут жалуюсь на айфон, пользователям андройда это позволяет на короткое время забыть о своих собственных багах и позлорадствовать над чужими.
Короче, в айфоне когда-то была очень клевая функция: burst photos. Нажимаешь и держишь кнопку затвора, она фигачит серию фоток одна за другой, ты потом в специальном интерфейсе выбираешь, какая лучше получилась. Удобно для всяких быстрых событий, типа прыжков каких-то, или спорта там.
Ну вот. В какой-то момент менеджеры айфона решили, что им нужно повышение, и поменяли эту функцию на... видео! То есть сейчас если ты в режиме фото (фото, блин!) зажмешь затвор, он снимет видео! Зачем? Зачем в режиме фото кнопка вызова видео, если видео это отдельный режим и включается буквально соседней кнопкой?
Тогда я подумал, что «хм, может быть они настолько уверены в качестве своего видео что оно будет не хуже фоток и я точно так же смогу из него выбрать один кадр». Но нет, из видео (средствами айфона) вытащить один кадр никак нельзя. Понятно, что я сделаю это на компе, но блин, зачем было удобную функцию убирать и заменять ее функцией, которая и так есть и которую и так можно тривиально вызвать другим, давно устоявшимся способом.
Пошел еще чатгпт поспрашивать, как из видео кадр вытащить, так оно мне говорит: функция Burst осталась, надо потянуть (!) кнопку затвора влево. И тут я сломался.
Как меня задолбали эти невидимые функции! Что, жопа отвалится сделать блин кнопку с подписью? Почему мне нужно гуглить, как вызвать базовый функционал? И почему это всегда какой-то ебанутый жест типа «нажать, подержать, сплюнуть через плечо, потанцевать». Почему все время надо что-то куда-то двигать и откуда-то брать, где ничего нет и догадаться, что там что-то есть, никак нельзя? Что не так со старыми добрыми кнопками с подписями? Что это блядь за система ацтекской письменности, что мы тут, снепчат что ли делаем? Специально запутанный интерфейс, легенды об использовании которого передаются из уст в уста, потому что самому разобраться нереально?
В мои времена ты запускал новую программу, шел в меню и читал названия каждого пункта. Так ты узнавал все функции, которые умела программа. Магия! Во всем можно было разобраться самому! И не было никаких «а ты знаешь, что если зажать кнопку громкости и в этот момент порверуть айфон на бок...». Знаю конечно, в меню видел!
А сейчас Эпл даже если и делает явную видимую кнопку (ужас, да? Какое страшное преступление против минимализма), то и там вместо простых подписей типа «экспозиция», «фокус», «вспышка» дебильные минималистичные иконки типа «круг с полузатенением» или «три квадрата». Что такое три квадрата? А что такое три концетрических круга, два из которых сплошные, а третий пунктирный? Не знаете? Неужели не очевидно? Пахнете слабостью.
Никогда не думал, что можно сделать сложным фотораппарат. Оказывается, можно! Если ты компания, которая выпускает ПО для скромной ниши в полтора миллиарда пользователей.
Я тут фантазировал и подумал, что хочу от компьютера.
С одной стороны, системы ведения заметок меня совершенно не возбуждают. Что-то там записывать еще туда-сюда, я для этого по факту Телеграм использую, но всякое дрочево на кросс-ссылки это уже слишком. Абсолютно бестолковая идея, которая еще никого ни к чему полезному не привела.
С другой мне не очень нравится мир, в котором на каждый чих свое, уникальное как снежинка, приложение. Приложения держат в заложниках твои данные, предоставляют к ним часто не самый удобный интерфейс, но самое неприятное — многие приложения сводятся тупо к простейшей базе данных на одну табличку и какому-то несложному по ним селекту.
С третьей, я уже как-то писал, мне не нравится, что программировать сложно. Ты делаешь все самое интересное за 10% времени, а 90% тратишь на то, чтобы это оформить, завернуть, собрать и запустить.
Короче, я хочу систему программирования домашнего компьютера. В ней должны быть:
База данных. Локальная, понятно, и скорее всего какая-то документная, потому что сочинять схему каждый раз замаешься. Но с запросами — я хочу делать интересные выборки, агрегации и так далее.
К базе прилагается какой-то приятный просмотрщик/табличный редактор, чтобы я мог смотреть, где что лежит, как что устроено и что вообще бывает. Причем в базе будет все, включая внутренний стейт самого приложения. Полная открытость.
Редактор текста. Я понял, что хочу вот прям выдроченный до мелочей. Чтобы все четко, красиво, аккуратно, удобно, с продвинутыми фичами. Редактор много кто делает по остаточному принципу, и из-за этого мне не очень нравятся условные Apple Notes или Obsidian, а я хочу каждый раз кайфовать. Хорошие новости что его достаточно будет сделать один раз, и он будет одинаковый для всего.
Среда программирования. Я хочу, чтобы там можно было прям писать программки. Может это будет специальный тип документа. Понятно, что нужен легкий доступ к базе, REPL, никаких перезапусков. Язык пока неясно какой, но явно какой-то динамический. Если бы я искал успеха, то наверное Питон или Луа. Если для себя, то наверное Кложа.
Кстати, одним из языков может быть ИИ. Типа, ты описал какую-то задачу на английском, а потом дергаешь роботов чтобы они тебе ее делали, по кнопке или по расписанию.
Всякие удобности для программирования. Хочу, чтобы легко было показать нотификацию, например. Или настроить регулярные запуски по расписанию. Или подписаться на какие-то события. Или получить/отправить почту. Или в Телеграм написать. Или прочитать. Или вывести статус в менюбар. Или клики какие-то обработать. Все это должно быть МАКСИМАЛЬНО просто. На уровне «позвать один метод», не на уровне «проебаться с АПИшками полдня». Хочу в этом один раз разобраться и потом всю жизнь использовать.
Возможности строить вьюхи. То есть структурные данные у тебя есть, язык программирования есть, вот хочу «умные» страницы которые делают какие-то там запросы, как-то их обрабатывают и показывают тебе какие-то интересные цифры, типа среднюю продолжительность сна за месяц или сколько часов жизни ты потратил на телек или что-то типа того. Все, что мне придет в голову. В идеале это должно быть настолько просто, что от идеи до реализации должны проходить минуты, на кончиках пальцев.
Все вместе это такая персональная база данных для всего, в которой и структурированные данные, и заметки с картинками (как один из видов структурированных данных), и все это можно программировать. Причем программировать удобнее, чем обычные приложения, потому что вся инфраструктурная обвязка (база, редактор, среда исполнения, интеграции) уже сделаны, остается только ими воспользоваться.
Вот. Называться будет The Computer. Потому что это то, как персональное вычислительное устройство должно на мой взгляд работать. А не вот эти вот ваши пук-среньк, извините, ваш айпад не поддерживает арифметику, пожалуйста, поставьте нам пять звезд в апсторе.
Самая загадочная для меня технология — SSE (server-sent events). Вот были вебсокеты. Формально это отдельный протокол, но прикидывается HTTP, чтобы обходить всякие прокси. Двухсторонний, эффективный до жути, бинарные данные поддерживает. Сказка, дар богов.
И люди такие посидели, покумекали и решили: а давайте его улучшим! Как? Какие с вебсокетами проблемы? Вроде никаких. Тогда давайте испортим! И сделали односторонний протокол (вместо двухстороннего), в котором разделитель двойной перевод строки (т.е. надо стримить и парсить пакеты, пока не найдешь паттерн, какого размера буфер выделять непонятно, пересылаемые строки надо ескейпить). Удобно! Очень. Медленно и сложно? Еще как!
Так придумали SSE. Но люди почему-то сходят по нему с ума. Я своими глазами видел, как люди переписывали уже существующие API с вебсокетов на SSE со словами «да нам не очень-то нужно в обратную сторону сообщения передавать». Ну не нужно и не нужно, но у вас уже есть реализация на вебсокетах, зачем переделывать-то...
Короче, сколько я ни читал про SSE, сколько ни сравнивал, сколько ни пытался понять, вебсокеты всяко лучше выходят. И придумали их раньше. И поддержка у них лучше. И эффективность. Так что SSE — абсолютная для меня загадка. Может люди слова «сокет» боятся?
Короче, я подумал и все-таки самая главная вещь, которую я хочу от языка программирования/окружения — это писать все в одном месте.
Вспомните, когда программирование приносило вам наибольшую радость? Когда написал локальную программу, запустил тут же и она работает. Все локально, память общая, все средства языка работают, вызвать функцию или передать тривиально. Ничто, я повторяю, НИЧТО в жизни не приносит большего удовольствия, чем писать локальную программу. Поэтому программисты так любят переписывать и без того уже хорошие CLI утилиты на Rust — это тупо приятно.
Ну вот. Потом пришел веб, и мы потеряли невинность. Появилась трехзвенная архитектура (фронт-сервер-база), и многие решили, что так и нужно. Уверен, кто-нибудь по сей день готов с пеной у рта доказывать, что это хорошая архитектура, что ее не дураки придумывали, что по-другому нельзя все равно, и что я не разобрался. И на деле — ну да, она работает. Но ценой сложности. Она усложнила программирование.
В чем сложность? Все эти компоненты написаны по-разному (исторически сложилось) и не особо разговаривают друг с другом. Бэкенд функцию уже так просто не позовешь с фронтенда. В базу не сходишь без церемоний.
Даже языков стало несколько. Приложения уже не написаны на С++. Они написаны на JS + Python + PLSQL + черт знает что еще. Где язык, там и стек. Нужны АПИ, сериализация, кубернетесы, а это куча дополнительной работы. Для джоб секьюрити хорошо, конечно.
Появилось разделение программистов — фронтендеры, бэкендеры, мобильщики. Каждая часть стека стала настолько сложной, что за карьеру ты можешь освоить что-то одно. Как результат, один человек уже не может написать программу целиком (или, если может, то ох как заебется). Накидать проектик на выходных тоже не слишком просто. Если это не команд-лайн утилита, конечно. Программы, которые писать приятно, никому не нужны, а программы, которые нужны людям, писать сложно. Противоречие-с.
Ну вот. А теперь возвращаемся к исходной посылке. Как сделать программирование снова приятным? Нужно писать все в одном месте. Чтобы не нужно было пяти языков. Чтобы все со всем работало, дружило, разговаривало. Чтобы доступ был прозрачный и унифицированный. Чтобы все было встроено — и база данных, и UI.
Звучит фантастично? Ну и что. Почему нет? Мне очевидно, что это кардинально снизит сложность создания программ. И сложность управления программами. Да, эволюционно мы пришли в совсем другую точку, где каждая часть стека развивалась сама по себе. В итоге ты получаешь симулятор шизофреника: так, на каком языке я сейчас пишу? Как тут ставятся комментарии? Camel case или snake?
Вместо этого можно знаете что? Проигнорировать всю эту инженерную мудрость и сразу пойти в ту точку, в которую мы хотим. Вроде цель ясна. Фундаментальных препятствий, вроде, никаких нет.
Вспомните Darklang. Если я правильно понимаю, ты заходил к ним на страничку, открывался редактор и ты правил систему. Все. Что ты там наисправлял, то и сервится наружу через HTTP эндпоинты. Деплоя нет. Коммита даже нет. Ничто никуда не нужно пересылать, нигде данные не нужно перекидывать через забор. Звучит фантастически. Но пруф концепта работал (потом, правда, деньги закончились).
Только у Darklang не было никакой UI истории. А UI тоже должен быть встроен, и встроен нормально, с интеграцией в сервер, с доступом в базу. Это не должно выглядеть как миллион веб-макак, пишущих очередной компонент с тридцатью хуками, единственная цель которого — превратить React в HTML, который в свою очередь соберет JSON, чтобы сходит в сеть на сервер, который соберет SQL, чтобы сходить за вас в базу. И все это нужно, чтобы на эране появилась цифра, сколько программистов получают зарплату в отделе. Когда я думаю, сколько бессмысленной, никому не нужной работы происходит в этой цепочке и что многие люди считают это state of the art и ничего плохого в такой архитектуре не видят...
Елси программирование будущего будет выглядеть так, то лучше сразу отрубите мне пальцы. По самую шею.
В очередной раз вспомнил, что споры про программирование в интернете это в первую очередь споры людей на разном этапе развития. И конфликт состоит, в общем-то, в том, что люди с разным количеством опыта просто не могут понять друг друга. Не не хотят, а именно не могут — это важно. Причем в обе стороны, и старые молодых, и молодые старых.
Например, недавно в очередной раз объявили зашкваром использование utils. Типа, там всегда хаос и бардак, типа, признак плохого кода. «Технический долг».
И знаете что? Когда-то я и сам считал utils зашкваром, и даже пытался навести там порядок. Менял имена, делил по смыслу, раскидывал по другим модулям. А потом понял, что силы, которые на это уйдут, не стоят потенциальной пользы. Ну да, бардак, ну и что? Как будто у вас нет дома универсального ящика с барахлом, которое не вписывается больше никуда, и которое разбирать себе дороже. Можно ли навести порядок в utils? Можно. Что мы от этого получим? Немножко эстетического удовольствия, и только.
Или Эндрю Келли, создатель языка Zig, объясняет, почему в Zig нет приватных полей. Люди с опытом побольше в основном соглашаются — ну да, ну да, все поля по факту публичные, границы размыты, и т.п. А люди, которые только начали программировать и знают один язык, в котором есть приватные поля, сразу — как же так? Как без приватных полей жить-то? Это ж ни одной программы не получится написать? А все кто не согласны — дураки!
Так и живем. Хорошо, что есть языки для начинающих, а есть для взрослых уставших бородадых дядей и тетей. Можно спокойно разойтись по углам и играть каждому в свои кубики.
С годами понимаешь, что идеальное количество экспозиции было в Принце Персии 1989 года. Злой визирь заходит к принцессе, тянет к ней руки, она отворачивается, он сердится, ставит песочные часы и уходит. И все, это все, что нужно знать. Одна сцена, три сдержанных, но точных движения, ни склеек, ни ракурсов, а все понятно. Гений. Я даже в 10 лет, без никакого английского, и то все понимал. Можно начинать играть.
И никто не объясняет, что ты в тюрьме (и так видно), что стражники не дадут тебе пройти (разберешься как-нибудь) и что в общем-то делать (спасать принцессу, что еще?). «Смотри, принц, вон те шипы на дне ямы — постарайся на них не падать!» «Смотри, вот эта гильотина может тебя раскусить. Постарайся ей не попадаться!» — этого ничего нет, потому что блин, И ТАК ВСЕ ПОНЯТНО.
Это я просто скачал нового Rogue Prince of Persia, от создателей Dead Cells (создатели Dead Cells — это как дети лейтенанта Шмидта, их тоже штук пять проектов есть с таким заявлением).
Dead Cells я нежно люблю, в том числе и за то, что там тоже было идеальное количество экспозиции. Ты выползаешь амебой из трубы, залазишь в труп, встаешь, говоришь что-то типа «о, нифига себе, я что, умер?» — и все, погнали. Что еще нужно знать? Вот враги, вот меч, вот подземелье. Никая история тут, в общем-то, не нужна. Иногда при загрузке уровней тебе напишут какой-нибудь flavour text типа «Чтобы не скучать, стражники иногда сбрасывают заключенных с башни. Нет ничего страшнее чем видеть, как тебя подводят к краю». И все. Намек дан, а дальше простор для воображения. Ну и арт делает основную работу — мы верим тому что видим, а не тому, что про это написано. Show, don’t tell, и никакого лудонарративного диссонанса.
И на фоне этого Rogue Prince of Persia, конечно, подкачал. Там какая-то россыпь персонажей-наставников, помощников, советчиков, торговцев, и ни один из них не может заткнуться. Всем им нужно что-то сказать, причем не что-то сильно умное или важное, а что-то банальное, типа «Я торговец. Если тебе нужны товары, тебе ко мне. Ты найдешь меня в лагере. Я буду там торговать товарами. Ищи лоток торговца. Ты узнаешь его по надписи „Торговец“. Все понятно, или повторить?» И это просто невозможно, прям уши вянут. Понятно, что игра не про это, понятно, что это все можно скипать, но жаль, что люди не чувствуют бессмысленности этих речей и как они убивают момент.
Краткость — сестра таланта, если бы у меня было больше времени, я бы написал более короткое письмо, лаконичность стоит денег — это все понятно. Жаль, что этот навык не перенесся из Dead Cells. Там, при всей ее немногословности, атмосферу можно было ложками черпать.
Ковырялся в юзерстилях Фастмейла, потому что они сделали редизайн как у всех — тонкая рамка вокруг всего окна, выделения пилюлями вместо закрашивания фона от края до края, градиент зачем-то.
И знаете что? Особо не стараясь, сделал все как мне нужно, закинул в Stylus и забыл. А потом думаю — погодите-ка, а ведь это был... приятный опыт!
Это вообще же забытые технологии древних — вот кто-то нам сделал платформу (веб), на которой устройство любого сайта или приложения открыто, легко читаемо и доступно для модификаций. Все простым текстом, никакой магии, и менять можно прямо на лету. Не нравится что-то? Пошел и сделал лучше, или скачал экстеншн, который делает лучше. Настоящий moldable environment, настоящий end-user programming. Такую свободу невозможно представить сегодня, это буквально эхо лучших времен, когда инновации действительно инновировали и продвигали мир вперед.
Тем более жалко, что мы потеряли даже то, что было. Популярность веба сегодня держится на идеях, заложенных в 90-х, и _вопреки_ всему остальному, что произошло с тех пор. Вместо легко читаемого и легко модифицируемого кода — обфускация, минимизация, генерируемые названия классов (простите, юзер стили), соурсмапы (простите, дебаггеры и экстеншны). Вместо открытых стандартов — наоборот, закрученные гайки, иногда в рандомных местах, иногда совершенно идиотских.
Я как-то отлаживал сайт, и он не хотел давать мне сгенерить crypto.randomUUID. Почему?
Потому что я был не по https. Какая связь? А никакой.
Или локальные шрифты. Раньше я открывал свой сайт, открывал девтулы и вписывал названия шрифтов, которые у меня стояли в системе, чтобы потестить, как это будет выглядеть. А все, нельзя больше. Секьюрити, понимаешь. Можно зато с Гугл Фонтс подключать в четыре клика. Ну и что не удобно. Но локальные — не сесюрно. Ну и что что это увижу только я, что я все это делаю исключительно на своей локальной машине.
Идиотские сроки устаревания на все и вся. Отсутствие гарантий. Галочка «Запомнить меня», которая, кажется, нигде больше не работает. А раньше вот как-то работала. Максимальный срок кук — 400 дней. Ну и что, что ты хочешь больше. Тебя, пользователя, никто не спрашивал. Мы делаем секьюрную платформу тут, а не удобную. Ну и что что нас никто об этом не просил, и что тебе неудобно. Не мешай работать, а?
Знаете, как понять, что емейл — не современная технология? В нее заложена возможность борьбы со спамом. Т.е. реклама тогда еще считалась каким-то злом, и программы помогали пользователю с ней бороться. Сегодня наоборот, реклама это освовной смысл существования многих платформ, а удобство юзера по остаточному принципу. И поэтому вам внутрь программ никто доступа не даст. А то еще не дай бог рекламу отключите, куки баннер вырежете и интерфейс получше сделаете. А следить за вами тогда как?
Молодые этот пост, возможно, не поймут. Потому что они не видели, как _может быть_. Как свободно дышалось, как мы все вместе работали на общее благо, и даже компании делали продукты для пользователей. Эх, какие у веба были перспективы.
Может быть, ИЕ6 это еще не самое страшное, что с ним случалось.
Еще один доеб к интерфейсам компьютерных игр. Часто настройки в них надо «применять». Типа, нащелкал что-то, пошел смотреть как оно, а игра тебе «Вы не применили настройки. Уверены, что хотите сбросить изменения?»
Нет, блин, не хочу! Более того, я ни в какой момент не изъявлял желание что-то там сбрасывать, это вы сами додумали и мне приписали. Я нажал «вернуться в игру», а не «сбросить все что я делал как будто этого и не было никогда и я все это менял чисто фо фан, потеребить чекбоксы». Абсолютно дегенератская логика. Зачем я, по-вашему, менял настройки, если не хочу их применить?
Особенно злые игры не показывают в этом диалоге опцию Применить, а только Сбросить и Отменить. Чтобы ты отменил (выход), пошел, нажал Применить, и только потом выходил. Прям «выйди и зайди нормально», спасибо, мне его в школе хватило.
Люди со стокгольмским синдромом любят защищать такое поведение, потому что у них в голове есть сценарий «я что-то поменял, а потом передумал». Но этот сценарий, во-первых, в сто раз более редкий (настолько, что нормальным решением было бы сказть «просто нащелкай обратно как было»), а во-вторых, если очень хочется, можно для него сделать специальную кнопку.
Но по-умолчанию, блин, если я меняю настройки, значит я хочу их поменять!
Когда я учился на военной кафедре, нам рассказывали байку, что мол когда СССР делал БТРы, у них постоянно что-то стучало, чуть-чуть не стыковалось, двери неплотно закрывались, короче в целом машина работала, но в мелочах была куча косяков.
Ну вот, а байка в том, что эти же якобы чертежи отдавали кому-то в восточную европу производить, и оттуда приходили машины, у которых все было четко, гладко, все ко всему подходило и ничего не жало, не болталось и не свистело. По тем же в точности чертежам.
И вот он я, сижу рассматриваю очередной скриншот Гугл Мита (у меня таких миллионы), в котором простейшая верстка: квадратики 3 на 3 в белом контейнере, и у них левый паддинг отличается от правого, а кнопка по центру как-то получилась не выровнена с центральным квадратиком. Вспоминаю, что сегодня опять же видел скриншот макОСа, демонстрирующий щель в полпикселя между заголовком окна и меню баром (на ретине видно). То есть это буквально ЩЕЛЬ, как у неплотно закрывающейся двери на жигулях. Вспоминаю сегодняшний же пост, где я выбирал элемент в списке, и вместо того, чтобы выбраться, выделение сначала прыгнуло на него, потом назад, а потом на третий пункт.
И таких примеров у меня миллионы. Выравнивание. Анимации. Дергающиеся переходы. Пиксельная сетка. Они везде. У всех больших компаний. Кажется, то ли компании, то ли их код достигли таких масштабов сложности, что нормально сделать они уже не могут ни за какие деньги. А может могут, но не хотят — за качество не повышают. У организации другие цели, и качество, ровно как и пользователи, в них не входят.
Но вывод все равно один. Ваш ФААНГ — это тот же самый СССР.
Люди любят спорить о качестве идей через примеры.
Например, был какой-то редизайн, стало значительно хуже, ergo, редизайны зло. Или вот фильм говяный вышел, про супергероев, значит все фильмы по комиксам говно. Или попробуют Джаваскрипт и делают вывод о динамической типизации в целом. Или смотрят на Электрон-монстров и делают вывод, что хорошие ГУИ бывают только в терминале.
Что я могу на это сказать? Раз эти люди сделали обобщение от частного к общему, то все люди в мире тупые во всем.
Раз уж в комментах люди, похожие на Бирмана, запостили видео Бирмана про 0,(9), а я его посмотрел, а потом еще видео Бориса Трушина посмотрел, то выскажусь и я. Бирман утверждает, что 0,(9) это буквально 1, Трушин — что 0,(9) не существует. Кто прав?
Начнем с того, что числа первичны. Они существуют независимо от того, думаем мы о них или нет, можем мы их записать или нет, есть ли у нас удобная буква греческого алфавита для них или нет.
Далее, есть запись. Это уже вещь для нашего удобства, и она вторична, описательна. Примерно как слово собака — собака существует независимо от того, есть у нас для нее слово или нет. Мы сначала увидели собаку... Хотя, не, не так. Сначала была собака, потом мы ее увидели, потом привыкли, и в какой-то момент задались вопросом: блин, как бы так удобно сказать собеседнику: «Смотри, вон собака голубя ест!». И придумали слово собака.
Записей, понятно, может быть много. Число 1, например, можно записать как 1, как «один», как «ein», как 1/1, как 3/3, ну и иногда еще как 0,(9). Одно число, несколько записей. Число одно. Записей несколько. Но число одно! В общем, вопрос исключительно договоренностей.
Осталось чуть-чуть. Что такое десятичная запись? В какой-то момент люди придумали так обозначать числа. Бирман говорит, что она получается из деления столбиком, но это конечно не так. Число π нельзя получить делением ничего ни на что, а десятичная запись у него при этом есть.
Десятичная запись это «давайте разобьем отрезок от 0 до 1 на 10 частей и посмотрим, в какой интервал попадает наше число». Попало в третий интервал. Значит первая цифра после запятой 2, пишем 0,2. Далее разбиваем этот интервал еще на 10, смотрим куда попало, так определяем следующую цифру и так далее. Возможно, до бесконечности (см. пи).
Понятно, что число может попасть строго на границу интервала. Например, число 0,5 попадет четко на границу между пятым и шестым интервалом. Какой брать? Тут опять, вопрос договоренностей. Но вроде бы договорились, что берем шестой (тот, что справа).
Уф. Все. Десятичную запись определили, все числа пронумеровали. Что осталось? А, 0,(9).
Короче, прикол в том, что 0,(9) не может возникнуть в результате описанного процесса. Никогда. Поэтому Борис Трушин и говорит, что его не существует (хотя перед этим 10 минут тоже доказывает, что оно равно единице).
А дальше начинается чисто языковой прикол. Вместо того, чтобы изучать объекты, люди начинают играть с языком и пытаться понять, какой в этом смысл.
С одной стороны, вроде как у нас есть запись, что-то запятая цифры цифры цифры. И вроде как цифры могут быть любые.
С другой, любые да не любые. Периодические девятки, оказывается, не могут. Как? Что? Почему? Обидно, просто по-человечески. Запись есть, а числа нет. И абсолютно естественное желание попытаться придать этой невалидной записи смысл.
Ну и вот, 0,(9) = 1 собственно и возникает в процессе поиска смысла. Еще раз, весь процесс: есть числа как математические объекты. Есть запись. Есть десятичная запись. Она строится определенным образом. Не все комбинации цифр могут получиться в результате этого построения. Любопытный мозг сразу задается вопросом: а вот эти невалидные записи, что они значат?
Ответ: ничего. Или что угодно. Но в целом, то же, что и валидные. Нам еще в третьем классе говорили, что мол да, такой вот артефакт. У любой конечной десятичной дроби две записи: нормальная и с периодическими девятками. Но второе обычно не используется. Но их две. У одного и того же числа.
С тем же успехом можно задаться вопросом: вот есть 1, а есть −1. Тогда, если есть 0, то должен быть и −0? Что это значит? Или, скажем, есть число 100, но можно так же написать и 00100. Что это значит?
Ну вот 0,(9) это вопрос из той же серии. Надеюсь, стало понятнее. Программистам на заметку. В следующем посте поговорим, 2 и 2.0 это одно и то же число математически или нет?
Непопулярное мнение: Джаваскриптовые числа на самом деле хорошая идея.
Для справки: во всех остальных языках есть числа целые (1, 2, 3), а есть с плавающей запятой (пи, е, 8 и три четверти). Это прям разные типы, по-разному в памяти представлены, операции для них по-разному реализованы, и одно к другому надо приводить, если нужно использовать вместе.
А в Джаваскрипте не так — там все числа с плавающей запятой, даблы то бишь. Но прикол в том, что у дабла тоже есть целая часть, и целые числа вплоть до 53 бит можно представить точно, без округлений. То есть условная 1000 это не приблизительно 1000,0000000007, это буквально 1000,0, без погрешностей. И так до 2⁵³ (потом начинаются погрешности).
То есть, в чем кайф — у чисел всего один тип, число. Число есть число. Изучать проще, думать меньше, выбирать тип не надо, конвертировать не надо, все со всем стыкуется. Красота. Простота.
При этом ты ничего не теряешь, ничем не жертвуешь. Нужно считать яблоки — считаешь их в целых числах. 2⁵³ это настолько много, что ни в одной программе, использующей целые числа именно как числа, больше никогда не понадобится. Ну серьезно, не переполнится у вас счетчик яблок в цикле, и массив такой длины вы не выделите, и денег столько не заработаете, и целочисленные координаты в игре тоже никогда не выйдут за эти пределы. Пятидесяти трех бит ДОСТАТОЧНО ДЛЯ ВСЕГО.
И, главное, здравый смысл не страдает — функция, возвращающая 2, и функция, возвращающая 2,0, по сути возвращают одно и то же. Это бред, делать вид что 2 и 2,0 это разные вещи и не равны друг другу. Это психическая болезнь для любого, кто понимает математику на уровне начальной школы. And yet...
Можно, конечно, скучать, скажем, по целочисленному делению. Но это бред на самом деле, ловушка для новичков. 10 поделить на 3 будет не 3, будет 3,3333333. Особенно в динамических языках весело — вернула у тебя фунция 3 вместо 3,0 (что так-то одно и то же число!), и у тебя деление начинает работать по-другому. Нет уж, ребят, деление и целочисленное деление — две разные операции и должны вообще разными операторами обозначаться.
Страдают от «неправильных» чисел в JS только люди, которые используют числа не по назначению. Ну вот зачем тебе именно 64 бита, почему 53 не хватает? Потому что ты решил позаниматься байтоебством. Тут я считаю, что то, что всякие там битовые сдвиги и xor-ы определены на целых числах — большая ошибка, абьюз, перегрузка типов. Если занимаешься байтоебством — занимайся им на байтах. Пусть у тебя будет тип byte[8], и делай с ним что хочешь. Не надо делать вид, что long это как бы тоже 8 байт, причем в разном порядке в зависимости от CPU. Не надо. Давайте использовать вещи по назначению.
Про указатели тот же аргумент. Ой, указатель это тоже целое число, а значит на нем определены сложение и вычитание? Очень удобно. А также умножение, деление, возведение в степень... А вообще, какие указатели, вы их давно видели? Все современные языки как-то без них обходятся.
В общем, один числовой тип для всех, каждому, и пусть никто не уйдет обиженный. Мы все ругаем Джаваскрипт, но иногда можно и похвалить. В чем-то он опередил свое время.
Взяли на работу зумера, а у него, конечно, Неовим. И вообще в нашем доме престарелых ходят слухи, что Неовим это новая горячая штучка, и это может означать только одно: мы (да, мы, вы и я, лично) просрали графические интерфейсы.
Надо понимать, что я застал еще компы без Винды вообще, на голом ДОСе, и у меня никогда не было иллюзий — текстовые интерфейсы это от бедности. То есть все, кто делал условные Volkov Commander, Turbo Pascal или Vim сделали их текстовыми потому что такие были ограничения, а не потому что это было какое-то видение. «Пользователи смогут это запусить» — вот и все видение.
Сегодняшняя же ситуация кардинально другая. Никаких ограничений в принципе нет, и уход в терминал — осознанный выбор. Почему? Потому что графические приложения в большинстве своем раздутытые, медленные, неудобные и не особо красивые.
Почему так получилось? Ну, во-первых, операционные системы всухую проиграли войну браузерам в удобстве АПИ: писать нативные приложения долго, дорого и неудобно, работать они будут все равно так себе, перформанс будет так себе, и запускаться будет на одной платформе. Приложения на браузере тоже будут медленные, но зато все остальные проблемы веб решил: и удобство разработки, и портабельность. Сейчас он, правда, тоже начал загибаться, но это, наверное, закон больших систем.
Короче, в браузере фигня, в нативе фигня, куда бежать, куда податься? Остается терминал. Контр-культура, просто методом исключения. Я в начале карьеры слышал истории про цикличность моды, про переоткрытие технологий, но не думал, что все это смогу вживую наблюдать в масштабе одной жизни. Засрали одно место, пошли в другое. Сёркл оф лайф.
В целом, я все еще верю, что графические приложения _можно_ делать быстрыми и красивыми. Проблема в том, что это в среднем не так, и они заработали себе _репутацию_. Типа, законы физики не мешают русским автопроизводителям делать хорошие машины, но они их почему-то все равно не делают.
Вот так и с графическими приложениями. Обидно? Да. Потому что я-то в это верил. В удобство ГУИ, в эстетику, в новые возможности.
А оно вон как оказалось. Добро пожаловать в терминал. Type h for help.
Кстати, сходил в подкаст «Тысяча фичей», где рассказал про Датомик. Если интересно, как можно сделать базу данных сильно по-другому, да еще и силами трех человек — послушайте. Ссылку хотел приложить, да уже запечатал письмо, сорян
Читать полностью…