Pull to refresh

Comments 54

Использование Jekyll вместо WordPress не сделает автора мультимиллиардером

UFO just landed and posted this here
Итак, появился молодой преуспевающий программист. (Хорошо, это был я.) Я решил, что вместо хардкода массива всех букв будет проще написать цикл for, который проходит от 65 до 90, а затем генерировал буквы по полученному коду символа.

Угу… А потом появился менеджер и сказал, что эта лабуда должна ещё поддерживать русский, греческий, финский и ещё полсотни разных языков.
Или не появился. Или появился, но не сказал. Или появился, сказал, но что-то другое (что проект закрывается, например).

Ничего страшного. Берем и пишем шаблонизатор, который будет заниматься кодо (бредо?) генерацией.
Действительно — наличие в коде магических констант вида "код символа А в русской раскладке" ничем не лучше полностью определенного массива. Главное — комментарии в коде не забудьте, которые будут говорить ЧТО МЫ видим перед глазами и ДЛЯ ЧЕГО это было сделано.

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

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


Родственник мой, S., оказался в Америке в начале восьмидесятых, в
возрасте "за сорок" и владея английским языком в рамках "средней школы
давно". Помыкавшись некоторое время (не о том сказ), S. нашел отличную
работу — программистом Больших Шкафов для телефонного гиганта AB&C
(кто знает, тот поймет). Для общения с начальством новоиспеченный
программист быстро выучил английскую фразу "летмишоую" (сейчас покажу),
за которой следовала демонстрация работающего кода, и вопросов больше не
возникало.


Работа в телефонных гигантах неторопливая, но S. бездельничать не любил,
и решил заняться оптимизацией. В одном из Больших Шкафов обнаружилась
база данных, а в ней — таблица с парами чисел: 1-3, 2-6, 3-9,…,
1000000-3000000. Ничтоже сумняшеся, S. таблицу стер, а обращения к ней
заменил строчкой B=Ax3. Шкаф, радостно заурчав, продолжал
функционировать. Отсутствие таблицы начальство заметило (и то по чистой
случайности) через неделю. Состоялся знаменательный диалог:


  • Где таблица?
  • Таблица не нужна.
  • Как это не нужна?
  • Ну, не нужна. Летмишоую. Вот: B=Ax3
  • Что это?
  • Вместо таблицы.
  • А где таблица?
  • Я ее стер. Не нужна.
  • Как стер???
  • Летмишоую. Вот, работает. B=Ax3
  • Ну, работает. А где таблица-то?

    В конце концов, проявив завидную корпоративную мудрость, начальник
    оставил S. в покое. А по AB&C долго ходили легенды о сумасшедшем
    бородатом русском, который ПРИДУМАЛ ФОРМУЛУ.

Всё движется по кругу...

программистом Больших Шкафов для телефонного гиганта AB&C

кто знал и понял поделитесь пожалуйста своим знанием и пониманием

Было неочевидно, что это просто такое сокрытие гиганта. Я думал, может у них там специфические Большие Шкафы, полные мемов были

А потом оказалось, что внезапно, чтение из памяти выполняется гораздо быстрее, чем чтение + дополнительные вычисления, и из-за действий «бородатого русского придумавшего формулу», критично важная система, работая в том же режиме, начала испытывать на 50% большую нагрузку. И таблица там изначально была не просто так.

Запросто. А могло оказаться, что сэкономленная память позволила не устанавливать рядом очередной Большой Шкаф и компания сэкономила пару миллионов долларов.
Вывод банален — каждый конкретный случай нужно рассматривать индивидуально, и не агитировать за универсальные практики — "все сворачиваем в формулы" или "все выносим в константы". Всегда найдется куча исключений...

Еще один вывод — все необычные решения стоит подробно коментировать. Чтобы разнообразные молодые преуспевающие не лезли слепо улучшать.
Мы можем получить B или чтением из памяти, или вычислением (а не чтением и вычислением).
Чтение из памяти быстрее, чем две операции на CPU (сдвиг и сложение)? Не верю.

Маловероятно (учитывая, что умножение на 3 – это просто 2 сложения). А на современных процессорах вообще гарантированная экономия времени (кэш!).


