Например, вчера LG анонсировала 6K монитор, который поступит в продажу позже в этом году. Ну и как мне узнать, когда это произойдет? Единственное, что приходит в голову, это подписаться на какой-то сайт с новостями о хардваре, но это же целый год придется нерелевантные новости читать ради одной когда-нибудь релевантной.
Или часто какой-то фильм заинтересовал трейлером. Как узнать, когда он приедет в кинотеарты? Или в цифру? Пока получается только случайно. Хотелось бы как-то более надежно.
Или, скажем, любимый режиссер новый фильм снял. А я откуда узнаю? При этом мне не нужны все новые фильмы, это слишком много, мне хотелось бы конкретные фильтры.
Короче, миру нужен RSS ко всему.
UPD: ребята, не зацикливайтесь на протоколе. Может быть RSS, email, телеграм, мне пофиг. Главное — уведомления об объекте с точечным фильтром
В комментах к посту про Island of Insights скинули ссылку на блог Doredel (Аня играет в игры), и я там подзалип (рекомендую!), а также нашел 14 Minesweeper variants, про которую я даже не слышал и которая ровно то, что я искал — видите, чудеса бывают!
А сегодня решил сделать зеркалочку на пост оттуда «Что не так с Rogue-like играми». Аня их не любит, а я наоборот, в не-rogue-like играть почти не могу. Итак, что ТАК с Rogue-like играми.
Основная проблема с мейнстримными играми в том, что в них есть win condition, но нет lose condition. То есть как бы плохо ты ни играл, через положенные 8-16 часов ты доберешься до задуманной авторами концовки. Каждую ситуацию тебе достаточно пройти _хоть как-то_ один раз, а если не получится — загрузился и попробовал снова. Если ты не игровой журналист, рано или поздно ты пробьешься через любую преграду.
И в какой-то момент меня это стало жутко бесить. Потому что — если игра все равно пройдется, что бы я ни делал, то зачем там я? В чем, так сказать, смысл? Я как-то пытался поиграть в Call of Duty, включил, посмотрел кинцо, мне дали автомат, рядом взвод коллег, я начал разбираться, какая кнопка что делает, а они раз-раз и все зачистили. Прикольно, ребят, я вам не мешаю?
Или вот прямо сейчас прохожу Космическую Марину-2. И там есть задания, когда нужно защищать какие-то колонны от Тиранидов. Они, типа, их облепляют и грызут, и вот нужно не дать сгрызть. Прикол в том, что что бы ты ни делал, это ни на что не влияет — стреляешь по ним, вроде кто-то падает, но меньше их не становится. А потом, по таймеру, видимо, просто все падают разом и задание считается выполненым. Ощущение, что тебе дали подержать автомат с игрушечными пулями. Если бы я был ребенком, я бы, наверное, впечатлился, но я-то не ребенок.
Финансовая мотивация и mass appeal понятны. Было бы странно добровольно отдавать 70 евро, запускать игру, а игра тебе говорит «ты лох» и тут же убедительно это доказывает. То есть, любители, конечно, и на такое найдутся (см. Дарк Соулс), но это явно не может быть массовым, дефолтным состоянием.
Ну вот, а я, похоже, перешел в разряд этих самых любителей. Ключевым для меня в роглайках стало то, что качаешь ты не персонажа, а себя. То есть игра фиксированная, и единственный способ продвигаться — становиться лучше. Это придает смысл всему процессу, что ли.
Помню, как запускал Дед селлс в первый раз, и как страдал на первом уровне, не мог увернуться от зомби и стрелков, и как радовался, когда получалось дойти до второго уровня, и как мечтал, что когда-нибудь, может быть, увижу третий. И как сейчас, 200 часов спустя, если начинаю новый сейв, прохожу через первые уровни как нож через масло, удивляюсь еще, почему они начало таким скучным сделали, противники мебель какая-то неподвижная.
Так вот, весь этот прогресс — он исключительно внутри меня произошел. Игра тут вообще ни при чем, игра не изменилась. И поэтому, кстати, это единственные игры, которые заставляют меня залипнуть на сотню часов — создание новых нейронных связей процесс небыстрый.
В общем-то, все остальное вторично. Пермасмерть и рандомная генерация уровней нужны только затем, чтобы заставить тебя пройти через процесс самопрокачки, они средства, а не цель. Можно, наверное, и без них — Дарксоулсы, например, не генерят уровни, но прокачивать себя заставляют. А Диабла, например, при всей своей рандомности не цепляет, потому что скиллчека нет — что бы ты ни делал, монстры мрут пачками все равно.
А так в статье про недостатки все верно написано: рандомная генерация это от дешевизны, конечно, сложность балансировать сложно (запускал как-то Monster Train, прошел его с первого раза, хмыкнул и закрыл), играешь по сто раз в одно и то же.
Но что делать, в обычных играх «на прохождение» смысла еще меньше.
К мему с семвером пришли люди и начали предлагать CalVer — это когда версия это Год.Месяц.День или типа того.
Но это самая бестолковая схема эва!
Во-первых, она предполагает, что новое всегда лучше старого. Типа, Вася написал библиотеку в 2025-м, а Петя в 2024-м. Оба потратили на них по три часа. Но у Васи версия больше! Почему? А нипочему.
Во-вторых, кажется, что со старым софтом что-то не так. 1.0 звучит солидно когда угодно, а 2020 звучит как-то не очень, типа, фу, 4 года назад. Хотя программы так-то не стареют. Алгорит, написанный четыре года назад, будет так же хорошо работать, как и написанный сегодня.
(а учитывая, что компьютеры становятся быстрее, в прошлом ограничения были более строгие, следовательно, шанс, что старые программы будут работать быстрее, тоже выше)
В-третьих, она никак не отражает, собственно, масштаб изменений. Скажем, Вася написал библиотеку в 2020-м, а потом поправил один минорный юз-кейс в 2025-м. Итого мажорная версия скакнула аж на пять единиц! Любому, кто будет принимать решение об обновлении, может показаться что это что-то прям важное.
В-четвертых, ложное чувство безопасности. Скажем, ты поставил версию 2025.01.01. Новогоднюю. Всего пять дней прошло, думаешь ты. Обновляться явно еще рано. А на самом деле после 2025.01.01 в тот же день вышла 2025.01.01-001 (куда, кстати, девать номера вышедших в один день?) с фиксом критической уязвимости. Но версия этого никак не отражает.
Короче, версионирование на гордости/стыде мне хотя бы понятно. Семантическое тоже, хотя в реальности следовать ему трудно. Версионирование по дате я не понимаю от слова совсем.
С тем же успехом возьмите просто одно число и увеличивайте его на 1 с каждым коммитом. Это хотя бы избавит от иллюзий, связанных с недавностью.
Хуже только когда после 3.9 решают бампнуть до 4.0 просто для красоты.
«Программистам не нужны шорткаты. Средний программист коммитит 40 строк в неделю, большинству еще оооочень далеко до точки, в которой шорткаты начнут хоть как-то помогать»
Запускал тут на днях Идею, а она мне пишет рядом с каждым полем количество его использований. Прям английским по белому:
public char[] readBuf; 22 usages public char[] accumulator; 14 usages public int accumulatorLength; 20 usages
Вопрос: а зачем?
У меня, конечно, есть версия. Моя версия — потому что может.
В какой-то момент разработка ИДЕ уперлась в стену — вроде бы все что смогли придумать сделали, все сравнялись по фичам, а продавать продукт как-то надо. То есть надо пользователя как-то убедить, что а) ему нужны фичи, и б) у нас их больше чем у других. Делать что-то, неважно что, лишь бы у других этого не было. И началась гонка фичей. В этой гонке никто не задавался вопросом «а надо ли». Больше — значит лучше. Тогда же возникла мантра «не нужно? не пользуйся, тебя же не заставляют».
Но в новом году я хочу практиковать открытый майндсет. Вдруг я не самый умный, не самый правый, не самый догадливый? Вдруг я чего-то не знаю? Вдруг я в чем-то не прав?
Шансы, конечно, невелики, но я готов это признать при наличии убедительных доказательств.
Давайте попробуем. Объясните мне, какая польза от этих аннотаций.
Пишут, что в Whatsapp сейчас работает 150 только дизайнеров (есть какая-то известная статья про то, что во всем Вотсаппе 20-50 инженеров и только, но она старая, сейчас вроде 1600 человек и из них 150 дизайнеров, не перепутайте).
Тема, конечно, изъезженная, но мне все еще любопытно, как выглядит средний день среднего дизайнера. Над чем он работает (учитывая, что дизайн Вотсаппа не менялся уже лет десять, они за это время ну может пяток иконок добавили), куда потом эта работа идет, как он себя по этому поводу чувствует.
И нет, я не хочу, чтобы они делали редизайн каждый год. Очевидно это было бы хуже. Но вот они не делают, а дизайнеров все равно 150. Чем они заняты?
Я уже рассказывал, как с удивлением обнаружил, какие игры мне нравятся, и это не обязательно те, которые я бы хотел, чтобы мне нравились. Например, я даже PS5 решил продать, потому что понял, что ну не заходят мне игры-морские свинки — это когда игра и не кино, и не игра (то есть без геймплея).
Сегодня порекомендую вам такой странный тайтл как Islands of Insight. Там все неправильно — начиная с того, что это «квест-паззл», работающий как ММО. То есть это огромный мир-хаб, и пока ты решаешь загадки, вокруг тебя бегают другие игроки (сейчас, кажется, сервера отрубили и остался только оффлайн).
У тебя есть персонаж, которого надо прокачивать (опять таки, в паззле!)
В добавок к этому он некрасивый. Точнее, графика-то там ого-го (Пазл! Требовательный к видеокарте!), он скорее неизящный какой-то, безвкусный.
Многие пазлы в нем оскорбительны своей примитивностью (найди скрыты объекты! пробеги трассу на скорость! запомни расположение квадратиков! сопоставь фотку с пейзажем!) и явно являются филлерами.
И все же, и все же. Все это можно (и нужно) перетерпеть ради, собственно, пазлов. Вот те, которые с черно-белой доской, вот они главное блюдо и жемчужина, единственное, что сделано безоговорочно хорошо и, собственно, делает игру имеющей смысл.
В них вам дают доску, которую нужно заполнить черными и белыми квадратами. Правила меняются (например, все черные регионы должны иметь площадь 2. Или все белые должны быть соединены. Или возле вот этих квадратов должно быть 4-5-6 квадратов того же цвета), но формат остается. Казалось бы, ну сколько можно в таких ограниченных условиях придумать пазлов? Оказывается, тысячи! И они интересные, прям их решение это отдельный кайф: есть по-проще, есть по-сложнее, есть, где надо догадаться до какого-то принципа, и к концу игры ты с парой десятков этих принципов, которые постепенно открывал, решаешь уже мега-доски.
Короче, звучит наверное непонятно или скучно, но на деле затягивает как наркотик. Похоже на судоку или hexacells — большая проблема, и ты сидишь и пытаешься логически понять, в заданных условиях, что-то однозначно верное про доску. Обычно это всего один или два возможных «следующих шага» в рассуждении, и именно их надо найти. И так, шаг за шагом, ход за ходом продвигаешься по чуть-чуть, пока все не решишь.
В общем, странный зверь. Наверное, на это был бы похож The Witness, если бы Джонатан Блоу в какой-то момент не сказал себе «Пазлы самоценны, не надо как-то дополнительно развлекать или мотивировать игрока» и продолжил добавлять контент любой ценой. Но — еще раз — пазлы с досками 100% legit, я фанат и готов ради них терпеть все остальное. Другие пазлы или треш, или ну такое (там есть несколько других видов логических пазлов, но они мне не зашли).
Я даже думал натырить пазлы оттуда и выложить куда-нить в интернет, потому что UI там реально максимально базовый. Пока рекомендую как есть — вдруг вам тоже надо именно такое.
Сформулировал наконец, что значат цифры в SemVer, или «семантическом» версионировании.
Итак, допустим, у вашего продукта версия A.B.C.
Тут A — это рекламная версия. Когда вам нужно создать инфоповод и напомнить миру, что вы существуете. Менять что-то необязательно, но можно редизайнчик ебануть, например.
B — это дефолтная версия. Когда ни туда, ни сюда, просто посидели, что-то поделали.
C — это позорная версия. Она бампится, когда вам не хочется привлекать внимания к косякам, которые вы сами же и создали.
Смотрите. Если у вас классическая светлая тема, то цвета текста надо брать темные — темно-синий, темно-зеленый, темно-сиреневый. Ну потому что фон светлый.
А темные цвета что? Правильно, некрасивые. Например, в дефолтной Light у JetBrains весьма неприятные синий, темно-сиреневый, темно-бирюзовый (буэ) и даже темно-желтый кое-где есть. Я какое-то время думал, что они просто плохо их подобрали, но вчера осознал, что это принципиальное ограничение, которые вытекает из необходимости контраста.
А вот если у вас темная тема, то и использовать вы можете самые классные цвета, свежие, яркие, насыщенные. Просто потому что _все_ цвета лучше выглядят в светлом варианте.
Так мы научно обосновали преимущество темных тем перед светлыми.
Также я понял, что когда-то подсознательно выкрутился из этой патовой ситуации, сам того не осозновая. В моем Alabaster используется «подсветка фоном». Т.е. текст всегда остается черным, а если надо выделить, например, строки, то выделяется фон вокруг них. И вот при выделении фоном контраст как раз не нужен, и можно опять же использовать чистые светлые зеленый-желтый-голубой-сиреневый _в светлой теме_. И кайфовать.
Ну и вдогонку, чтобы два раза не писать. Когда начал разбираться с цветом, наверняка, как и многим другим, мне пришла в голову «гениальная» идея сделать идеально сбалансированную цветовую схему. Типа, взять OkLCH, зафиксировать яркость и насыщенность и сгенерировать пять-восемь цветов равномерно распределенных по цветовому кругу. Ну и получится идеально сбалансированная, математически точная цветовая схема.
И знаете что получилось? Что цвета хрен отличишь друг от друга. Потому что натурально, яркость одинаковая, насыщенность одинаковая, а к оттенку наш глаз сильно менее чувствителен. Смысл выделения не в том, чтобы все выглядело одинаково, а в том, чтобы все выглядело по-разному, _выделялось_.
Но попробовать все равно стоило. Хотя бы ради инсайта.
Знакомлюсь потихоньку с фронтендом, узнал, что у нас используется библиотека Turbo. Как я это узнал? А очень просто. На запуске она печатает здоровый такой баннер, что у нее вышла новая версия и пора бы обновиться.
Офигеть, да? Какая-то сраная библиотечка считает себя насколько пупом земли, что позволяет себе а) занять десяток строчек в логе, б) сходить в интернет и проверить версию, хотя ее об этом никто не просил, и в) присесть мне на уши по поводу обновления, как будто у меня других дел нет.
Отдельно бесит, что вообще говоря в использовании более старых библиотек никаких проблем нет: меня все устраивает, все нужные функции есть и работают как мне надо, нафига мне обновляться? Чтобы что? Просто чтобы еще работы на пустом месте создать и еще чуть больше устать? Спасибо, услужили.
Серьезно, вот что происходит, если у разработчиков слишком много денег и свободного времени: все функции уже реализовали, на Раст переписали, что дальше делать? Приходится какую-то ерунду выдумывать, «улучшать» стандартный воркфлоу не там, где нужно, а там, где проще, и отвлекать пользователя. Понятно, что это работает на саморекламу — у нас, может, еще десяток других библиотек, про которые я так и не узнал, а эта хоть и бесяче, но заняла место в моей голове — но как же я от этого устал. Не надо, пожалуйста, из каждой библиотеки делать источник новостей.
С ужасом жду момента, когда другие переймут эту практику и на старте в логе будет пяток-другой баннеров, в идеале с мигающими буквами, бегущей строкой и анимированной псевдографикой, которые будут просить обновиться, занести денег бездомным котятам, переименовать master в main и стать веганом. Даже библиотека для этого будет, shame.js. Как будто к этому все и идет.
В любом нормальном языке можно работать с путями до файлов. Только иногда пути это просто строки (String), а иногда — специальные классы (File, Path и т.д.).
Так вот, сколько я на это смотрю, так и не понял преимуществ оборачивать пути в классы. Над строками работают все обычные операции со строками — склеить, поделить, интерполировать, сериализовать. А на «путях» — нет. Существование таких классов как правило только возни добавляет. Преимущество делать new Path(pathStr).exists() вместо Path.exists(pathStr) довольно сомнительное.
И вдогонку: коллективным разумом выяснили, что лампочка показывает уровень заряда кейса, если вытащить наушники, и «заряжаются ли наушники», если они в нем. ОДНА И ТА ЖЕ ЛАМПОЧКА. ОДНИМ И ТЕМ ЖЕ ЦВЕТОМ. ДВЕ ПРИНЦИПИАЛЬНО РАЗНЫЕ ВЕЩИ. К вопросу о модальности и как она легко может запутать даже взрослых умных людей.
Очень жаль, что Эплы решили не делать свою машину. Представляю, как у них внутри была бы лампочка, которая показывает уровень заряда батареи, если водительская дверь открыта, и «включены ли фары», если закрыта. Столько возможностей, ух
На кейсе от аирподсов есть лампочка, которая иногда горит зеленым, а иногда — оранжевым. И вот после трех лет использования я сдался и загуглил, что же она показывает.
Ожидание: лампочка горит оранжевым, когда кейс пора заряжать. Ну, типа, как на ЛЮБОМ другом устройстве.
Реальность: лампочка горит оранжевым, если она заряжает наушники. То есть, по сути, всегда: если я складываю в кейс наушник, значит я им только что пользовался, а значит он чуть-чуть, но разряжен.
С другой стороны, может я какое-то время носил кейс и решил достать наушник. Но в этом случае мне глубоко пофиг, насколько он там зарядился: если я решил достать наушник, значит я его достану. Вывод: в лампочке смысла нет в обоих случаях.
Как же тогда узнать, когда пора заряжать кейс? Очень просто, следите за руками:
Включаем телефон Разблокируем телефон Выходим в хоум скрин Подносим кейс к телефону Открываем кейс Трогаем экран, чтобы телефон не успел заблокироваться Ждем Ждем Открываем-закрываем кейс пару раз НА ВСЯКИЙ СЛУЧАЙ Перемещаем его в пространстве вокруг телефона, трем об спинку, постукиваем, пытаемся приложить к чему-то чувствительному внтури Сомневаемся в собственной адекватности Ставим под сомнения каждый жизненный выбор, приведший нас к этой ситуации О, окно с уровнем зарядки появилось! Но это только если кейс не сдох совсем в ноль, тогда секунд через 30 ты догадаешься это проверить по лампочке (она не будет включаться совсем)
Никита, но есть же виджеты, показывающие уровень заряда? Есть. Но они показывают заряд в произвольный момент времени в прошлом И НИКАК ОБ ЭТОМ НЕ УВЕДОМЛЯЮТ. То есть 37% на виджете легко может означатт «в среду в семь утра на прошлой неделе уровень заряда был 37%». И никак об этом узнать нельзя.
И все это ради того, чтобы не делать нормально одну гребаную лампочку.
Честное слово, как Ватсон не мог без трубки, так и пользователи Эпла не могут ПРОСТО взять и чем-то пользоваться. Эпловоды должны страдать.
Мало кто думает про долгосрочные психологические эффекты программ, а они есть.
Простой — надежность. AirDrop классный, когда он работает, но невозможный, когда нет. На его фоне Телеграм кажется истинным чудом — ни разу еще такого не было, чтобы ты положил файл на одном устройстве и он не появился через пару секунд на другом. Это ощущение надежности не купишь никакими интерфейсами, шрифтами, кнопками или анимациями. Что толку в Аирдропе, если в конечном итоге я не получу файл? Команде Телеграма удалось сделать лучший файлообменник, настолько хороший, что им можно пользоваться даже несмотря на другие ненужные функции вроде чатов. А нужна-то была — всего-навсего — надежность.
Со звонками наоборот: на телефоне Телеграм работает кое-как, а Вотсапп гораздо лучше. А вот на компе найти программу для созвонов, на которой вот чтобы совсем не было ебли, у меня пока не получилось. Причем тут речь не о 90% успеха, а именно о 99,999%. Чтобы пропал страх, нужно прям долгое и стабильное закрепление.
Или наушники — с блютусными ты знаешь, что в 10% случаев будет какая-то боль, у тебя прям в голове этот психологический барьер, когда их надеваешь — ух, щас или все хорошо будет, или я знатно поебусь. А с проводными или вайфайными такой проблемы просто нет, нет этого барьера.
Другой долгосрочный эффект — стабильность. Как мы уже говорили, современные компании не хотят делать продукт, они хотят делать новости. Поэтому интерфейс постоянно меняется, кнопки переезжают, привыкать ни к чему нельзя. В итоге ты не привыкаешь пользоваться продуктами, ты привыкаешь сканировать интерфейс каждый раз и ориентироваться на лету, потому что наверняка что-то опять перепридумали, перерисовали, переставили.
Операционные системы больше не выполняют роль стандартов в построении интерфейса, потому что сами меняются раз в два года. В двухтысячных все воротили нос от интерфейсов на Флеше, потому что они были кастомными и нестандартными, надо было разбираться. Так вот, сегодня ВЕСЬ компьютер это набор интерфейсов на Флеше. И не только веб, нативные приложения тоже.
Результат? «Учиться» пользоваться компьютером потеряло смысл. А не могу показать маме, где кнопка «выбрать аудиоустройство», потому что она сегодня тут, а завтра — там, и выглядит по-другому. В компьютере сегодня нужно учиться ориентироваться на незнакомой местности.
«Код должен читаться как книга». Ну что за бред. Конечно же нет.
Книга — это LinkedList. Единственный способ ее потребления — слово за слово, по порядку.
Код — это HashMap. Он читается с произвольного места, у него нет линейного развития, начала и конца.
Даже просто внешний вид кода — по одному выражению на строку, огромные меняющиеся отступы, несогласованные предложения, сильно расширенная пунктуация — должен намекнуть, что это совсем не книга. Единственное, что есть общего у книги и кода — буквы.
Этот пост напоминает вам об опасности аналогий. Плохая аналогия отдалит вас от правды, а не приблизит. Прямо как котенок с пуговицей.
Я уже писал, что главный принцип хорошего кода — названия переменных из одного слова. И вот вчера тырил код (опен-сорсный, релакс) и там у чела синдром второго слова во все щели, просто невозможно. И, главное, все без проблем переименовывается и читается в сто раз лучше:
curChar - ch bufChar - ch idata - i или data startpos - start или pos cbBuffer - cb или buffer nElems - n или len или cnt retval - ret или res strdata - str, блин! keyVal - key valVal - val mapObj - map или m aryObj - res или acc (ну там по смыслу) objReader - reader
Главное правило интерфейсов: если у вас нарисована скрепка и я на нее нажму, должен открыться диалог выбора файла. Не меню какое-то, а выбор файла.
А то некоторые любят там пофантазировать: какие-то «недавние» файлы предлагать, или дробокс с гугл драйвом, или еще как-то, или вообще не файлы тоже туда засунуть. Слак так делает, Телеграм так делает, Whatsapp, FastMail, Notion. Не надо так!
Во-первых, я никогда не буду прикреплять файлы из какого-то стороннего сервиса, потому что я ими не пользуюсь.
Во-вторых, если бы и пользовался, вы все больные там, если думаете, что я буду полагаться на какую-то интеграцию. Наверняка там надо восемь кругов ада пройти чтобы условный Слак узнал про условный Гугл Драйв, наверняка за этим никто не следит (потому что фича бесполезная), наверняка оно работает кое-как. Нет уж, у меня есть руки, я сам могу файл откуда надо достать и куда надо положить, спасибо, не надо мне помогать.
В итоге скрепка с меню — это еще один бесполезный шаг, который мешает нормальным людям прикрепить файл. Не надо так.
Самая смешная фигня на свете — инструкции, как подбирать «сочетающиеся» цвета на цветовом круге.
Обычно так: выберите точку, проведите прямую через центр, и на противоположном конце будет «противоположный» цвет, который гарантированно хорошо будет сочетаться с вашим. Дальше там начинаются варианты, типа, можно не два цвета выбрать, а три, тогда они должны по кругу на одинаковом уголовом расстоянии друг от друга находиться, и так далее. Можно четыре, пять, вы поняли.
А смешная она по многим причинам. Начнем с того, что цветовой круг — абсолютно рандомная штука, она никем не дизайнилась и ничему в реальности не соответствует. Спектр света линейный, поэтому чтобы его закольцевать к нему добавили мадженту — сумму красного и синего. Почему бы и нет? Далее, ваш круг скорее всего sRGB, то есть его пики — красный, синий, зеленый — просто соответствуют частотам соответствующих светодиодов, которые получилось придумать. Придумали бы другие светодиоды — пики были бы в другом месте, и вы составляли бы другие палитры. Наконец, sRGB довольно корявое цветовое пространство — яркость скачет, цвета складываются нелинейно, градиенты грязные.
Так что тут побеждает не здравый смысл и не глаза, а простота рецепта. Любой может провести отрезок через центр и получить два цвета. Получится хорошо или нет — уже не важно, важно, что это легко сделать.