Могло быть другое: где-нибудь в середине таблицы последовательность чуток меняется. Но, надеюсь, он проверил это.

Он не проверил, не будет ли последовательность меняться в будущем

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

UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here
И даже в этом случае х3 превращается в два сложения компилятором.
UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here
>рано или поздно большинство программистских задач можно будет реализовать на простом английском
Дебажить тоже на простом английском? Типа «make this piece of **** work».

Если вы про предысполнение Javascript на сервере или в билде, чтобы в браузер загружался только финальный результат, то такое уже есть: https://prepack.io

есть много доказательств того, что программное обеспечение ест мир.


Наверное, это — опечатка. Но, звучит, как народная мудрость.
UFO just landed and posted this here

И братья сестры Вачовски, пророки его

В «нормальных» языках можно делать примерно так: ('A'..'Z').to_a и «закэшировать» в константу.
Тру разработчик написал бы webpack лоадер/плагин, что генерировал бы данную последовательность на этапе сборки и генератор d.ts файлов с описаниями типов в придачу. Вида
Заголовок спойлера
type Letters = ("A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z")[];

Пример вообще забавен: скармливаем его wc и видим 73 символа для генерации константы длиной 28 символов (26 букв и кавычки). Хотя по большому счёту тут пофиг, какое решение использовать, 99.99% это не узкое место.


А так – неплохо бы разработчику иметь опыт в разных областях (и, желательно, базовое образование в CS – можно просто книжки почитать, до уровня "уметь оценивать O(n) и выносить инварианты из цикла"). Например, поиграв с кодогенерацией в C++ или ещё чем – привыкаешь делать то, что можно, в Compile Time.

Со стороны пользователей мобильных устройств не хотелось бы тратить заряд батареи на такие вычисления :)

Я один из своих pet-проектов пишу на тяжеловесной Java (под Tomcat) — производельность ну так себе и ресурсы ест хорошо, студент еще *овнокодит помогает. Но на этапе релиза запускаю маленький скрипт с ботом (wget) который обходит все страницы (пара десятков тысяч), сохраняет их в папку, меняет пути и ложит на сервер под nginx (посредством rsync). Взаимодействие с базой на ajax. Сервер самый что ни на есть дохлый, но всё летает.

Имхо, на WP без динамики можно делать тоже самое: работать в локальном WP, а на сервак загружать статику.

поздравляю, вы тоже сделали себе JAM stack. Только J у вас означает Java, а не Javascript

Второе можно создать копипастом, но вдруг нам понадобится заменить везде звзедочку на другой символ. Хотя, для сильно спец. символов в такой простой проге есть Ctrl+H.

Думаю легенды обошлись бы одним вызовом, а не пятью :)

К слову, gcc и clang даже на -O1 догадываются преобразовать printf с тривиальной форматной строкой в puts. Но, почему-то, не MSVC.

А если начнёте работать с русским языком, то выяснится ещё одно преимущество хардкод-таблиц — возможность задать свою сортировку. Потому что буква Ё в юникоде находится не между А и Я, а в сторонке (причём в разных сторонках для строчных и заглавных). Такие дела.

А потом попросят добавить фонетическую сортировку в Японском и желание писать "свои" сортировки с хардкод-таблицами куда-то пропадёт :)

Вот тогда-то самое время будет изучить unicode collations и всю связанную машинерию :-)

Миллениалы опять изобретают constexpr?
А если ещё и до «Premature optimization is the root of all evil» додумаются, то вообще страшно становится, можно же будет писать и так и эдак, в зависимости от ситуации.
Это не выглядит так, как будто алфавит будет отличаться от одного сеанса к другому.

Сначала подумал, что опять английское "it doesn't look like" перевели дословно, полез в оригинал, а там "it wasn't as if".


На мой взгляд, что-то вроде "Алфавит ведь не будет меняться от запуска к запуску" будет более уместно.

UFO just landed and posted this here
Статью прочитал, чтобы написать этот комментарий и задать вопрос. Что в статье относится к веб-дизайну?
Sign up to leave a comment.